diff --git a/SUMMARY.md b/SUMMARY.md index 60279767a..0103b2fa9 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -604,7 +604,7 @@ * [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md) * [Open Redirect](pentesting-web/open-redirect.md) * [ORM Injection](pentesting-web/orm-injection.md) -* [Parameter Pollution](pentesting-web/parameter-pollution.md) +* [Parameter Pollution | JSON Injection](pentesting-web/parameter-pollution.md) * [Phone Number Injections](pentesting-web/phone-number-injections.md) * [PostMessage Vulnerabilities](pentesting-web/postmessage-vulnerabilities/README.md) * [Blocking main page to steal postmessage](pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md) diff --git a/pentesting-web/parameter-pollution.md b/pentesting-web/parameter-pollution.md index 9ac9869df..04290c12a 100644 --- a/pentesting-web/parameter-pollution.md +++ b/pentesting-web/parameter-pollution.md @@ -1,4 +1,4 @@ -# パラメータ汚染 +# パラメータ汚染 | JSONインジェクション ## パラメータ汚染 @@ -12,7 +12,7 @@ GCPハッキングを学び、実践する:

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg

-1. パラメータ名の後の%00を無視します。 -2. name\[]を配列として処理します。 -3. \_GETはGETメソッドを意味しません。 -4. 最後のパラメータを優先します。 +1. パラメータ名の後の%00は無視される。 +2. name\[]を配列として処理する。 +3. \_GETはGETメソッドを意味しない。 +4. 最後のパラメータを優先する。 ### Ruby 3.3.5 および WEBrick 1.8.2

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg

-1. &および;区切り文字を使用してパラメータを分割します。 -2. name\[]は認識されません。 -3. 最初のパラメータを優先します。 +1. &および;区切り文字を使用してパラメータを分割する。 +2. name\[]は認識されない。 +3. 最初のパラメータを優先する。 ### Spring MVC 6.0.23 および Apache Tomcat 10.1.30

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg

1. POST RequestMapping == PostMapping & GET RequestMapping == GetMapping。 -2. POST RequestMapping & PostMappingはname\[]を認識します。 -3. nameとname\[]が存在する場合はnameを優先します。 -4. パラメータを連結します(例: first,last)。 -5. POST RequestMapping & PostMappingはContent-Typeを持つクエリパラメータを認識します。 +2. POST RequestMapping & PostMappingはname\[]を認識する。 +3. nameとname\[]が存在する場合はnameを優先する。 +4. パラメータを連結する(例: first,last)。 +5. POST RequestMapping & PostMappingはContent-Typeを持つクエリパラメータを認識する。 ### **NodeJS** 20.17.0 **および** Express 4.21.0

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg

-1. name\[]を認識します。 -2. パラメータを連結します(例: first,last)。 +1. name\[]を認識する。 +2. パラメータを連結する(例: first,last)。 ### GO 1.22.7

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg

-1. name\[]は認識されません。 -2. 最初のパラメータを優先します。 +1. name\[]は認識されない。 +2. 最初のパラメータを優先する。 ### Python 3.12.6 および Werkzeug 3.0.4 および Flask 3.0.3

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg

-1. name\[]は認識されません。 -2. 最初のパラメータを優先します。 +1. name\[]は認識されない。 +2. 最初のパラメータを優先する。 ### Python 3.12.6 および Django 4.2.15

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg

-1. name\[]は認識されません。 -2. 最後のパラメータを優先します。 +1. name\[]は認識されない。 +2. 最後のパラメータを優先する。 ### Python 3.12.6 および Tornado 6.4.1

https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg

-1. name\[]は認識されません。 -2. 最後のパラメータを優先します。 +1. name\[]は認識されない。 +2. 最後のパラメータを優先する。 -## 参考文献 +## JSONインジェクション + +### 重複キー +```ini +obj = {"test": "user", "test": "admin"} +``` +フロントエンドは最初の出現を信じるかもしれませんが、バックエンドはキーの2番目の出現を使用します。 + +### キー衝突: 文字の切り捨てとコメント + +特定の文字はフロントエンドによって正しく解釈されないかもしれませんが、バックエンドはそれらを解釈し、これらのキーを使用します。これは**特定の制限を回避する**のに役立つかもしれません: +```json +{"test": 1, "test\[raw \x0d byte]": 2} +{"test": 1, "test\ud800": 2} +{"test": 1, "test"": 2} +{"test": 1, "te\st": 2} +``` +注意すべきは、これらのケースではフロントエンドが `test == 1` と考え、バックエンドが `test == 2` と考える可能性があることです。 + +これは、次のような値の制限を回避するためにも使用できます: +```json +{"role": "administrator\[raw \x0d byte]"} +{"role":"administrator\ud800"} +{"role": "administrator""} +{"role": "admini\strator"} +``` +### **コメントの切り捨てを使用する** + +{% code overflow="wrap" %} +```ini +obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */} +``` +{% endcode %} + +ここでは、各パーサーのシリアライザーを使用して、それぞれの出力を表示します。 + +シリアライザー 1 (例: GoLangのGoJayライブラリ) は次のように出力します: + +* `description = "Duplicate with comments"` +* `test = 2` +* `extra = ""` + +シリアライザー 2 (例: JavaのJSON-iteratorライブラリ) は次のように出力します: + +* `description = "Duplicate with comments"` +* `extra = "/*"` +* `extra2 = "*/"` +* `test = 1` + +あるいは、コメントの簡単な使用も効果的です: +```ini +obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/} +``` +JavaのGSONライブラリ: +```json +{"description":"Comment support","test":1,"extra":"a"} +``` +Rubyのsimdjsonライブラリ: +```json +{"description":"Comment support","test":2,"extra":"a","extra2":"b"} +``` +### **不一致な優先順位: デシリアライズ vs. シリアライズ** +```ini +obj = {"test": 1, "test": 2} + +obj["test"] // 1 +obj.toString() // {"test": 2} +``` +### Float and Integer + +数 +```undefined +999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 +``` +複数の表現にデコードできます。これには次のものが含まれます: +```undefined +999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 +9.999999999999999e95 +1E+96 +0 +9223372036854775807 +``` +Which might create inconsistences + +## References * [https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654](https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654) * [https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution](https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution) * [https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89](https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89) +* [https://bishopfox.com/blog/json-interoperability-vulnerabilities](https://bishopfox.com/blog/json-interoperability-vulnerabilities)
{% embed url="https://websec.nl/" %} {% hint style="success" %} -AWSハッキングを学び、実践する:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -GCPハッキングを学び、実践する: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-HackTricksをサポートする +Support HackTricks -* [**サブスクリプションプラン**](https://github.com/sponsors/carlospolop)を確認してください! -* **💬 [**Discordグループ**](https://discord.gg/hRep4RUj7f)または[**Telegramグループ**](https://t.me/peass)に参加するか、**Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**をフォローしてください。** -* **[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを提出してハッキングトリックを共有してください。** +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}