HTTP参数污染

漏洞描述

HTTP参数污染漏洞(HTTP Parameter Pollution)简称HPP,由于HTTP协议允许同名参数的存在,同时,后台处理机制对同名参数的处理方式不当,造成“参数污染”。攻击者可以利用此漏洞对网站业务造成攻击,甚至结合其他漏洞,获取服务器数据或获取服务器最高权限。

原理

浏览器在跟服务器进行交互的过程中,浏览器往往会在get/post请求中带上参数,这些参数以名称-值的形式出现,通常在一个请求中同一个名称参数只会出现一次,但在http协议中是允许出现多次的。

例如:
http://www.baidu.com?name=a&name=b,
百度解析的name值为-- a
雅虎解析的name值为-- b
谷歌解析的name值为-- a b

解析:不同的服务器针对同一个名称出现多次的情况处理方式也不一样,有的服务器取第一个值name=a,有的服务器取第二个值name=b,也有的服务器两个参数都取 name=a,b。这种特性在绕过一些服务器的逻辑盘点时非常有用。

hpp漏洞与web服务器环境,服务端使用的脚本有关,如下是不同web服务器对于出现多个参数是的选择:
在这里插入图片描述
当网站开发者不熟悉web服务器对于多参数是如何选择,将给攻击者可乘之机,hpp能针对客户端和服务端进行攻击

hpp参数污染还可以用于绕过某些防火墙对于sql注入的检测,例如当web服务器对多参数都同时选择时,我们可用一下这种方式绕过某些防火墙,比如对某页面的SQL注入攻击如下:

show_user.aspx?id=5;select+1,2,3+from+users+where+id=1--

这个攻击因为在参数id里面存在明显的SQL注入的模板:select…from…而会被WAF成功拦截。但是如果换成HPP的方式:

show_user.aspx?id=5;select+1&id=2&id=3+from+users+where+id=1--

这时候没有任何参数具备select…from…的特征,可能就可以绕过WAF的拦截了。

下面举一些例子来详细说明。

对客户端的攻击

比如有这样一个网站,用来统计注册用户的性别,这个网站的URL和代码是这样的:

Url : http://host:port/sex.jsp?id=1
 
Link1: <a href="vote.jsp?id=1&sex=nan">男性</a>
 
Link2: <a href="vote.jsp?id=2&sex=nv">女性</a>
 

因为种种原因,这个页面里面用于统计的链接实现的方式如下:

ID = Request.getParameter("id")
 
href_link = "sex.jsp?id=" + ID + "&sex=nan"
 
 

如果这时候恶意攻击者生成了如下的一个URL发给用户:

http://host:port/sex.jsp?id=1%26sex%3Dnan

那么最终在页面的内容会是:

Url : http://host:port/sex.jsp?id=1%26sex%3Dnan
 
Link1: <a href="sex.jsp?id=1&sex=nan&sex=nan">男</a>
 
Link2: <a href="sex.jsp?id=1&sex=nan&sex=nv">女</a>

前面我们有知道对于JSP来说在有2个相同的名称的参数的时候,会取第一个值:

在这里插入图片描述
所以不管用户选择的是什么,始终性别都是男。

对服务器端的攻击

比如某网站的实现如下:
在这里插入图片描述
不同的业务系统是由不同的开发团队完成,使用的开发脚本可能不相同,有没有考虑到hpp的情况。如果发送如下请求给服务器:

http://host:port/frontHost/page?action=view&userid=zhangsan&target=bizreport%26action%3dedit

那么根据我们知道的Web服务器参数处理的方式,这个用户可以通过认证做一些本来没有权限做的事情。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HTTP参数污染测试是指通过恶意修改URL参数、表单数据或者Cookie中的值,来绕过应用程序的安全防护机制,从而进行非法操作或者获取敏感信息的一种攻击手法。为了测试应用程序是否存在HTTP参数污染漏洞,可以按照以下步骤进行测试: 1. 理解应用程序的业务逻辑和参数处理机制。 2. 构建恶意的URL参数、表单数据或Cookie值,通过修改这些值来观察应用程序的反应。 3. 检查应用程序是否会对URL参数、表单数据或Cookie值进行合理的验证和过滤,防止恶意修改。 4. 尝试提交恶意数据,并观察应用程序的反应。如果应用程序没有对恶意数据进行过滤或验证,可能会导致HTTP参数污染漏洞。 5. 分析应用程序的返回结果,查看是否存在异常行为或者响应报文中包含了敏感信息。 不安全的直接对象引用是指应用程序未经过适当的权限验证,就将直接对象引用传递给用户,从而导致用户可以未经授权地访问或修改其他用户的数据。为了测试应用程序是否存在不安全的直接对象引用问题,可以按照以下步骤进行测试: 1. 理解应用程序的权限管理机制和对象之间的关系。 2. 尝试直接访问其他用户的数据,检查应用程序是否对权限进行验证,防止未授权访问。 3. 尝试修改其他用户的数据,检查应用程序是否对操作进行验证,防止未授权修改。 4. 观察应用程序的反应,检查是否存在未经授权的访问或者修改操作。 5. 分析应用程序的代码,确认是否存在不安全的直接对象引用漏洞。 在测试过程中,需要注意保证测试环境的安全性,避免对真实生产环境或者其他用户的数据造成不必要的损害。同时,测试人员应该具备相关的安全知识和经验,以确保测试的准确性和有效性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值