HPP参数污染攻击(sqli labs 29-31关)
2023-06-15 17:17:10 # Web Security # Sqlilabs

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。

image-20210710101238806

假设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关

image-20210710104023467

当我们尝试注入时:

image-20210710104057030

被拦截。

查看源码:image-20210710104152453

我们可以看到参数被检测了

1
2
String rex = "^\\d+$";//正整数
Boolean match=id.matches(rex);

那么我们可以通过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参数污染攻击的应用还有很多很多,之后还需学习