前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >干货 | 实战绕过WAF各种姿势总结

干货 | 实战绕过WAF各种姿势总结

作者头像
网络安全自修室
发布2022-03-30 21:20:20
3.8K0
发布2022-03-30 21:20:20
举报
文章被收录于专栏:网络安全自修室

1、免责声明

本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途

2、内容速览

什么是WAF

定义:web应用防火墙(Web Application Firewall),通过执行一系列针对HTTP/HTTPS的安全策略来防御对web应用的攻击。

WAF的种类

  • 源码防护: 程序员在开发时使用过滤函数对恶意代码进行过滤。对于这类的绕过思路主要是大小写替换、编码绕过、截断等方式,只要在代码中找到过滤函数就比较容易绕过。
  • 软件WAF: 主要通过访问速度、指纹识别等特征进行拦截,软件WAF侧重拦截WEB漏洞。主要有安全狗、云锁等
  • 硬件WAF: 主流防御流量和部分WEB攻击,常见硬件WAF如天融信、启明星辰、深信服、安恒等。
  • 云WAF: 如阿里云等。

WAF部署在哪里

在测试的过程中我们要知道WAF一般主要是部署在那个节点,这对我们绕过WAF时有很大帮助。通过下图我们可以大概了解:

绕WAF的理解

在我自己看来,所谓的BYPASS WAF实际上是去寻找位于WAF设备之后处理应用层数据包的硬件/软件的特性。利用特性构造WAF不能命中,但是在应用程序能够执行成功的载荷,绕过防护。

那些特性就像是一个个特定的场景一样,一些是已经被研究人员发现的,一些是还没被发现,等待被研究人员发现的。当我们的程序满足了这一个个的场景,倘若WAF没有考虑到这些场景,我们就可以利用这些特性bypass掉WAF了。

由于各个层面可以利用的特性很多,而且WAF往往要考虑自身的性能等等方面,导致了WAF往往会留下一些软肋。

Bypass WAF 姿势

基于IP封锁

在现实的测试过程中会遇到许多在进行几次操作后被封IP的情况。其主要是:

  • 基于http请求头封锁IP 可使用burp suite插件fake-ip进行绕过
  • 基于TCP封锁IP 使用IP代理池不断切换真实IP
基于规则问题

根据WAF返回结果

替换关键字:大小写、/**/替换空格、替换语句。

代理模式

使用垃圾数据等高并发流量,导致设备切换Bypass

IPS模式

分片问题:巨大的Content-Length导致设备Bypass、解码较弱。

基于解析差异
  • 通过业务特性绕过
代码语言:javascript
复制
GET /index.php?id=’an\d''=' HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

在某些业务中,一些字符会被替换成空(如很多利用json来传递数据的网站很多会把凡斜杠\替换成空,这种则可以利用burpsuit进行fuzzing查找被处理掉的字符),利用这个就可以用来绕过waf:’an\d‘’=‘会变成’and‘’=’,导致waf绕过.

  • 特殊字符绕过
代码语言:javascript
复制
GET /index.php?id='a%efnd''=' HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close

测试%[80-ff]都可以,具体可以fuzzing来查找

  • Mutilpart变量覆盖绕过
代码语言:javascript
复制
POST /index.php HTTP/1.1
Host: localhost
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: multipart/form-data; boundary=--------1099641188
Content-Length: 101

----------1099641188
Content-Disposition: form-data; name=“id;filename=xx”;name=“id”

'and''=‘
----------1099641188--

有些waf检测filename这个属性存在的时候下面的内容则不进行sql注入检测,因此可以构造同名参数前面一个name包含filename这个属性,后面再加一个正常的name属性,但是apache解析的时候会解析后面那个name属性,从而导致waf绕过。

其它特性绕过
  • Mysql特性使用/!%0a/绕过
  • 通过编码饶过
  • 使用截断字符
  • 重复变量
  • 参数解析差异
  • 针对域名的保护
  • 对Content-Type不同理解
  • 超大数据包
  • Post不同解析方式
  • 异常数据包

特性就像是一个个特定的场景一样,一些是已经被研究人员发现的,一些是还没被发现,等待被研究人员发现的。

随着一个个特性的发现,WAF的防护能力在web对抗中逐渐增强,在我看来,当所有的特性场景均被WAF考虑到的时候,势必就会有的新的发现。

因此我们不用担心当所有的特性被WAF考虑到的时候我们无计可施,未知的特性那么多,我们还有很多地方可以去挖掘。

实战常遇技巧

当你发现这些姿势都不好使的时候,你就该去发现一些新的特性了,毕竟设计WAF的选手都是基于目前的认知下去设计的,当新的特性出现的时候,势必又是一波bypass。

1.超长文件名

这个主要是对于waf检测文件后缀的时候起作用,利用超长的文件名,可以逃过文件后缀名的检测

2.上传内容使用垃圾字符

上传一个比较大的文件,将马子藏在其中

使用参数污染成功执行命令

简而言之,就是给参数赋上多个值

构造畸形请求包

还是基于waf的检测一般都会判断请求类型再去检测内容

有些可以通过修改POST为GET绕过waf

还有的waf通过Content-Type: multipart/form-data来判定这是个上传包,然后检测内容

这个方法,又能细分出很多来,而且屡试不爽,这里总结下我个人常用的

(1) 删掉content-type

(2) 构造多个filename

(3)content-type后面加TABLE键

(4)换行boundary

(5)文件名前面加空格

(6)文件名前面加单引号

..................................这里是实在是太多了,就不一一举例了

文件内容编码绕过

这个就比较考验个人能力了,既可以让waf检测不到,有能成功执行命令,这里是真正的硬实力绕waf。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络安全自修室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是WAF
  • WAF的种类
  • WAF部署在哪里
  • 绕WAF的理解
  • Bypass WAF 姿势
    • 基于IP封锁
      • 基于规则问题
        • 基于解析差异
          • 其它特性绕过
          • 实战常遇技巧
            • 1.超长文件名
              • 2.上传内容使用垃圾字符
                • 使用参数污染成功执行命令
                • 构造畸形请求包
              • 文件内容编码绕过
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档