메인화면 입니다.

소스보기 화면입니다.

이번엔 차단되는 문자열을 보여주네요 ~

if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");

이 부분은 즉, '공백', '역슬래시', '괄호', '파이프', '&', 'select', 'from', '0x' 이렇게 차단하는 정규표현식이며 패턴에 걸리면 no hack 메시지가 표시되네요 ~

$result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2

이 부분은 쿼리를 날리는 부분으로 no에 파라미터로 입력한 값이 들어갑니다.

친절하게 admin은 no=2 라고 이야기 해주네요 ~

저는 테스트환경을 구축했습니다.

쿼리를 어떻게 날릴까 고민을 했습니다.

"select id from chall18 where id='guest' and no = 2' or 1=1"

이렇게 인젝션을 할경우 no에 값에 상관없이 참이 되므로 모든 id값을 출력하게 되어있습니다.

이제 admin을 출력하기 위해 추가 쿼리를 작성해야합니다.

저는 limit을 이용하여 2번째 값을 출력하였습니다.

limit 몇번재 레코드부터 몇개를 가져올지를 정합니다.

0부터 시작이므로 2번째로부터 1개의 레코드를 가져오도록 설정했습니다.

그런데 한가지가 걸립니다 ~ 바로 "공백"!

공백을 우회할 수 있는 방법은 여러가지가 있지만 저는 'tab'을 사용하여 공백을 우회했습니다.

그래서 최종 URL을 만들면!

"https://webhacking.kr/challenge/web-32/?no=1%09or%091=1%09limit%091,1"

결과는!

챌린지 18 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level20 (old)  (308) 2020.04.28
[webhacking.kr] Level19 (old)  (317) 2020.04.28
[webhacking.kr] Level17(old)  (308) 2020.04.28
[webhacking.kr] Level16 (old)  (307) 2020.04.28
[webhacking.kr] Level15 (old)  (336) 2020.04.27

+ Recent posts