HTTP参数污染攻击

服务器两层架构

​ 服务器端有两个部分:第一部分为tomcat为引擎的jsp型服务器,第二部分为apache为引擎的php服务器,真正提供web服务器的是php服务器。工作流程为:client访问服务器能直接访问到tomcat服务器,然后tomcat服务器再向apache服务器请求数据。

在这里插入图片描述

HTTP参数处理

​ 在与服务器进行交互的过程中,客户端往往会在GET/POST请求中带上参数。通常在一个请求中,同名参数只会出现一次,但是在HTTP协议中是允许同名参数多次出现的。

​ 以上图服务器为例假设请求为index.php?id=1&id=2,客户端请求首先通过tomcat解析第一个参数,接下来tomcat去请求apache服务器,而apache解析最后一个参数。实际提供服务的是apache服务器,因此返回客户端的是id=2。

下表为数服务器对参数解析的:

web服务器 参数获取函数 获取到的参数
PHP/Apache $_GET(“par”) Last
JSP/Tmocat 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参数污染

如果一个网站只在tomcat服务器处做数据过滤和处理,我们可以利用解析参数的不同,对WAF检测进行绕过。

攻击payload:index.php?id=-1' union select 1,database(),3--+

union select…会被tomcat服务器识别为恶意攻击并拦截,而如果payload如下:

攻击payload:index.php?id=1&id=-1' union select 1,database(),3--+

n select 1,database(),3–+```

tomcat服务器检测第一个参数后发现无异常,提交给apache服务器。成功绕过WAF拦截

发布了34 篇原创文章 · 获赞 33 · 访问量 4891

猜你喜欢

转载自blog.csdn.net/weixin_43872099/article/details/104926292