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

hamayanhamayan's blog

nightmare [LORD OF SQLINJECTION]

Lord of SQLInjection

include "./config.php"; 
login_chk(); 
$db = dbconnect(); 
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~"); 
if(strlen($_GET[pw])>6) exit("No Hack ~_~"); 
$query = "select id from prob_nightmare where pw=('{$_GET[pw]}') and id!='admin'"; 
echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
$result = @mysqli_fetch_array(mysqli_query($db,$query)); 
if($result['id']) solve("nightmare"); 
highlight_file(__FILE__); 

特徴は以下。

  • pwを入力する。以下フィルターがある
    • prob,_,.,(),#,-は使えない
    • 7文字以上は入れられない
  • なんでもいいから出てくるようにする

A=B=Cとヌルバイトアタック

前から評価が進むので、A=Bがfalseであれば、false=Cとなる。
Cが0であればfalseは0として評価される(falseが0に変換される?どっちだろう)ため、
全体はtrueとなる。
末尾はコメントで消す必要があるが、コメントでなくてもヌルバイトでも消せる。

よって、')=0;%00でAC