Wargame/Webhacking.kr

Webhacking.kr old 18번 문제 풀이

esyeonge 2021. 4. 10. 01:35

18번은 SQL Injection 문제인가보다.

view-source를 클릭해서 소스코드를 보자.

 

형광펜 그어진 php 부분만 보자.

preg_match를 통해 공백, /, 괄호, |, &, select, from, 0x 등을 필터링 하는 것을 볼 수 있다.

 

SQL은 다음과 같다.

select id from chall18 where id='guest' and no=$_GET[no]

이때 id가 guest로 잡혀있기 때문에

우리는 no에 거짓 값을 넣어주어 이를 상쇄시키고,

or로 no=2를 추가 입력하여 admin에 접근할 수 있도록 하면 된다.

(주석으로 admin의 no이 2인 것을 알 수 있다.)

 

즉, 우리가 완성하고자 하는 sql문은

select id from chall18 where id='guest' and no=11 or no=2가 된다.

위에서 언급했듯이 공백이 필터링 되기 때문에

탭을 url encoding한 값인 %09을 넣어서 $_GET[no]에 들어갈 값을 완성하면 된다.

최종적으로 URL에 입력할 값은 ?no=11%09or%09no=2이 된다.

 

URL에 입력하면 문제가 풀리게 된다!