Level 61
<? 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>"); ?>
소스코드만 덩그러니 던져준다.
이는 as를 이용하면 될 것같다.
as는 테이블 컴럼의 이름을 임시로 변경할 수 있다.
이를 이용하여 ?id='admin' as id
를 입력하였더니 생각하던 대로 되지 않았다.
이유는 쿼리문을 보면 $_GET[id] 주위로 ' '가 있지 않다. 즉, 문자열로 들어가는 것이 아니라 정수값으로 들어가게 된다.
따라서 'admin'이라는 값을 정수값으로 넣어주어야 한다.
>>> string='admin' >>> for x in string: ... hex(ord(x)) ... '0x61' '0x64' '0x6d' '0x69' '0x6e'
id=0x61646d696e as id