一、WAF简介
WAF(WebApplicationFirewall)也称:网站应用级入侵防御系统,是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。
1.工作原理
对web应用程序客户端发出的流量进行内容检测和验证,检测其安全性与合法性,来屏蔽常见的网站漏洞攻击,如SQL注入,XML注入、XSS等。
2.WAF分类
软件型WAF
以软件形式装在所保护的服务器上的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell是否有文件被创建等。代表性的产品有:安全狗,D盾。
硬件型WAF
以硬件形式部署再链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听模式时只记录攻击不进行拦截。代表性的产品有:nsfocus, imperva硬件。
云WAF
一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发生给实际网站服务器进行请求,可以说是戴防护功能的CDN。代表性的产品有:百度云加速,阿里云云盾。
网站系统内置的WAF
网站系统内置的WAF也可以说是网站系统中内置的过滤,直接镶嵌在代码中,相对来说自由度高一般有以下这几种情况。
输入参数强制类型转换(intval等)。
输入参数合法性检测。
关键函数执行(SQL执行、页面显示、命令执行等)前,对经过流程的输入进行检测。
对输入的数据进行替换过滤后再继续执行代码流程(转义/替换掉特殊字符等)。
网站系统内置的WAF与业务更加锲合,在对安全与业务都比较了解的情况下,可以更少的收到误报与漏报。
二、一些WAF绕过方法(以注入为主)
1.大小写绕过
比如waf拦截union select
,可以构造Union sElEcT
来绕过。
2.特殊字符替换空格或注释绕过
可以用注释来替代空格进行绕过,有些waf在检测时不会识别注释或者将注释替换掉,如sqlserver中可以用//代替空格,在mysql中 %0a 是换行,可以代替空格。
如union select 1,2
可转换为`union/xx/select/xx/1,2`
3.编码绕过
少数waf不会对普通字符进行URL解码,还有一部分waf只会进行一次url解码,所以可以对payload进行二次url编码。常见的SQL编码有unicode、HEX、URL、ascll、base64等,XSS编码有:HTML、URL、ASCII、JS编码、base64等等。
如 union select 1,2
可对其进行url编码后进行绕过waf。
4.关键字替换绕过
有些WAF会删除或者替换关键字,如遇到select union等敏感字词。
如 union select 1,2,3
可替换为ununionion selselectect 1,,2,3
5.多请求拆分绕过
对于多个参数的语句,可以将注入语句分割插入。
如这样的请求:?a=[inputa]&b=[inputb]
可将参数a和b拼接如:and a=[inputa] and b=[inputb]
6.利用cookies绕过
对于用了$_REQUEST来获取参数的网站可以尝试将payload放在cookie中进行绕过REQUEST会依次从GET POST cookie中获取参数,如果WAF只检测了GET/POST而没有检测cookie,可以将语句放在cookie中进行绕过。
7.云WAF绕过之寻找网站源ip
采用云WAF的网站可以寻找网站真实ip来绕过云WAF的检测。
常见方法有:
- 采用多地ping的方法查看ip地址解析分析真实ip
在线ping网站有:
http://ping.chinaz.com/
http://ping.aizhan.com/
http://ce.cloud.360.cn/ - 使用 nslookup 进行检测,原理同上。
- 寻找网站历史解析记录。
- 找网站的二级域名、NS、MX记录等对应的ip。
- 订阅网站邮件,查看邮件发送方的ip。
参考:《WEB渗透测试实战指南》