webhacking.kr 59번 풀이

 

문제 접속 : http://webhacking.kr/challenge/web/web-36/index.php


문제 페이지 접속 시 화면

 

소스를 확인해보면 JOIN을 통하여 id, phone 정보를 입력하여 권한을 삽입하고, LOGIN시 입력한 id, phone 정보로 admin 권한(lv)을 획득해야 한다.

 

http://webhacking.kr/challenge/web/web-36/index_readmmme.phps

<?

 

if($_POST[lid] && $_POST[lphone])

{

$q=@mysql_fetch_array(mysql_query("select id,lv from c59 where id='$_POST[lid]' and phone='$_POST[lphone]'"));

 

if($q[id])

{

 

echo("id : $q[id]<br>lv : $q[lv]<br><br>");

 

if($q[lv]=="admin")

{

@mysql_query("delete from c59");

@clear();

}

 

echo("<br><a href=index.php>back</a>");

exit();

}

 

}

 

 

if($_POST[id] && $_POST[phone])

{

if(strlen($_POST[phone])>=20) exit("Access Denied");

if(eregi("admin",$_POST[id])) exit("Access Denied");

if(eregi("admin|0x|#|hex|char|ascii|ord|from|select|union",$_POST[phone])) exit("Access Denied");

 

@mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");

}

 

?>

<html><head><title>Challenge 59</title></head><body>

<form method=post action=index.php>

<table border=1>

<tr><td>JOIN</td><td><input name=id></td><td><input name=phone></td><td><input type=submit></td></tr>

<tr><td>LOGIN</td><td><input name=lid></td><td><input name=lphone></td><td><input type=submit></td></tr>

</form>

</body></html>

 

아래 구문을 조작하여 admin 권한을 입력해야 되는 문제로 SQL Injection이 필요하다.

mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");

 

SQL Injection 적용을 확인한다.

 

JOIN LOGIN 결과 정상적으로 SQL이 입력되었음을 알 수 있다.

 

아래 구문의 사용이 필터링 되어 lv admin을 삽입할 수 없으나 SQL reverse function을 사용하여 이를 우회할 수 있다.

admin|0x|#|hex|char|ascii|ord|from|select|union

 

reverse function은 입력값을 역순으로 출력한다.

reverse(dcba) 입력시 abcd 출력

 

 

결국 다음의 값을 JOIN으로 입력한다.

nimda / 1,reverse(id))--입력

 

nimda로 로그인

 

Level clear



 



















 

+ Recent posts