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

This commit is contained in:
Translator 2024-11-12 12:21:09 +00:00
parent 6d04f25c11
commit 813f567c1b
2 changed files with 102 additions and 17 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,6 +1,6 @@
# 参数污染
# Parameter Pollution | JSON Injection
## 参数污染
## Parameter Pollution
{% hint style="success" %}
学习与实践 AWS 黑客技术:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
@ -21,11 +21,11 @@
{% embed url="https://websec.nl/" %}
## HTTP 参数污染 (HPP) 概述
## HTTP Parameter Pollution (HPP) 概述
HTTP 参数污染 (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以意想不到的方式改变 Web 应用程序的行为。这种操纵是通过添加、修改或重复 HTTP 参数来实现的。这些操纵的效果对用户并不直接可见,但可以显著改变应用程序在服务器端的功能,并在客户端产生可观察的影响。
HTTP Parameter Pollution (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以意想不到的方式改变 Web 应用程序的行为。这种操纵是通过添加、修改或重复 HTTP 参数来完成的。这些操纵的效果对用户并不直接可见,但可以显著改变应用程序在服务器端的功能,并在客户端产生可观察的影响。
### HTTP 参数污染 (HPP) 示例
### HTTP Parameter Pollution (HPP) 示例
一个银行应用程序的交易 URL
@ -48,15 +48,15 @@ HTTP 参数污染 (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以
* **背景:** 一个需要一次性密码 (OTP) 的登录机制被利用。
* **方法:** 通过使用 Burp Suite 等工具拦截 OTP 请求,攻击者在 HTTP 请求中重复了 `email` 参数。
* **结果:** 本应发送到初始电子邮件的 OTP,反而发送到了操纵请求中指定的第二个电子邮件地址。这个缺陷允许通过绕过预期的安全措施获得未授权访问。
* **结果:** 本应发送到初始电子邮件的 OTP 被发送到操纵请求中指定的第二个电子邮件地址。这个缺陷允许通过绕过预期的安全措施获得未授权访问。
这个场景突显了应用程序后端的一个关键疏漏,该后端处理第一个 `email` 参数以生成 OTP,但使用最后一个进行发送。
这个场景突显了应用程序后端的一个关键疏漏,它处理了第一个 `email` 参数用于 OTP 生成,但使用最后一个进行发送。
**API 密钥操纵案例:**
* **场景:** 一个应用程序允许用户通过个人资料设置页面更新 API 密钥。
* **场景:** 一个应用程序允许用户通过个人资料设置页面更新他们的 API 密钥。
* **攻击向量:** 攻击者发现通过向 POST 请求附加一个额外的 `api_key` 参数,可以操纵 API 密钥更新功能的结果。
* **技术:** 利用像 Burp Suite 这样的工具,攻击者构造一个包含两个 `api_key` 参数的请求:一个合法的和一个恶意的。服务器只处理最后一个出现的参数,将 API 密钥更新为攻击者提供的值。
* **技术:** 利用像 Burp Suite 这样的工具,攻击者构造一个请求,其中包含两个 `api_key` 参数:一个合法的和一个恶意的。服务器只处理最后一个出现的参数,将 API 密钥更新为攻击者提供的值。
* **结果:** 攻击者控制了受害者的 API 功能,可能未经授权访问或修改私有数据。
这个例子进一步强调了安全参数处理的必要性,特别是在像 API 密钥管理这样关键的功能中。
@ -65,8 +65,8 @@ HTTP 参数污染 (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以
Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻击的易受性:
* **Flask** 采用遇到的第一个参数值,例如在查询字符串 `a=1&a=2` 中优先考虑初始实例而非后续重复。
* **PHP在 Apache HTTP 服务器上)** 相反,优先考虑最后一个参数值,在给定示例中选择 `a=2`。这种行为可能无意中通过优先考虑攻击者操纵的参数而促进 HPP 利用。
* **Flask:** 采用遇到的第一个参数值,例如在查询字符串 `a=1&a=2` 中优先考虑初始实例而非后续重复。
* **PHP在 Apache HTTP 服务器上):** 相反,优先考虑最后一个参数值,在给定示例中选择 `a=2`。这种行为可能无意中通过优先考虑攻击者操纵的参数而促进 HPP 利用。
## 按技术的参数污染
@ -78,7 +78,7 @@ Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻
1. 忽略参数名称中的 %00 之后的内容。
2. 将 name\[] 视为数组。
3. \_GET 不意味着 GET 方法。
3. \_GET 不代表 GET 方法。
4. 优先考虑最后一个参数。
### Ruby 3.3.5 和 WEBrick 1.8.2
@ -134,27 +134,112 @@ Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻
1. 不识别 name\[]。
2. 优先考虑最后一个参数。
## JSON Injection
### 重复键
```ini
obj = {"test": "user", "test": "admin"}
```
前端可能会相信第一个出现,而后端使用的是键的第二个出现。
### 键冲突:字符截断和注释
某些字符在前端可能无法被正确解析,但后端会解析它们并使用这些键,这可能有助于**绕过某些限制**
```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"}
```
### **不一致的优先级:反序列化与序列化**
```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
```
可能会导致不一致
## 参考文献
* [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 培训 AWS 红队专家 (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 培训 GCP 红队专家 (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
学习与实践 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">\
学习与实践 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>
* 查看 [**订阅计划**](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 分享黑客技巧。
* **加入** 💬 [**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 来分享黑客技巧。
</details>
{% endhint %}