本文《渗透测试中的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