그리고 no값을 받아 preg_match 함수로 패턴매칭 수행 후 일치하면 No Hack 메세지 출력 후 종료됩니다. preg_match 값과 일치하지 않으면 $result 수행 후 id값 비교하여, id가 guest일 경우, "hi guest"를 출력하고, id가 admin일 경우 "hi admin"를 출력 후 solve 함수가 호출됩니다.
admin의 no는 2라고 합니다.
admin이 되기 위해서는 $_GET[no]가 2가 되어야 하고, 'guest'는 검색되지 않아야 하기 때문에,
-1 or no = 2로 입력이 되어야합니다.
<?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!";
}
}
?>
우선 1을 입력하면, hi guest가 출력됩니다.
or ""로 입력하였더니, no hack이라고 출력됩니다.
여기에서 eregi() 와 비슷하게 공백이 있으면 필터링 되기 때문에, URL창에 url코드로 no를 입력하도록 하겠습니다.