생각보다 쉽다. 뭐지..
cthulhu 부터는, WAF가 적용되어 소스코드는 의미가 없게 되었다.
<?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_death where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("death");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?>
filtering을 확인하는 방법은, 조금씩 구문을 늘려가면서 확인하는 방법이 제일 좋은 것 같다.
소스코드를 보는 방법도 있지만 너무 복잡하다..
우선 저번 문제를 푸는데 사용했던 \\
우회 방법이 효과가 있었다.
pw 부분만 우회해 주면 되는데, 아래와 같이 우회하였다.