Parameter Pollution
最后更新于
最后更新于
HTTP参数污染(HPP)是一种攻击技术,攻击者通过操纵HTTP参数以意外方式改变Web应用程序的行为。这种操纵是通过添加、修改或复制HTTP参数来实现的。这些操纵的效果对用户来说并不直接可见,但可以显着改变服务器端应用程序的功能,在客户端端产生可观察的影响。
银行应用程序的交易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
交易可能会错误地计入accountC
而不是accountA
,展示了HPP操纵交易或其他功能(如密码重置、2FA设置或API密钥请求)的潜力。
参数的解析和优先级取决于底层Web技术,影响HPP的利用方式。
像Wappalyzer这样的工具有助于识别这些技术及其解析行为。
OTP操纵案例:
背景: 一个需要一次性密码(OTP)的登录机制被利用。
方法: 通过使用Burp Suite等工具拦截OTP请求,攻击者复制了HTTP请求中的email
参数。
结果: OTP原本应发送到初始电子邮件,但却发送到了操纵请求中指定的第二个电子邮件地址。这个漏洞允许绕过预期的安全措施,未经授权地访问。
这种情况突显了应用程序后端的一个关键疏忽,该后端处理第一个email
参数以生成OTP,但使用最后一个参数进行传递。
API密钥操纵案例:
场景: 一个应用程序允许用户通过配置文件设置页面更新其API密钥。
攻击向量: 攻击者发现通过向POST请求附加额外的api_key
参数,可以操纵API密钥更新功能的结果。
技术: 利用Burp Suite等工具,攻击者构造了一个请求,其中包括两个api_key
参数:一个合法的,一个恶意的。服务器只处理最后一个出现的参数,将API密钥更新为攻击者提供的值。
结果: 攻击者控制了受害者的API功能,可能未经授权地访问或修改私人数据。
这个例子进一步强调了安全参数处理的必要性,特别是在像API密钥管理这样关键的功能中。
Web技术处理重复的HTTP参数的方式不同,影响它们对HPP攻击的易受性:
Flask: 采用遇到的第一个参数值,例如在查询字符串a=1&a=2
中优先考虑初始实例a=1
而不是后续的重复。
PHP(在Apache HTTP服务器上): 相反,优先考虑最后一个参数值,在给定示例中选择a=2
。这种行为可能无意中促进了HPP攻击,通过优先考虑攻击者操纵的参数而不是原始参数。