Parameter Pollution

参数污染

支持 HackTricks

HTTP 参数污染 (HPP) 概述

HTTP 参数污染 (HPP) 是一种技术,攻击者通过操纵 HTTP 参数以意想不到的方式改变 Web 应用程序的行为。这种操纵是通过添加、修改或重复 HTTP 参数来实现的。这些操纵的效果对用户并不直接可见,但可以显著改变服务器端应用程序的功能,并在客户端产生可观察的影响。

HTTP 参数污染 (HPP) 示例

一个银行应用程序的交易 URL:

  • 原始 URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000

通过插入一个额外的 from 参数:

  • 操纵后的 URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC

交易可能错误地从 accountA 收费到 accountC,展示了 HPP 操纵交易或其他功能(如密码重置、双因素认证设置或 API 密钥请求)的潜力。

特定技术的参数解析

  • 参数的解析和优先级取决于底层 Web 技术,影响 HPP 的利用方式。

  • Wappalyzer 这样的工具有助于识别这些技术及其解析行为。

PHP 和 HPP 利用

一次性密码 (OTP) 操作案例:

  • 背景: 一个需要一次性密码 (OTP) 的登录机制被利用。

  • 方法: 通过使用 Burp Suite 等工具拦截 OTP 请求,攻击者在 HTTP 请求中重复了 email 参数。

  • 结果: 本应发送到初始电子邮件的 OTP 被发送到操纵请求中指定的第二个电子邮件地址。这个缺陷允许通过绕过预期的安全措施获得未授权访问。

这个场景突显了应用程序后端的一个关键疏漏,该后端处理第一个 email 参数以生成 OTP,但使用最后一个进行发送。

API 密钥操纵案例:

  • 场景: 一个应用程序允许用户通过个人资料设置页面更新他们的 API 密钥。

  • 攻击向量: 攻击者发现通过向 POST 请求附加一个额外的 api_key 参数,可以操纵 API 密钥更新功能的结果。

  • 技术: 利用像 Burp Suite 这样的工具,攻击者构造一个包含两个 api_key 参数的请求:一个合法的和一个恶意的。服务器只处理最后一个出现的参数,将 API 密钥更新为攻击者提供的值。

  • 结果: 攻击者控制了受害者的 API 功能,可能未经授权访问或修改私有数据。

这个例子进一步强调了安全参数处理的必要性,特别是在像 API 密钥管理这样关键的功能中。

参数解析:Flask 与 PHP

Web 技术处理重复 HTTP 参数的方式各不相同,影响其对 HPP 攻击的易受性:

  • Flask: 采用遇到的第一个参数值,例如在查询字符串 a=1&a=2 中,优先考虑初始实例而非后续重复。

  • PHP(在 Apache HTTP 服务器上): 相反,优先考虑最后一个参数值,在给定示例中选择 a=2。这种行为可能无意中通过优先考虑攻击者操纵的参数而促进 HPP 利用。

参考文献

支持 HackTricks

Last updated