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 bd43a9fe8..6720ed7fd 100644 --- a/pentesting-web/parameter-pollution.md +++ b/pentesting-web/parameter-pollution.md @@ -1,6 +1,6 @@ -# 参数污染 +# Parameter Pollution | JSON Injection -## 参数污染 +## Parameter Pollution {% hint style="success" %} 学习与实践 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ @@ -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)
{% embed url="https://websec.nl/" %} {% hint style="success" %} -学习与实践 AWS 黑客技术:[**HackTricks 培训 AWS 红队专家 (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -学习与实践 GCP 黑客技术: [**HackTricks 培训 GCP 红队专家 (GRTE)**](https://training.hacktricks.xyz/courses/grte) +学习与实践 AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +学习与实践 GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
支持 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 分享黑客技巧。 +* **加入** 💬 [**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 来分享黑客技巧。
{% endhint %}