그리고 화면에도 아무것도 없다. ㅡㅡ
<? echo("<a href=index_lolll.phps>source</a>"); if(!$_GET[id]) $_GET[id]="guest"; echo("<html><head><title>Challenge 61</title></head><body>"); if(eregi("\(|\)|union|select|challenge|from|,|by|\.",$_GET[id])) exit("Access Denied"); if(strlen($_GET[id])>18) exit("Access Denied"); $q=@mysql_fetch_array(mysql_query("select $_GET[id] from c_61 order by id desc limit 1")); echo("<b>$q[id]</b><br>"); if($q[id]=="admin") @clear(); echo("</body></html>"); ?>
$_GET['id']가 guest가 아니면 강제로 guest로 만드는데, 회피해서 admin을 select하게 만들어야 한다.
그리고 길이제한도 17자까지 허용..
근데 위치가 좀 이상하다. where에 있는게 아니라 컬럼을 셀렉트 하고 있다.
당연히 id를 셀렉트해야하는게 아닌가? $_GET[id]값에 id라고 적어넣으니 zombie라고 리턴되었다.
다시 보니 limit1을 하고 있는데 select에서 row를 좀 땡겨서 셀렉트 할 수 있다면 해결되는 문제로 생각되었다.
그래서 찾아봤더니 변수를 선언해서 숫자에 +1 해서 올리는거외엔 답이 없었다 ㅡㅡ
결국 다른 방법을 생각해봐야 했는데, 어차피 id라는 컬럼안에 admin만 들어가 있으면 되는 것 같다.
CHAR은 필터안되고 있으나 글자수제한도 있고, ()를 쓸수가 없다. 그럼 hex값으로 변환을 하고, 컬럼이름을 as id를 붙여주면 어떨까?
0x61646d696e as id
해결..