본문 바로가기
war game/웹 워게임(Webhacking.kr)

webhacking.kr 61번 문제(select)

by 강깅꽁 2017. 9. 12.
반응형

<?

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>");

?>


코드를 한줄 씩 해석해보면


(,),union,select 등등이 필터링 되어 있으며 파라미터로 18글자가 넘어서는 안된다.


order by는 정렬이며 limit 는 리턴 밸류를 제한하는 명령어다.



어쨋든 from이 막혀있기 때문에 새로 구문을 작성할 수도 없다.

즉 select 부분에서 무언가를 해주어야한다.

(,)가 막혀있으니 함수를 쓸수도 없다.


as를 이용하여 풀이를 할 수 있다.


'admin' as id를 하게 되면 id column에 admin이라는 데이터 값이 들어가게 된다.

as를 안쓰고 'admin' id로 해도 된다.


하지만 '가 먹히지 않는다.

즉 이 admin을 16진수로 우회하여 주입하면 된다.


?id=0x61646d696e%20id