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から始めました
とても参考になる。
なるほど。イコールによる文字列比較では
- スペースは無視
- 大文字小文字も区別しない
これは実装依存ではなく、仕様依存。