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

hamayanhamayan's blog

troll [LORD OF SQLINJECTION]

Lord of SQLInjection

include "./config.php"; 
login_chk(); 
$db = dbconnect(); 
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
$query = "select id from prob_troll where id='{$_GET[id]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("troll");
highlight_file(__FILE__);

特徴は以下。

  • idにadminを入れたいが、'adminがあるとエラー

よくよく見ると、adminは小文字しか見てない。
ADMINを入れると、AC

なぜ?

なんか前スペースを入れまくって攻撃するやつを見たことあるような…
と思って、調べると、以下が出てきた。
イコール(=)vs ライク(LIKE) の巻 - 41から始めました
とても参考になる。

なるほど。イコールによる文字列比較では

  • スペースは無視
  • 大文字小文字も区別しない

これは実装依存ではなく、仕様依存。