<?php include "./config.php"; login_chk(); $db = dbconnect("zombie"); if(preg_match('/rollup|join|ace|@/i', $_GET['pw'])) exit("No Hack ~_~"); $query = "select pw from prob_zombie where pw='{$_GET[pw]}'"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['pw']) echo "<h2>Pw : {$result[pw]}</h2>"; if(($result['pw']) && ($result['pw'] === $_GET['pw'])) solve("zombie"); highlight_file(__FILE__);
特徴は以下。
- pwが入力可能
rollup,join,ace,@
がフィルタリング
- 引っ張ってきたpwと入力したpwが等しいかを判定
さっきと同じっぽいが、aceが使えないせいでreplaceが使えなくなっている。
replaceの代わりとなるものは無いだろうか…
Quine SQL query
replaceの代わりを探したが、無かったので、解説見てしまった。
- Solution: Lord of SQL Injection zombie – niek
' union select substr(info,38,70) from information_schema.processlist%23
なんと。そんなやり方が。
[Lord of SQL Injection] LoS - zombie 문제풀이 | mingzzi
ここで書かれている表を見るのが一番わかりやすいだろう。
information_schema.processlistには現在動いているスレッドについての情報が書かれている。
しかも、呼び出した自身の情報をちゃんと入ってるので、そこから実行SQL文をぶっこ抜いてこようという作戦。