本文《渗透测试中的Bypass技巧(II)之应用层过waf》由一叶知安团队原创投稿安全脉搏,作者:倾旋,安全脉搏首发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。 0x00 前言 许多朋…
本文《渗透测试中的Bypass技巧(II)之应用层过waf》由一叶知安团队原创投稿安全脉搏,作者:倾旋,安全脉搏首发表本文,如需要转载,请先联系安全脉搏授权;未经授权请勿转载。
0x00 前言
我的很多朋友在渗透测试中都很无助,因为他们遇到了WAF。我被邀请和godkiller一起写这篇文章,希望能帮到很多朋友。
本系列共分五篇,内容如下:
架构层绕过WAF
CDN WAF旁路
白名单应用程序
匹配资源大小限制
服务器端配置(数据最大长度)
协议未正确解析
HTTP不同的请求方法污染
GET和POST之间的区别
上传文件
HTTP参数污染(HPP)
发现WAF缺陷过程
绕过WAF上传
绕过WAF注射
自动旁路
思维
过滤/拦截规则不严谨
等效替换
案例替代
不寻常的条件
特殊符号
编码
评论
0x01 HTTP不同的请求方法污染
1
得到
请求指定的页面信息并返回实体主体。
2
头
与GET请求类似,不同之处在于返回的响应中没有特定内容,用于获取标头。
3
POST
将数据提交到指定的资源以处理请求(例如提交表单或上传文件)。数据包含在请求正文中。 POST请求可能导致创建新资源和/或修改现有资源。
4
放
从客户端传输到服务器的数据将替换指定文档的内容。
五
删除
请求服务器删除指定的页面。
6
CONNECT
HTTP/1.1协议保留给可以将连接更改为管道模式的代理服务器。
7
OPTIONS
允许客户端查看服务器的性能。
8
跟踪
echo服务器收到的请求主要用于测试或诊断。
我们可以先查看请求:

Visible是一个GET请求,这个服务器是一个Apache + PHP环境。
假设服务器只拦截GET/POST请求,那么根据Apache服务器的特性,只要脚本收到GET参数,就可以发送其他请求。
数字:

在测试功能之前,此知识点需要了解每个Web服务器环境的特征。
0x02 GET与POST的区别
Http定义了与服务器交互的不同方法。有四种基本方法,即GET,POST,PUT和DELETE。
URL的全名是资源描述符。我们可以将其视为:URL地址,用于描述网络上的资源,HTTP中的GET,POST,PUT和DELETE对应于此资源的检查,更改和增加。删除4个操作。
此时,每个人都应该有一个大致的了解,GET通常用于获取/查询资源信息,而POST通常用于更新资源信息。
很多朋友都在网上写了他们问题的答案,但是对于WAF,我们必须改变角度来看,第一点是看数据包之间的差异。
GET /sql/index2.php?id=2 HTTP/1.1
主机: 192.168.1.102
用户代理: Mozilla/5.0(Windows NT 10.0; WOW64; rv: 51.0)Gecko/20100101 Firefox/51.0
接受: 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
Failure when receiving data from the peer
升级 - 不安全请求: 1
内容类型: application/x-www-form-urlencoded
内容长度: 10
关键词=T
可以看出,在请求的数据包中,POST比GET多一个。
内容类型: application/x-www-form-urlencoded
这是将提交的数据传递到url代码以传递给服务器,因此,一些WAF将解析这行Content-Type以确定它是否是POST注入,因为它是为了防止方法污染。
数字:

这也有可能扰乱WAF的判断。
0x03 文件上传
关于文件上传,让我们分享几点来扩展HPP。
首先查看上传数据包。
POST /upload.php HTTP/1.1
主机: 192.168.1.100
用户代理: Mozilla/5.0(Windows NT 10.0; WOW64; rv: 51.0)Gecko/20100101 Firefox/51.0
接受: 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流项=
X-Forwarded-For: 1.1.1.1
CLIENT_IP: 2.2.2.2
连接:保持活动状态
升级 - 不安全请求: 1
内容类型: multipart/form-data;边界=--------------------------- 440470572354
内容长度: 1089
----------------------------- 440470572354
Content-Disposition: form-data;命名=“文件”;文件名='n.php'
内容类型: application/octet-stream
< PHP
PHPINFO();
?>
----------------------------- 440470572354
Failure when receiving data from the peer
只要根据正式协议数据结构构造数据包,就会解析该类。
我们来看一个例子:

这已被截获,我们根据上述条件修改数据包:

已成功通过。
文章原始提交安全脉冲SecPulse.Com,一叶志安读者群QR码如下,欢迎加入:
0x04