mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['pentesting-web/parameter-pollution.md'] to cn
This commit is contained in:
parent
6d04f25c11
commit
813f567c1b
2 changed files with 102 additions and 17 deletions
|
@ -604,7 +604,7 @@
|
||||||
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
* [OAuth to Account takeover](pentesting-web/oauth-to-account-takeover.md)
|
||||||
* [Open Redirect](pentesting-web/open-redirect.md)
|
* [Open Redirect](pentesting-web/open-redirect.md)
|
||||||
* [ORM Injection](pentesting-web/orm-injection.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)
|
* [Phone Number Injections](pentesting-web/phone-number-injections.md)
|
||||||
* [PostMessage Vulnerabilities](pentesting-web/postmessage-vulnerabilities/README.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)
|
* [Blocking main page to steal postmessage](pentesting-web/postmessage-vulnerabilities/blocking-main-page-to-steal-postmessage.md)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# 参数污染
|
# Parameter Pollution | JSON Injection
|
||||||
|
|
||||||
## 参数污染
|
## Parameter Pollution
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
学习与实践 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/" %}
|
{% 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:
|
一个银行应用程序的交易 URL:
|
||||||
|
|
||||||
|
@ -48,15 +48,15 @@ HTTP 参数污染 (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以
|
||||||
|
|
||||||
* **背景:** 一个需要一次性密码 (OTP) 的登录机制被利用。
|
* **背景:** 一个需要一次性密码 (OTP) 的登录机制被利用。
|
||||||
* **方法:** 通过使用 Burp Suite 等工具拦截 OTP 请求,攻击者在 HTTP 请求中重复了 `email` 参数。
|
* **方法:** 通过使用 Burp Suite 等工具拦截 OTP 请求,攻击者在 HTTP 请求中重复了 `email` 参数。
|
||||||
* **结果:** 本应发送到初始电子邮件的 OTP,反而发送到了操纵请求中指定的第二个电子邮件地址。这个缺陷允许通过绕过预期的安全措施获得未授权访问。
|
* **结果:** 本应发送到初始电子邮件的 OTP 被发送到操纵请求中指定的第二个电子邮件地址。这个缺陷允许通过绕过预期的安全措施获得未授权访问。
|
||||||
|
|
||||||
这个场景突显了应用程序后端的一个关键疏漏,该后端处理第一个 `email` 参数以生成 OTP,但使用最后一个进行发送。
|
这个场景突显了应用程序后端的一个关键疏漏,它处理了第一个 `email` 参数用于 OTP 生成,但使用最后一个进行发送。
|
||||||
|
|
||||||
**API 密钥操纵案例:**
|
**API 密钥操纵案例:**
|
||||||
|
|
||||||
* **场景:** 一个应用程序允许用户通过个人资料设置页面更新其 API 密钥。
|
* **场景:** 一个应用程序允许用户通过个人资料设置页面更新他们的 API 密钥。
|
||||||
* **攻击向量:** 攻击者发现通过向 POST 请求附加一个额外的 `api_key` 参数,可以操纵 API 密钥更新功能的结果。
|
* **攻击向量:** 攻击者发现通过向 POST 请求附加一个额外的 `api_key` 参数,可以操纵 API 密钥更新功能的结果。
|
||||||
* **技术:** 利用像 Burp Suite 这样的工具,攻击者构造一个包含两个 `api_key` 参数的请求:一个合法的和一个恶意的。服务器只处理最后一个出现的参数,将 API 密钥更新为攻击者提供的值。
|
* **技术:** 利用像 Burp Suite 这样的工具,攻击者构造一个请求,其中包含两个 `api_key` 参数:一个合法的和一个恶意的。服务器只处理最后一个出现的参数,将 API 密钥更新为攻击者提供的值。
|
||||||
* **结果:** 攻击者控制了受害者的 API 功能,可能未经授权访问或修改私有数据。
|
* **结果:** 攻击者控制了受害者的 API 功能,可能未经授权访问或修改私有数据。
|
||||||
|
|
||||||
这个例子进一步强调了安全参数处理的必要性,特别是在像 API 密钥管理这样关键的功能中。
|
这个例子进一步强调了安全参数处理的必要性,特别是在像 API 密钥管理这样关键的功能中。
|
||||||
|
@ -65,8 +65,8 @@ HTTP 参数污染 (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以
|
||||||
|
|
||||||
Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻击的易受性:
|
Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻击的易受性:
|
||||||
|
|
||||||
* **Flask:** 采用遇到的第一个参数值,例如在查询字符串 `a=1&a=2` 中优先考虑初始实例而非后续重复。
|
* **Flask:** 采用遇到的第一个参数值,例如在查询字符串 `a=1&a=2` 中优先考虑初始实例而非后续重复。
|
||||||
* **PHP(在 Apache HTTP 服务器上):** 相反,优先考虑最后一个参数值,在给定示例中选择 `a=2`。这种行为可能无意中通过优先考虑攻击者操纵的参数而促进 HPP 利用。
|
* **PHP(在 Apache HTTP 服务器上):** 相反,优先考虑最后一个参数值,在给定示例中选择 `a=2`。这种行为可能无意中通过优先考虑攻击者操纵的参数而促进 HPP 利用。
|
||||||
|
|
||||||
## 按技术的参数污染
|
## 按技术的参数污染
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻
|
||||||
|
|
||||||
1. 忽略参数名称中的 %00 之后的内容。
|
1. 忽略参数名称中的 %00 之后的内容。
|
||||||
2. 将 name\[] 视为数组。
|
2. 将 name\[] 视为数组。
|
||||||
3. \_GET 不意味着 GET 方法。
|
3. \_GET 不代表 GET 方法。
|
||||||
4. 优先考虑最后一个参数。
|
4. 优先考虑最后一个参数。
|
||||||
|
|
||||||
### Ruby 3.3.5 和 WEBrick 1.8.2
|
### Ruby 3.3.5 和 WEBrick 1.8.2
|
||||||
|
@ -134,27 +134,112 @@ Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻
|
||||||
1. 不识别 name\[]。
|
1. 不识别 name\[]。
|
||||||
2. 优先考虑最后一个参数。
|
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://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://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://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>
|
<figure><img src="https://pentest.eu/RENDER_WebSec_10fps_21sec_9MB_29042024.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
{% embed url="https://websec.nl/" %}
|
{% embed url="https://websec.nl/" %}
|
||||||
|
|
||||||
{% hint style="success" %}
|
{% 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">\
|
学习与实践 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 黑客技术: <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)
|
学习与实践 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>
|
<details>
|
||||||
|
|
||||||
<summary>支持 HackTricks</summary>
|
<summary>支持 HackTricks</summary>
|
||||||
|
|
||||||
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
* 查看 [**订阅计划**](https://github.com/sponsors/carlospolop)!
|
||||||
* **加入** 💬 [**Discord 群组**](https://discord.gg/hRep4RUj7f) 或 [**Telegram 群组**](https://t.me/peass) 或 **关注** 我们的 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
* **加入** 💬 [**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>
|
</details>
|
||||||
{% endhint %}
|
{% endhint %}
|
||||||
|
|
Loading…
Reference in a new issue