본문 바로가기

워게임

Lord of SQL Injection - 20번 문제풀이

[20번 문제 - dragon]

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
  include "./config.php"
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_dragon where id='guest'# and pw='{$_GET[pw]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>"
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"
  if($result['id'== 'admin') solve("dragon");
  highlight_file(__FILE__); 
?>
cs

해당 문제에서 ID 파라미터 뒤에 있는 #으로 뒷 부분이 주석처리가 된다는 것이다.

# 뒤에 오는 값들은 모두 주석처리가 되는데 한 줄만 주석처리가 되는것을 이용하면 문제를 풀 수 있다.

 

즉, 입력값 처음에 개행을 주고 ID가 'admin'인 계정으로 참인 조건문을 만들기만 하면 된다.

간단하게 적으면 id='guest'# and pw='입력값' 에서 입력값에 개행을 주게 되면

id='guest' # and pw='개행

입력값'

 

id='guest' 구문만 남아있게 되고 입력값 부분에 참인 조건을 적어주면 된다.

URL에서 개행은 %0a%0d 로 되고, 나머지 입력값에 and pw='' or id='admin 해당 구문을 넣어서 or 앞의 구문을 거짓으로 만들고 or 뒤의 구문을 ID가 'admin' 인 참인 조건을 넣어서 결과적으로 참인 조건이 성립되면서 문제가 풀리게 된다.

 

[문제 풀이 구문]

https://los.rubiya.kr/chall/dragon_51996aa769df79afbf79eb4d66dbcef6.php?pw=%0a%0d%20and%20pw=%27%27%20or%20id=%27admin