query : {$query}
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\\'|\\"|\\`/i', $_GET[no])) exit("No Quotes ~_~");
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
highlight_file(__FILE__);
?>
우선 여기서 id값은 guest로 고정되어 있습니다.
우리가 줄 수 있는 값은 no parameter 값 뿐입니다.
우선 no 값을 1로 줘보겠습니다.
guest의 no 값은 1로 정해져있습니다.
다른 값(2, 3 …) 을 넣어봤을 땐 Hello guest가 뜨지 않습니다.
즉 id='guest' and no={$_GET[no]}
해당 and문을 false로 무력화를 시킬 수 있습니다.
그럼, no 값으로 2 or id='admin'
과 같이 주면 될것같은데, 문제에서 따옴표를 필터링합니다.
따옴표 대신 hex값으로 0x61646d696e ****를 사용할 수 있습니다.