您的当前位置:首页web渗透测试中WAF绕过讲解(三)规则层面的绕过注入

web渗透测试中WAF绕过讲解(三)规则层面的绕过注入

2024-12-14 来源:哗拓教育

0x01 前言

        对于渗透测试人员来说掌握绕过各类WAF是一项重要的基本技能而WAF又分云WAF、硬件WAF、软件WAF、代码级WAF,本文针对基于规则类的WAF绕过技巧,这三篇文章希望可以帮助一些萌新学习到一些绕过WAF的姿势。

0x02 概述

        绕过SQL注入规则主要利用WAF规则本身的问题、未考虑到SQL语法变形、及后端数据库SQL语句语法特性。不同的数据库虽然遵守SQL标准,但是通常会加入特有的语法。WAF的防御策略要兼顾各种数据库的特殊语法,容易遗漏,从而被利用绕过WAF。已下我们就介绍一些方法。
        1,关键字替换
        2,特殊符号
        3,注释符
        4,空白符绕过
        5,浮点数词法解析
        6,利用不常用报错函数绕过

0x03 关键字替换

        原理:现在世面上大部分WAF是通过正则+黑名单来起到拦截的作用,这种情况就可以用一些平常用的很少关键字替换来实现绕过,用的多的针对他的正则肯定就多,而这时候用一些偏门的,往往可以出乎意料。例如在mysql中,很多的waf会将sleep()函数列入了黑名单,为他添加很多相对应的正则,那么可以考虑使用和他差不多相同功能的benchmark()函数来实现绕过。
        例如MySql中:
                AND 等价于 && ( 运算符 )
                OR 等价于 || ( 运算符 )
                = 等价于 like ( 运算符 )
                sleep() 等价于 benchmark() ( 延时函数 )
                mid()substring() 等价于 substr() ( 字符串截取函数 )

0x04 特殊符号

        原理:关于这个的话就比较少了,有的时候waf在判断规则的时候是根据我们输入的内容来过滤的,例如360网站卫士,select * from tdb_goods where goods_id ='-1'unionselect*fromadmin 你这样输入语句他是不拦截的,但是你这样带入到MySql中MySql也不会识别,这个时候我们就可以尝试使用 “+”。
        例子:select+*+from+admin 这样来尝试绕过    “+” 号相当于空格 在过滤空格的时候可以考虑使用这个突破。

0x05 注释符

        原理:/*xxx*/是注释的意思,也是空白符的意思。MySQL对sql语句(union/**/select)词法是可以正常解析的。事实上大部分WAF都考虑到/**/可以作为空白符,但是waf检测 “/\*.*\*/”是非常性能,工程师会去使用一些折中的方法,例如说:可能在检测中间引入一些特殊字符,例如:/*\w+*/。或者,WAF可能只中间检查n个字符“/\*.{,n}\*/”。
        注释符:
                1,/**/    (常用于绕过waf)
                2,/*!*/  (常用于绕过waf)
                3,--      (常用于注释后面的sql语句)
                4,#      (常用于注释后面的sql语句)
        例子:
                这种情况我们就可以考虑使用
                select/**/xx/**/from/**/xxxx
                select/*数字+字母*/xx/*数字+字母*/from/*数字+字母*/xxxx
                select/*特殊符号+数字+字母*/xxx/*特殊符号+数字+字母*/from/*特殊符号+数字+字母*/xxxxx
                举例:
                        select/*@a?v|ddd--n*/xxxxx/*@a?v|ddd--n*/from/*@a?v|ddd--n*/xxxx
                        这里要特别说明,以前看到一篇waf绕过的文章那位前辈使用了 emoji表情 没错就是 emoji表情 绕过了国内大部分的WAF这故事告诉我们绕WAF就是在比脑洞想工程师没有想到的地方那么绕过WAF自然就水到渠成了。

0x06 空白符绕过

        原理:现在大部分的WAF还是基于正则表达式来进行过滤的, SQL注入规则使用正则表达式的“\s”匹配空格,例如”select\s+union”。那么利用正则表达式的空白符与MySQL空白符的不同说不定就可以绕过WAF的规则。
        正则表达式空白符:%09,%0a,%0b,%0D,%20
        MySql空白符:%09,0A,%0b,%0D,%20,%0C,%A0,/**/

0x07 浮点数词法解析

        原理:利用MySql可以解析浮点数这个特点我们可以构造一些特殊的,带浮点数的语句来绕过WAF。
        例子:
                1,select * from xxx where id=8E0union select 1,2,3,4,5,6,7E0from xxxx
                2,select * from xxx where id=8.0union select 1,2,3,4,5,6,7.0from xxxx
                3,select * from xxx where id=8\Nunion select 1,2,3,4,5,6,7 \Nfrom xxx

0x08 利用不常用报错函数绕过

        原理:mysql的函数非常多,不同的函数有不同的功能,但是有一些对于我们渗透测试获取数据是很有用的但是又是用的很少的函数,WAF可能因为规则的不全木有录入进去导致绕过。
        例子:
                1,select extractvalue(1, concat(1,user() ));
                2,select updatexml(1, concat(1,user() ),1);
                3,select exp(~(select * from(select user())a))
        这里我就列举三种因为其他的大部分都需要 select * from xxx  我都可以这样操作了何必还那么麻烦呢?所以这里就列举了这3个比较实用的。

0x09 实例1-绕过网站安全狗(Apache版)4.0.18089进行注入

0x09 实例2-绕过云锁win_3.1.6版进行注入(针对GET请求)-

针对POST请求的请看文章-web渗透测试中WAF绕过讲解(二)基于HTTP协议绕过

0x10 实例3-绕过360网站卫士获取数据(一次很失败的绕过)

        这个方法用于大家找到了网站的注入但是又证明不了时使用,只能出 user() 数据来证明这是一个漏洞。

最终user用户名称:cloud_checker@10.205.121.21

0x11 总结

        研究WAF的绕过手段,是为了我更好的学习网络安全,也是为了明年转型为一个专业的安全研究人员的一个准备,在研究突破的过程中,不应该停留在简单的绕过正则表达式,HTTP协议理解,MySql词法分析,Fuzz的思路,都是很有趣,很需要学习的,在学习绕过WAF的过程中各方面的能力也会得到很大的提升。我希望看我文章的人,不是为了拿我文章中分享的绕过姿势拿完就走,我希望我的读者是为了学习思路才来看我的文章,我可以绕过第一次就可以绕过第二次第三次,可是如果你们不能学习到我文章教的东西,那么你们就只能来我这拿第一次第二次第三次,假如有一天我不发了,你又不学东西,那么你怎么办呢?在次希望看我文章的读者可以学到一些东西,那怕是一点点那也证明了我的文章是有价值的。
        emmmmmmmm~~~你愿意与我一起前行么?

转载请获取作者同意再进行转载谢谢  :  )

显示全文