<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><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>
<?php
if($_GET['no']){
$db = dbconnect();
if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2
if($result['id']=="guest") echo "hi guest";
if($result['id']=="admin"){
solve(18);
echo "hi admin!";
}
}
?>
</a>
<br><br><a href=?view_source=1>view-source</a>
</center>
</body>
</html>
GET방식으로 no의 값을 받고
공백, \, (, ), |, &, select, from, 16진수가 필터링
쿼리문은
select id from chall18 where id='guest' and no=$_GET[no]
admin의 no은 2
id='guest'로 고정되어있어 일단
"id='guest' and no="이 구문을 거짓으로 만들고
새로 삽입한다
no을 0으로주어 거짓으로만들고
or no=2로 admin의 id를 불러 올 수 있게한다
공백은 필터링되어있으므로 대신할수 있는 \t
%09로 해준다
'Wargame, CTF > webhacking.kr' 카테고리의 다른 글
Webhacking.kr 58번 (0) | 2019.12.05 |
---|---|
Webhacking.kr 19번 (0) | 2019.12.04 |
Webhacking.kr 17번 (0) | 2019.12.04 |
Webhacking.kr 16번 (0) | 2019.12.04 |
Webhacking.kr 15번 (0) | 2019.12.04 |