WAF的那些事儿

WAF(Web Application Firewall, Web应用防火墙)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

Web基本可以分为以下几类。

软件型WAF:

以软件形式装在所保护的服务器行的WAF,由于安装在服务器上,所以可以接触到服务器上的文件,直接检测服务器上是否存在WebShell、是否有文件被创建等。

硬件型WAF
以硬件形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听模式时只记录***不进行拦截。

云WAF
一般以反向代理的形式工作,通过配置NS记录或CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实际网站服务器进行请求,可以说是带防护功能的CDN。

网站系统内置的WAF
网站系统内置的WAF也可以说是网站系统中内置的过滤,直接镶嵌在代码中,相对来说*度高。一般有以下几种情况。

1.输入参数强制类型转换(intval等)
2.输入参数合法性检测
3.关键函数执行(SQL执行、页面显示、命令执行等)前,对经过代码流程的输入进行检测
4.对输入的数据进行替换过滤后再继续执行代码流程(转义/替换特殊字符等)

网站系统内置WAF与业务更加契合,在对安全与业务都比较了解的情况下,可以更少地收到误报与漏报。

WAF判断

SQLMap
使用SQLMAP中自带地WAF识别模块可以识别出WAF地种类,但是如果所安装地WAF并没有什么特征,SQLMAP就只能识别出类型是Generic。

sqlmap.py -u "url" --indentify-waf --batch

手工判断
直接在相应网站地URL后面加上最基础地测试语句,比如union select 1,2,3%23, 并且放在一个不存在地参数名中。被拦截地表现为:页面无法访问、响应码不同、返回与正常请求页面时不同地结果等。

一些WAF的绕过方法

大小写混写
在规则匹配时只针对特定大写或特定小写的情况,在实站中可以通过混写大小写的方式进行绕过(现在几乎没有这种情况)

uNion sElEct 1,2,3,4,5

URL编码
极少部分的WAF不会对普通字符进行URL解码

替换关键字
WAF采用替换或删除select/union这类敏感关键词的时候,如果只匹配一次则很容易通过

ununionion selselectect 1,2,3,4,5

使用注释
注释在截断SQL语句中用的比较多,在绕过WAF时主要使用其替代空格(/任意内容/),适用于检测过程中没有识别注释或替换了的注释的WAF

union/*2333*/select/*5555*/1,2,3,4,5

还可以使用内联注释尝试绕过WAF的检测

多参数请求拆分
对于多个参数拼接到同一条SQL语句中的情况,还可以将注入语句分为插入
例如请求URL时,GET参数为如下格式:

a=[input1]&b=[input2]

将GET的参数a和参数b拼接到SQL语句中

and a=[input1] and b=[input2]

这是就可以将注入语句进行拆分

a=union/*&b=*/select 1,2,3,4

最终将参数a和参数b拼接

and a=union /*and b=*/select 1,2,3,4

HTTP参数污染
HTTP参数污染是指当同一参数出现多次,不同的中间件会解析为不同的结果。

生僻字函数
使用生僻字函数替代常见的函数,例如在报错注入中使用polygon()函数替换常用的updatexml()函数

寻找网站源站IP
对于绕过具有云WAF防护的网站而言,只要找到网站的IP地址,然后用过IP访问网站,就可以绕过WAF的检测

常见的寻找网站IP方法有下面几种
	寻找网站的历史解析记录
	多个不同区域ping网站,查看IP解析的结果
	找网站的二级域名、NS、MX记录等对应IP
	订阅网站邮件,查看邮件发送方的IP

注入参数到cookies中
某些程序员在代码中使用 R E Q U E S T 获 取 参 数 , 儿 _REQUEST获取参数,儿 R​EQUEST获取参数,儿_REQUEST会依次从GET/POST/cookie中获取参数,如果WAF只检测了GET/POST而没有检测cookie,可以将注入语句放入cookie中进行绕过。

上一篇:Hbase常用命令


下一篇:变量覆盖升级版