생각보다 쉽다. 뭐지..

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 부분만 우회해 주면 되는데, 아래와 같이 우회하였다.