본문 바로가기

워게임

Lord of SQL Injection - 14번 문제풀이

[14번 문제 - giant]

1
2
3
4
5
6
7
8
9
10
11
12
<?php 
  include "./config.php"
  login_chk(); 
  $db = dbconnect(); 
  if(strlen($_GET[shit])>1exit("No Hack ~_~"); 
  if(preg_match('/ |\n|\r|\t/i'$_GET[shit])) exit("HeHe"); 
  $query = "select 1234 from{$_GET[shit]}prob_giant where 1"
  echo "<hr>query : <strong>{$query}</strong><hr><br>"
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result[1234]) solve("giant"); 
  highlight_file(__FILE__); 
?>
cs

해당 문제는 7번 쿼리문을 보면 from 과 prob_giant 사이에 shit 파라미터 값을 받는 것으로 되어있다.

문제를 잘 살펴보면 1234라는 결과만 보여주면 풀린다고 하니 7번 쿼리문에서 shit 파라미터를 공백 문자로 만들어서 쿼리문을 완성시켜주면 된다라는걸 유추할 수 있을 것이다.

 

대신 shit 파라미터의 길이가 1을 넘지 말아야하고 \n, \r, \t 문자들을 필터링 하고 있다.

이럴 경우에 사용하는 공백문자 우회 방법이 있는데 내 블로그에도 따로 정리해놓은 글이 있다.

"SQL Injection 공백 문자 필터링 우회" 제목으로 게시글이 올라와 있으니 참고하도록 하자.

 

우회방법만 아는 문제라 추가로 설명할 필요는 없으니 바로 답을 적겠다.

 

[문제 풀이 구문]

https://los.rubiya.kr/chall/giant_18a08c3be1d1753de0cb157703f75a5e.php?shit=%0c