未加星标

渗透测试中的Bypass技巧(II)之应用层过waf

字体大小 | |
[web安全 所属分类 web安全 | 发布者 店小二03 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

本文《渗透测试中的Bypass技巧(II)之应用层过waf》由一叶知安团队原创投稿安全脉搏,作者:倾旋,安全脉搏首发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。

0x00 前言

许多朋友在渗透测试中因为遇到WAF而束手无策,本人应邀,与godkiller一同写下此文,希望能够对许多朋友的问题有所帮助。

此系列一共分为五篇文章,分别如下:

架构层绕过WAF CDN WAF绕过 白名单应用 匹配资源大小限制 服务器端配置(Data MAX Length) 协议未正确解析 HTTP不同的请求方法污染 GET与POST的区别 文件上传 HTTP参数污染(HPP) 发现WAF缺陷过程 绕过某WAF上传 绕过某WAF注入 自动化Bypass 思考 过滤/拦截规则不严谨 等价替换 大小写替换 不常用条件 特殊符号 编码 注释
渗透测试中的Bypass技巧(II)之应用层过waf
0x01 HTTP不同的请求方法污染 1 GET 请求指定的页面信息,并返回实体主体。 2 HEAD 类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头 3 POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 4 PUT 从客户端向服务器传送的数据取代指定的文档的内容。 5 DELETE 请求服务器删除指定的页面。 6 CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 7 OPTIONS 允许客户端查看服务器的性能。 8 TRACE 回显服务器收到的请求,主要用于测试或诊断。

我们可以先看一个请求:


渗透测试中的Bypass技巧(II)之应用层过waf

可见是一个GET请求,此服务器是一个Apachephp的环境。

假设服务器只拦截GET/POST请求,那么根据Apache服务器的特性,发送其他请求只要脚本接收的是GET参数,那么也是可以传递参数值的。

如图:


渗透测试中的Bypass技巧(II)之应用层过waf

此知识点需要先知道各个Web服务器环境的特性,然后再针对特性去做测试。

0x02 GET与POST的区别

Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。

URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。

到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。

在网上已经有很多朋友写过了其问题的答案,但是对于WAF,我们就要转变角度去看了,第一点就是要看数据包的区别。

GET /sql/index2.php?id=2 HTTP/1.1
Host: 192.168.1.102
User-Agent: Mozilla/5.0 (windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Cookie: yunsuo_session_verify=a89786c1a180124a6820b6387b85b693
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
POST /sql/search.php HTTP/1.1
Host: 192.168.1.102
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.102/sql/search.php
Cookie: yunsuo_session_verify=a89786c1a180124a6820b6387b85b693
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
keywords=t

可见在请求的数据包中,POST比GET多了一个

Content-Type: application/x-www-form-urlencoded

这个是将提交数据变成url编码来传递给服务器,那么如此说来,也有的WAF会解析这行Content-Type去识别是否是POST注入,因为要防止方法污染。

如图:


渗透测试中的Bypass技巧(II)之应用层过waf

这样也可以有几率扰乱WAF的判断。

0x03 文件上传

关于文件上传我们来分享几点,用于延伸下方HPP这一点。

先看一个上传数据包。

POST /upload.php HTTP/1.1
Host: 192.168.1.100
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.100/
Cookie:yunsuo_session_verify=1a9c7117538a7a9bce39a4695ff3f0cc; safedog-flow-item=
X-Forwarded-For: 1.1.1.1
CLIENT_IP: 2.2.2.2
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Content-Type:multipart/form-data; boundary=---------------------------440470572354
Content-Length: 1089
-----------------------------440470572354
Content-Disposition: form-data; name="file"; filename="n.php"
Content-Type: application/octet-stream
<?php
Phpinfo();
?>
-----------------------------440470572354
Content-Disposition: form-data; name="submit"
Submit
-----------------------------440470572354--

Content-Type:multipart/form-data; 指代的是这个数据是来自表单提交的

某些WAF是通过Content-Type识别是否是文件上传数据包。假设我们将Content-Type更改,数据包也是正常提交过去的。这个就完成了一次bypass。

还有的时候就是Content-Disposition: form-data;,也有某些WAF是根据Content-Disposition匹配filename的,用于验证黑名单。我们经过混淆大小写也是可以bypass的。(http://www.secpulse.com/archives/56523.html)

拦截:


渗透测试中的Bypass技巧(II)之应用层过waf

Bypass:


渗透测试中的Bypass技巧(II)之应用层过waf

具体看http://blog.cora-lab.org/193.html

0x04 HTTP参数污染(HPP)

上一节已经讲过了文件上传,在HPP中最典型的的例子就是“双文件上传”。

就是在协议中,提交两个相同的值,达到欺骗WAF一次匹配的目的。在这里提点一下http协议中参数名与参数值的结构。

[参数名]=“参数值”; 或者 [参数名]=“参数值”亦或者 [参数名]=参数值 亦或者 [参数名]=参数值;
渗透测试中的Bypass技巧(II)之应用层过waf

这类都会被解析,只要根据正规协议数据结构去构造数据包即可bypass。

我们来看一个例子:


渗透测试中的Bypass技巧(II)之应用层过waf

 

这里已经被拦截,我们根据上述条件来修改数据包:


渗透测试中的Bypass技巧(II)之应用层过waf

 

已经bypass成功了。

文章原创投稿安全脉搏SecPulse.Com,一叶知安读者群二维码如下,欢迎加入:


渗透测试中的Bypass技巧(II)之应用层过waf

本文《渗透测试中的Bypass技巧(II)之应用层过waf》由一叶知安团队原创投稿安全脉搏,作者:倾旋,安全脉搏首发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。

本文web安全相关术语:黑盒测试方法 黑盒测试和白盒测试 网站安全检测 360网站安全检测 网络安全知识 网络安全技术 网络信息安全 网络安全工程师

tags: WAF,GET,POST,application,HTTP,Content,Type,请求,参数,form,数据包,上传,zh
分页:12
转载请注明
本文标题:渗透测试中的Bypass技巧(II)之应用层过waf
本站链接:http://www.codesec.net/view/541262.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | web安全 | 评论(0) | 阅读(1273)