HTTP参数污染(HPP)攻击详解
字数 1031 2025-11-13 05:25:18
HTTP参数污染(HPP)攻击详解
描述
HTTP参数污染(HTTP Parameter Pollution,HPP)是一种利用Web应用程序对HTTP参数处理方式的漏洞。当同一参数在请求中多次出现时,不同技术(如客户端、代理服务器、后端框架)可能采用不同的解析策略(如取第一个值、取最后一个值、合并值或报错),攻击者通过构造恶意参数覆盖或混淆正常参数值,实现权限绕过、数据篡改或逻辑漏洞利用。
解题过程
-
理解参数解析差异
- 关键点:不同层级的组件对重复参数的处理规则不同。例如:
- PHP/Apache:默认取最后一个参数值。
- JSP/Tomcat:默认取第一个参数值。
- ASP/IIS:合并所有值并用逗号分隔。
- Python/Django:返回列表形式的所有值。
- 示例:请求
?id=1&id=2时,PHP解析为id=2,而JSP解析为id=1。
- 关键点:不同层级的组件对重复参数的处理规则不同。例如:
-
探测漏洞存在性
- 步骤:
- 在GET/POST请求中提交重复参数(如
?name=alice&name=bob)。 - 观察响应变化:若页面行为异常(如显示不同用户数据),说明存在解析差异。
- 结合业务逻辑测试:例如在登录接口提交
user=admin&user=guest,检查是否以高权限账户登录。
- 在GET/POST请求中提交重复参数(如
- 步骤:
-
攻击场景分析
- 权限绕过:
- 场景:权限验证层取第一个参数
role=user,业务层取最后一个参数role=admin。 - 攻击请求:
POST /api/settings?role=user&role=admin。
- 场景:权限验证层取第一个参数
- WAF绕过:
- 场景:WAF检测第一个参数
id=1' OR 1=1--,但后端取最后一个参数id=legitimate_value。 - 攻击请求:
?id=1' OR 1=1--&id=2。
- 场景:WAF检测第一个参数
- 数据污染:
- 场景:参数用于生成链接或重定向(如
redirect_url),通过重复参数篡改目标地址。
- 场景:参数用于生成链接或重定向(如
- 权限绕过:
-
防御措施
- 输入规范化:后端统一处理策略(如强制取第一个或最后一个值),避免解析歧义。
- 参数白名单:严格校验参数数量与格式,拒绝重复参数。
- 安全编码:使用框架提供的安全函数获取参数(如Spring的
@RequestParam默认拒绝重复参数)。 - WAF配置:检测重复参数并阻断可疑请求。
总结
HPP漏洞本质源于系统组件间参数解析的不一致性。通过精心构造重复参数,攻击者可利用这种差异实现越权或绕过防御。防御需确保参数处理逻辑的一致性,并对输入实施严格校验。