728x90
📎 https://webhacking.kr/chall.php
문제를 클릭하면 이런 창이 뜬다. SQL Injection 문제인 것 같다.
view-source를 클릭해보겠다.
<?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!";
}
}
?>
소스코드 시작부분을 보면 GET방식으로 no 파라미터 값을 전달받아 db에 연결한다.
preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])
preg_match (정규표현식, 검색대상)를 통해 공백, /, 괄호, |, &, select, from, 0x 등을 필터링 하는 것을 확인할 수 있다.
$result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2
SQL 쿼리문을 확인하면, id가 guest로 고정되어 있기 때문에 no에 거짓 값을 넣어주어 이를 상쇄시키고 or로 no=2를 추가 입력하여 admin에 접근할 수 있도록 하면 된다. (주석으로 admin의 no가 2인 것을 알 수 있다.)
공백이 필터링 되기 때문에 탭을 url encoding한 값인 %09을 넣어서 $_GET[no]에 들어갈 값을 완성하면 된다.
따라서 최종적으로 URL에 입력할 값은 ?no=11%09or%09no=2 이 된다.
728x90
'공부 > 웹해킹 (Web hacking)' 카테고리의 다른 글
[Webhacking.kr | 웹해킹] old-20 (0) | 2024.04.30 |
---|---|
[Webhacking.kr | 웹해킹] old-19 (0) | 2024.04.04 |
[Webhacking.kr | 웹해킹] old-17 (0) | 2024.03.20 |
[Webhacking.kr | 웹해킹] old-16 (0) | 2024.03.18 |
[Webhacking.kr | 웹해킹] old-14 (0) | 2024.03.15 |