반응형
싱글쿼터 더블쿼터 등등이 막혀있다. 따라서 문자열을 주입하는 것은 힘들어보인다.
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]}";
if($result['id'] == 'admin') solve("goblin");
중요한것은 get으로 받는 곳이 no이고 id가 guest로 잡혀 있지만 solve 조건이 id가 admin이어야 한다는 것.
따라서 no=123 || id=0x61646d696e 로 주게 되면
앞에 구문이 거짓이 되고 16진수로 바꾼 admin이 id에 들어가게 된다.
주의 id='guest' and no'' 이부분이 참이 되면 id에 guest가 들어가게 되어 해결하지 못함