Hello there, ('ω')ノ
🧠 概要
このラボでは、MongoDBを使用した製品カテゴリフィルターにNoSQLインジェクションの脆弱性が存在します。攻撃者はこの脆弱性を利用して、通常は表示されない未公開の製品情報を取得できます。この演習を通じて、NoSQLインジェクションの基本的な検出方法と、脆弱性の悪用手法を学びます。
🛠️ 手順
カテゴリフィルターの確認
Burp Suiteのブラウザでラボにアクセスし、任意の製品カテゴリ(例:
Gifts
)を選択します。この操作により、以下のようなリクエストが送信されます:
GET /filter?category=Gifts
リクエストのインターセプトと送信
Burp Suiteの「Proxy」タブで、上記のリクエストを確認し、右クリックして「Send to Repeater」を選択します。
シンタックスエラーの誘発
Repeaterで、
category
パラメータの値にシングルクォート('
)を追加して送信します:
GET /filter?category=Gifts'
レスポンスにJavaScriptのシンタックスエラーが表示されれば、ユーザー入力が適切にサニタイズされていない可能性があります。
有効なJavaScriptペイロードの送信
次に、
category
パラメータに以下のような有効なJavaScriptペイロードを送信します:
Gifts'+'
このペイロードをURLエンコード(Ctrl+U
)して送信し、レスポンスにエラーが表示されないことを確認します。これは、サーバー側でインジェクションが発生している可能性を示します。
ブール条件の挿入による挙動の確認
偽の条件を挿入:
category
パラメータに以下のペイロードを送信します:Gifts' && 0 && 'x
URLエンコードして送信し、製品が表示されないことを確認します。
真の条件を挿入:
次に、以下のペイロードを送信します:
Gifts' && 1 && 'x
URLエンコードして送信し、製品が表示されることを確認します。
常に真となる条件の挿入
category
パラメータに以下のペイロードを送信します:
Gifts'||1||'
URLエンコードして送信し、レスポンスに未公開の製品が含まれていることを確認します。
🔍 ポイントとコツ
シンタックスエラーの観察: シングルクォートや特殊文字を挿入して、エラーメッセージの有無を確認します。
ブール条件の操作:
&&
や||
を使用して、クエリの論理条件を操作し、レスポンスの変化を観察します。常に真となる条件の利用:
'||1==1||'
のような条件を挿入して、すべてのデータが表示されるかを確認します。URLエンコードの重要性: 特殊文字を含むペイロードは、必ずURLエンコードして送信します。
🧩 まとめ
このラボを通じて、NoSQLインジェクションの基本的な検出方法と、MongoDBにおける脆弱性の悪用手法を学びました。実際のアプリケーションでも、ユーザー入力のサニタイズやクエリの構築方法に注意を払い、同様の脆弱性を防ぐことが重要です。
Best regards, (^^ゞ