문제에 접속하게 되면 SQL Injection이라는 문구와 함께 하나의 입력창과 소스코드를 볼 수 있다.

여러 값들을 입력해보면 입력값들을 get방식으로 no 변수의 값으로 전달하는 것을 URL을 통해 알 수 있다.

<?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는 다음과 같다.

우리가 입력해야되는 값, 즉 URL에 no값으로 넘겨야하는 값의 형태는 ?no=14 or no=2 의 형태이다. 그러나 공백은 URL인코딩해서 넘기더라도 preg_match() 함수에 걸리기 때문에, 탭(Tab)을 이용해 URL 인코딩으로 %09 값을 통해 ?no=14%09or%09no=2 이렇게 넘기면 포인트를 획득할 수 있다.