늘모자란, 개발 :: [webhacking.kr] Challenge 61

늘모자란, 개발

현재 webhacking.kr의 마지막 문제. 62번부터는 없다.
그리고 화면에도 아무것도 없다. ㅡㅡ

<?

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

해결..
2016/04/04 02:05 2016/04/04 02:05