<?php
include "./welcome.php";
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)|admin/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cthulhu 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("cthulhu");
highlight_file(__FILE__);
?>
공격 백터
id
pw
공격 백터의 검증
id : prob, _, ., (), admin
pw : prob, _, ., (), admin
코드 설명
$query = "select id from prob_cthulhu 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("cthulhu");
이번 문제는 아주 간단하다. 필터링을 제외한 문자열을 입력하여, 쿼리문의 결과가 있으면 문제 클리어된다.
문제 풀이
문제는 엄청 간단하지만, OWASP에서 제작한 웹 애플리케이션 방화벽 룰셋이 적용되어 있어서 이를 우회를 해야한다.
일단 주석처리가 되는지 확인하였는데 문제 없이 작동하였다.
이와 같이 쿼리문에 간단한 SQLi를 넣어지만, 1=1이 룰셋에 설정되어 있는 것으로 보인다.