はまやんはまやんはまやん

hamayanhamayan's blog

zombie_assassin [LORD OF SQLINJECTION]

Lord of SQLInjection

include "./config.php"; 
login_chk(); 
$db = dbconnect();
$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); 
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
$query = "select id from prob_zombie_assassin 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("zombie_assassin"); 
highlight_file(__FILE__); 

特徴は以下。

  • id,pwを入力する。以下フィルターがある
    • addslashesをかけて、strrevもかけられている
  • なんでもいいから出てくるようにする

strrev?

どう見ても怪しい操作をしている。
パズル問題なので、よーく考えて、以下を入れる。

idに\"を入れて、pwに# 1=1 roを入れる。
id部分は\\\"となって逆転するので"\\\となり、最後の\でシングルクオートがエスケープされる。
pw部分は普通に逆転だけでor 1=1 #となるので、攻撃が通る。