Wargame, CTF/webhacking.kr

Webhacking.kr 27번

부산형 2019. 10. 21. 21:12

SQL injection

 

source

소스를 보면 no값을 GET방식으로 받고

#, select, (, 공백, limit, =을 필터링하고 있다

쿼리문은

Select id from chall27 where id='guest' and no=()

저 괄호 안에 우리가주는 값이 들어가게 된다

 

쿼리문을 넘겨 admin이 나오면 클리어

admin은 2니까 1을 넣으면

 

guest가 나온다

이때 쿼리문은

Select id from chall27 where id='guest' and no=(1)

 

 

querry error가 나온다

Select id from chall27 where id='guest' and no=(2)

guest는 no=1이니까 거짓일 수 밖에 없다

 

admin을 꺼내오려면 조건문에서

id='guest' and no=

이것을 거짓으로 만들고 다른 SQL문을 삽입해야한다

 

no값에 2||no>1을 삽입했을 때

Select id from chall27 where id='guest' and no=(2||no>1)

괄호를 우회하기 위한 구문도 넣어주어야 한다

위에 필터링 목록을 보면

여는 괄호만 적용되어 있기때문에 

2다음에 닫아주고 뒤는 주석처리를 한다

 

no값에 2)||no>1--%09

Select id from chall27 where id='guest' and no=(2)||no>1--    )

--뒤에는 공백이 있어야 주석이 적용되기 때문에

' '(%20)//한칸공백을 넣어줘도 되지만 필터링되기에

%09(tab)을 넣어주어 공백효과를 낸다