Level 27
<? if($_GET[no]) { if(eregi("#|union|from|challenge|select|\(|\t|/|limit|=|0x",$_GET[no])) exit("no hack"); $q=@mysql_fetch_array(mysql_query("select id from challenge27_table where id='guest' and no=($_GET[no])")) or die("query error"); if($q[id]=="guest") echo("guest"); if($q[id]=="admin") @solve(); } ?>
입력 값에 1을 넣고 제출 하니 "Guest"라는 문자열이 출력 되었다.
no의 값을 admin의 값으로 바꾸면 될 듯 하다.
보통 admin의 값은 0 또는 2인 점을 바탕으로 접근하였다.
1) or no = 2
라고 보내면 no=(1) or no = 2 라고 쿼리가 보내진다.
이때 '='는 필터링 되므로 '=' 대신 'like'를 사용하면 된다.
1) or no like 2
라고 보내면 "query error"라고 뜬다. 이유는 뒤에 ')'가 남아이있기 때문에 뒷 부분을 주석 처리 해 주어야 한다.
정답 : 1) or no like 2 --