基于web服务器的http参数污染攻击(HPP)

HPP漏洞

全称HTTP Parameter Pollution简称HPP,所以有的人也称之为“HPP参数污染”

原理

​ 浏览器与服务器进行交互时,浏览器提交GET/POST请求参数,这些参数会以名称-值对的形势出现,通常在一个请求中,同样名称的参数只会出现一次。但是在HTTP协议中是允许同样名称的参数出现多次的。例: http://www.google.com?search=hacker&name=CTF.针对同样名称的参数出现多次的情况,不同的web服务器的处理方式也不同。有的服务器只取第一个参数 ,也就是search=hacker。有的服务器只取第二个参数,也就是search=CTF。有的服务器两个参数都取,也就是search=hacker,CTF。这导致了网站存在一些逻辑漏洞问题。HPP其实并不属于漏洞,它是利用了不同服务器对于参数获取的结果不同而导致了可以利用某些漏洞。

影响

HTTP参数污染注入源于网站对于提交的相同的参数的不同处理方式导致。

例如:

访问url->www.xxx.com/?id=1&&id=2

网站1:获得id=1

网站2:获得id=2

网站3:获得id=12

这主要原因是不同的网站后台服务对参数的处理方式不同

危害

HTTP参数污染攻击可以造成一些逻辑上的漏洞,例如:

(1)绕过Web应用的WAF

​ 我们进行SQL注入,假设某web服务器是PHP/Apache 然后该服务器搭建了一个以 JSP和Tomcat为基础的WAF 来进行了严格的校验,防止SQL注入攻击。

​ 但我们现在传递下面的参数,根据服务器处理方式,先是Tomcat(jsp)解析第一个参数,id=1 无危害,于是将 其传送给Apache(PHP) 但获取的是后面的参数id=1‘ sql注入 #,解析后敏感信息就被返回给了客户端

?id=1 && id=1'sql注入 #

​ 案例参考可参考于 sqli-labs Less-29

(2)逻辑漏洞的利用

​ 再举一个平常的例子,某投票比赛网站url为 www.xxx.com web服务器是JSP/Tomcat

​ 参数人员:zhanshan、laowang、lishi

​ 投票链接:www.xxx.com?add=name

​ 假设该投票存在HPP漏洞,我将www.xxx.com?add=zhanshan的链接分享出去,让大家进行投票,那么不论大家支持的是laowang还是lishi url为www.xxx.com?add=zhanshan&&add=lishi,根据服务器处理方式,最后获得的参数都是?add=zhanshan。因此大家不论投谁的票,最后都是投给了zhanshan

具体服务端处理方式如下:

Web服务器参数获取函数获取到的参数
PHP/Apache$_GET(“par”)Last
JSP/TomcatRequest.getParameter(“par”)First
Perl(CGI)/ApacheParam(“par”)First
Python/ApacheGetvalue(“par”)All(List)
ASP/IISRequest.QueryString(“par”)All(comma-delimited string)

预防

要防止这种漏洞,除了要做好对输入参数的格式验证外,另外还需要意识到HTTP协议是允许同名的参数的,在整个应用的处理过程中要意识到这一点从而根据业务的特征对这样的情况作正确的处理。在编写WEB程序时,要通过合理的函数方法获取URL的参数值内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值