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
'Wargames > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] 56번 문제 풀이 (0) | 2018.01.14 |
---|---|
[webhacking.kr] 23번 문제 풀이 (0) | 2018.01.13 |
[webhacking.kr] 1번 문제 풀이 (0) | 2017.05.04 |
[webhacking.kr] 15번 문제 풀이 (0) | 2017.05.04 |
[webhacking.kr] 25번 문제 풀이 (0) | 2017.04.01 |