携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情
HTTP 参数污染
HTTP 参数污染 (HPP) 是一种 Web 攻击规避技术,允许攻击者手工创建 HTTP 请求,以便操纵或检索隐藏信息。这种规避技术基于在具有相同名称的参数的多个实例之间拆分攻击向量。由于没有一个相关的HTTP RFC定义HTTP参数操作的语义,因此每个Web应用程序交付平台可能会以不同的方式处理它。特别是,某些环境通过连接从请求中参数名称的所有实例中获取的值来处理此类请求。攻击者滥用此行为以绕过基于模式的安全机制。
详细说明
使用HTTP协议的信息传输可以通过多种方式完成,例如:
- 在 URI 中 – 使用 GET 参数
- 在请求正文中 – 使用 POST 参数
- 在 HTTP 标头中 – 使用 COOKIE 标头
采用的技术取决于应用程序以及必须传输的数据的类型和数量。示例如图 1 所示。
- GET /somePage.jsp?param1=value1& param2=value2HTTP/1.1 Host: www.someHost.co.il User-Agent: Safari/535.1 Accept: text/html,application/xhtml+xml
- POST /somePage.asp HTTP/1.1 Host: www.someHost.co.il User-Agent: Safari/535.1 Accept: text/html,application/xhtml+xml Content-Type: application/x-www-form-urlencoded Content-Length: 27param1=value1& param2=value2
**图 1 –**参数传输示例
在 HPP 中,攻击者将多个具有相同名称的参数引入到单个 HTTP 请求中,而攻击向量则拆分到所有实例中。由于 RFC3986 在此情况下未指定标准行为,因此确切的处理语义取决于特定的应用程序交付环境。
表 1 显示了不同技术和 Web 服务器如何管理同一参数的多个实例的几个示例。
| 技术/HTTP 后端 | 总体解析结果 | 例 |
|---|---|---|
| ASP.NET/IIS | 特定参数的所有匹配项 | par1=val1,val2 |
| ASP/IIS | 特定参数的所有匹配项 | par1=val1,val2 |
| PHP/Apache | 最后一次出现 | par1=val2 |
| PHP/Zeus | 最后一次出现 | par1=val2 |
| JSP, Servlet/Apache Tomcat | 首次出现 | par1=val1 |
表 1 – 技术和 Web 服务器管理同一参数的多个精度的不同处理方法1
当 Web 应用程序交付环境连接多个事件时,应用程序将重建和处理完整的攻击向量。同时,单独检查每个参数实例或将整个请求数据作为单个字符串处理的安全机制将无法检测到攻击。例如,如上面的表 1 所示 - 具有 IIS 的 ASP 连接重复参数的值。
常规攻击: http://webApplication/showproducts.asp?prodID=9 UNION 从用户中选择 1,2,3,其中 id=3 —
使用HPP进行攻击: http://webApplication/showproducts.asp?prodID=9 /&prodID=/UNION /&prodID=/SELECT 1 &prodID=2 &prodID=3 FROM /&prodID=/Users /&prodID=/ WHERE id=3 —