Translated ['pentesting-web/parameter-pollution.md'] to jp

This commit is contained in:
Translator 2024-11-12 12:28:13 +00:00
parent bb9bb99c5f
commit ee9e297f3b
2 changed files with 123 additions and 38 deletions

View file

@ -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)

View file

@ -1,4 +1,4 @@
# パラメータ汚染
# パラメータ汚染 | JSONインジェクション
## パラメータ汚染
@ -12,7 +12,7 @@ GCPハッキングを学び、実践する: <img src="../.gitbook/assets/grte.pn
* [**サブスクリプションプラン**](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を提出してハッキングトリックを共有してください。**
* **ハッキングのトリックを共有するには、[**HackTricks**](https://github.com/carlospolop/hacktricks)および[**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud)のGitHubリポジトリにPRを送信してください。**
</details>
{% endhint %}
@ -23,7 +23,7 @@ GCPハッキングを学び、実践する: <img src="../.gitbook/assets/grte.pn
## HTTPパラメータ汚染 (HPP) 概要
HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作して、Webアプリケーションの動作を意図しない方法で変更する技術です。この操作は、HTTPパラメータを追加、変更、または複製することによって行われます。これらの操作の影響はユーザーには直接見えませんが、サーバー側でアプリケーションの機能を大きく変更し、クライアント側に観察可能な影響を与えることがあります。
HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作して、ウェブアプリケーションの動作を意図しない方法で変更する技術です。この操作は、HTTPパラメータを追加、変更、または複製することによって行われます。これらの操作の影響はユーザーには直接見えませんが、サーバー側でアプリケーションの機能を大きく変更し、クライアント側に観察可能な影響を与えることがあります。
### HTTPパラメータ汚染 (HPP) の例
@ -35,11 +35,11 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
* **操作されたURL:** `https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC`
取引`accountA`ではなく`accountC`に誤って請求される可能性があり、HPPが取引やパスワードリセット、2FA設定、APIキーリクエストなどの他の機能を操作する可能性を示しています。
取引`accountA`ではなく`accountC`に誤って請求される可能性があり、HPPが取引やパスワードリセット、2FA設定、APIキーリクエストなどの他の機能を操作する可能性を示しています。
#### **技術特有のパラメータ解析**
* パラメータが解析され、優先される方法は、基盤となるWeb技術によって異なり、HPPがどのように悪用されるかに影響を与えます。
* パラメータが解析され、優先される方法は、基盤となるウェブ技術によって異なり、HPPがどのように悪用されるかに影響を与えます。
* [Wappalyzer](https://addons.mozilla.org/en-US/firefox/addon/wappalyzer/)のようなツールは、これらの技術とその解析動作を特定するのに役立ちます。
### PHPとHPPの悪用
@ -55,17 +55,17 @@ HTTPパラメータ汚染 (HPP) は、攻撃者がHTTPパラメータを操作
**APIキー操作のケース:**
* **シナリオ:** アプリケーションは、ユーザーがプロフィール設定ページを通じてAPIキーを更新できるようにしています。
* **攻撃ベクター:** 攻撃者は、POSTリクエストに追加の`api_key`パラメータを追加することで、APIキー更新機能の結果を操作できることを発見しました。
* **技術:** Burp Suiteのようなツールを利用して、攻撃者は2つの`api_key`パラメータを含むリクエストを作成します: 1つは正当なもので、もう1つは悪意のあるものです。サーバーは最後の出現のみを処理し、攻撃者が提供した値にAPIキーを更新します。
* **攻撃ベクトル:** 攻撃者は、POSTリクエストに追加の`api_key`パラメータを追加することで、APIキー更新機能の結果を操作できることを発見しました。
* **技術:** Burp Suiteのようなツールを利用して、攻撃者は1つの正当な`api_key`パラメータと1つの悪意のある`api_key`パラメータを含むリクエストを作成します。サーバーは最後の出現のみを処理し、攻撃者が提供した値にAPIキーを更新します。
* **結果:** 攻撃者は被害者のAPI機能を制御し、プライベートデータに不正にアクセスまたは変更する可能性があります。
この例は、特にAPIキー管理のような重要な機能における安全なパラメータ処理の必要性をさらに強調しています。
### パラメータ解析: Flask vs. PHP
Web技術が重複したHTTPパラメータを処理する方法は異なり、HPP攻撃に対する脆弱性に影響を与えます:
ウェブ技術が重複したHTTPパラメータを処理する方法は異なり、HPP攻撃に対する脆弱性に影響を与えます:
* **Flask:** クエリ文字列`a=1&a=2`のように、最初に遭遇したパラメータ値を採用し、初のインスタンスを後続の重複よりも優先します。
* **Flask:** クエリ文字列`a=1&a=2`のように、最初に遭遇したパラメータ値を採用し、初のインスタンスを後続の重複よりも優先します。
* **PHP (Apache HTTPサーバー上):** 逆に、最後のパラメータ値を優先し、与えられた例では`a=2`を選択します。この動作は、攻撃者が操作したパラメータを元のものよりも優先することによって、HPPの悪用を無意識に助長する可能性があります。
## 技術によるパラメータ汚染
@ -76,85 +76,170 @@ Web技術が重複したHTTPパラメータを処理する方法は異なり、H
<figure><img src="../.gitbook/assets/image (1255).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg</a></p></figcaption></figure>
1. パラメータ名の後の%00を無視します
2. name\[]を配列として処理します。
3. \_GETはGETメソッドを意味しません
4. 最後のパラメータを優先します。
1. パラメータ名の後の%00は無視される
2. name\[]を配列として処理す
3. \_GETはGETメソッドを意味しない
4. 最後のパラメータを優先す
### Ruby 3.3.5 および WEBrick 1.8.2
<figure><img src="../.gitbook/assets/image (1257).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg</a></p></figcaption></figure>
1. &および;区切り文字を使用してパラメータを分割します。
2. name\[]は認識されません
3. 最初のパラメータを優先します。
1. &および;区切り文字を使用してパラメータを分割す
2. name\[]は認識されない
3. 最初のパラメータを優先す
### Spring MVC 6.0.23 および Apache Tomcat 10.1.30 <a href="#dd68" id="dd68"></a>
<figure><img src="../.gitbook/assets/image (1258).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg</a></p></figcaption></figure>
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 <a href="#id-6d72" id="id-6d72"></a>
<figure><img src="../.gitbook/assets/image (1259).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg</a></p></figcaption></figure>
1. name\[]を認識します。
2. パラメータを連結します(例: first,last
1. name\[]を認識す
2. パラメータを連結す(例: first,last
### GO 1.22.7 <a href="#id-63dc" id="id-63dc"></a>
<figure><img src="../.gitbook/assets/image (1260).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg</a></p></figcaption></figure>
1. name\[]は認識されません
2. 最初のパラメータを優先します。
1. name\[]は認識されない
2. 最初のパラメータを優先す
### Python 3.12.6 および Werkzeug 3.0.4 および Flask 3.0.3 <a href="#b853" id="b853"></a>
<figure><img src="../.gitbook/assets/image (1261).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg</a></p></figcaption></figure>
1. name\[]は認識されません
2. 最初のパラメータを優先します。
1. name\[]は認識されない
2. 最初のパラメータを優先す
### Python 3.12.6 および Django 4.2.15 <a href="#id-8079" id="id-8079"></a>
<figure><img src="../.gitbook/assets/image (1262).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg</a></p></figcaption></figure>
1. name\[]は認識されません
2. 最後のパラメータを優先します。
1. name\[]は認識されない
2. 最後のパラメータを優先す
### Python 3.12.6 および Tornado 6.4.1 <a href="#id-2ad8" id="id-2ad8"></a>
<figure><img src="../.gitbook/assets/image (1263).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg</a></p></figcaption></figure>
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)
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
{% embed url="https://websec.nl/" %}
{% hint style="success" %}
AWSハッキングを学び、実践する:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
GCPハッキングを学び、実践する: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
Learn & practice AWS Hacking:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricksをサポートする</summary>
<summary>Support HackTricks</summary>
* [**サブスクリプションプラン**](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.
</details>
{% endhint %}