概述
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/Tomcat | Request.getParameter(“par”) | First |
Perl(CGI)/Apache | Param(“par”) | First |
Python/Apache | Getvalue(“par”) | All(List) |
ASP/IIS | Request.QueryString(“par”) | All(comma-delimited string) |
预防
要防止这种漏洞,除了要做好对输入参数的格式验证外,另外还需要意识到HTTP协议是允许同名的参数的,在整个应用的处理过程中要意识到这一点从而根据业务的特征对这样的情况作正确的处理。在编写WEB程序时,要通过合理的函数方法获取URL的参数值内容
最后
以上就是文艺香菇为你收集整理的基于web服务器的http参数污染攻击(HPP)HPP漏洞的全部内容,希望文章能够帮你解决基于web服务器的http参数污染攻击(HPP)HPP漏洞所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复