waf绕过方式小结

waf不单单局限于绕过waf过滤的字符以突破waf,也可以通过waf缺陷,解析机制等方式突破waf。文章参考2019 Kcon大会上pyn3rd的议题《云时代的waf突破》

0x01:脏数据绕过

即传入一段长数据使waf失效,从而实现绕过waf。文章提到某些waf处理POST的数据时,只会检测开头的8K,后面选择全部放过

0x02:并发请求绕过

对请求进行并发,攻击请求会被负载均衡调度到不同节点,导致某些请求绕过了waf的拦截

0x03:HTTP参数污染

由于waf与后端对相同HTTP参数处理方式不同,导致waf被绕过

如上图所示,在php中会处理最后一个数据,也就是这里的id=2,通过在最后一个参数中传入注入等语句绕过waf的过滤

0x04:数据格式解析绕过

除了图中提到的方式外,一些其他方式也可能绕过waf,例如将传入json数据,将其修改为HTTP请求,或者修改content-type等方式(当然是在应用能够正常解析的前提下)。

0x05:分块传输绕过

这个应该是最近听的比较多而且比较有效的一种绕过方式
在HTTP请求头加入 Transfer-Encoding: chunked,同时对数据进行分块传输
例如注入语句为id=1 and 1=1,将请求修改为分块传输的方式

需要注意的是0代表编码结束,在0后面需要加两个空行代表分块传入的结束
为此有师傅编写了专门的插件
https://github.com/c0ny1/chunked-coding-converter

0x06:利用容器特性绕过

在IIS+ASP的环境中,会忽略%,以此特性来绕过waf

在waf看来传入的数据为http://www.test.com/test.asp?id=1 union all se%lect 1,2,3,4 fro%m adm%in
由于检测的关键词被隔断导致不会被拦截,而且传入后端服务器的数据为http://www.test.com/test.asp?id=1 union all select 1,2,3,4 from admin。从而绕过了waf

0x07:编码绕过

对请求数据进行编码,例如url编码,Unicode编码等,如果waf对数据不能有效的解码,而应用后端能够正常解码,就可以绕过waf

例如最常见的url编码,对数据进行二次url编码,waf进行一次解码并不能解析到有效的数据,而后端在进行解码时传入的为有效的恶意数据

0x08:ip伪造

由于白名单机制,waf可能会对某些ip发的请求不进行拦截,通过ip伪造绕过waf的限制

常见的伪造IP请求头
X-Forwarded-For:127.0.0.1
X-Forwarded-Host:127.0.0.1
X-Client-IP:127.0.0.1
X-remote-IP:127.0.0.1
X-remote-addr:127.0.0.1
True-Client-IP:127.0.0.1
X-Client-IP:127.0.0.1
Client-IP:127.0.0.1
X-Real-IP:127.0.0.1

0x09:HTTP请求方式绕过

来自一个朋友的真实环境中,POST GET传数据都会被waf拦截,将请求方式修改为OPTIONS,HEAD等成功绕过了waf(当然是在应用允许使用这些请求方式的前提下)

发表评论

电子邮件地址不会被公开。 必填项已用*标注