목표 : SQLi or → ||
입력할 수 있는 칸과 소스를 제공한다.
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 49</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get>
level : <input name=lv value=1><input type=submit>
</form>
<?php
if($_GET['lv']){
$db = dbconnect();
if(preg_match("/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i",$_GET['lv'])) exit("no hack");
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall49 where lv={$_GET['lv']}"));
echo $result[0] ;
if($result[0]=="admin") solve(49);
}
?>
<hr><a href=./?view_source=1>view-source</a>
</body>
</html>
PHP
복사
lv로 들어오는 인자를 필터링한다.
select or and ( ) limit , / order cash 공백 탭 ‘ “공백
|| 도 or 을 대체하는 방식이다.
‘ 를 필터링하고 있으므로 admin을 hex 변환한다.
lv 값은 입력해보니 4까지는 값이 있지만 그 이상은 거짓으로 결과가 나오지 않는다.
앞을 거짓으로 만들고 뒤 id=’admin’ 을 입력하게 되면 ‘admin’인 결과를 리턴한다.
lv=9||id=0x61646d696e
PHP
복사