前言:
本文将简单的介绍什么是WAF,如何判断WAF,如何简单的绕过WAF
1.什么是WAF
Web Application Firewall(web应用防火墙),一种公认的说法是“web应用防火墙通过执行一系列针对HTTP/HTTPS的安全策略来专门为web应用提供保护的一款产品。
基本可以分为以下4种
-
软件型WAF
以软件的形式安装在服务器上面,可以接触到服务器上的文件,因此就可以检测服务器上是否有webshell,是否有文件被创建等。
-
硬件型WAF
以硬件形式部署在链路中,支持多种部署方式。当串联到链路上时可以拦截恶意流量,在旁路监听模式时只记录攻击但是不进行拦截。
-
云 WAF
一般以反向代理的形式工作,通过配置后,使对网站的请求数据优先经过WAF主机,在WAF主机对数据进行过滤后再传给服务器
-
网站内置的WAF
就是来自网站内部的过滤,直接出现在网站代码中,比如说对输入的参数强制类转换啊,对输入的参数进行敏感词检测啊什么的
2.如何去判断一个网站是否有WAF
- 使用sqlmap
sqlmap自带有WAF识别模块可以识别出WAF的种类,不过如果目标的WAF并没有什么特征,sqlmap只能识别出类型为Generic。
详细的识别规则在sqlmap的WAF目录下,在该目录下也可以自定义waf的识别规则
sqlmap.py -u "http://xxx.com" --identify-waf--batch
- 手工判断
直接在相应的URL后面加上最基础的测试语句,并放在一个不存在的参数名中,因为选用的参数是不存在的,不会对网站本身执行有影响,所以正常情况应该显示正常,但是如果访问被拦截,就说明存在WAF
3.一些绕过WAF的小手段
- 大小写混合(现在几乎没用)
在过滤规则里只针对了特定的大写或者小写的情况下,采用大小写混合就可以绕过规则
栗如:uNioN sElEct
- URL编码
WAF一般只会进行一次URL解码,而我们只要对字符进行URL编码两次就可以绕过 - 替换关键字
当过滤规则里采用了替换或者删除敏感词,且只匹配一次,那么就可以很容易的绕过
栗如:
selselectect 在过滤掉select之后就会剩下sel和ect,合起来就是select。 - 使用注释
即使用注释替代空格 - 生僻函数
使用生僻的函数代替常用的函数 - 寻找网站源ip
针对具有云WAF的网站,只要通过源IP访问网站即可直接绕过云WAF - 将注入语句放入cookie中
当WAF只针对POST和GET时,而网页代码里又使用的是$_Requests来获取参数,就可以将注入语句写入cookie中