소스를 보면
<?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!";
}
}
?>
"select id from chall18 where id='guest' and no=$_GET[no]"
중요한건 이 쿼리문인것 같다.
일단 이미 id가 guest이기 때문에 no를 2로 바꾸어야 할것같다.
쿼리에 그냥 2를 보내면 아무일도 일어나지 않는다.
그럼 True and False or True로 쿼리를 만들면 앞의 id='guest'는 False가 되고 뒤의 쿼리가 True가 되서 풀리지 않을까?
앞의 no=를 False로 만드려면 1,2등 있는 값이 아닌 없는 값을 넣어주고 or no=2를 써서 뒤의 no를 2로 만들어봤다
no hack이란다.
아마 공백이 필터링에 걸리는것 같은데 필터링을 공백을 인코딩한 %09를 그대로 url에 박는식으로 해보았다.
풀린당
'Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr - 21 (0) | 2021.05.28 |
---|---|
Webhacking.kr - 19 (0) | 2021.05.28 |
Webhacking.kr - 16 (0) | 2021.05.28 |
Webhacking.kr - 15 (0) | 2021.05.28 |
Webhacking.kr - 12 (0) | 2021.05.27 |