主页 > 网络知识 > 突破正则匹配:探寻SQL注入绕过WAF的本源之道

突破正则匹配:探寻SQL注入绕过WAF的本源之道

前言:网络上SQL注入绕过WAF的帖子文章纷繁多样,良莠不齐,眉毛胡子一把抓,各种姿势让人眼花缭乱。于是,便有学生问我,SQL注入绕过WAF的最本质原理是什么…….

0X01 WAF介绍

要从本质上回答SQL注入绕过WAF的原理就首先要了解WAF。WAF(Web Application Firewal,网站应用级入侵防御系统)是对Web网站实施安全防护和负载均衡的主要工具,是大小网站标配之一,应用范围极其广泛。WAF从产品形态上来划分,可以大致分为三类:硬件WAF、软件WAF和云WAF。三种WAF的特点和具体例子如图所示:

突破正则匹配:探寻SQL注入绕过WAF的本源之道

目前,几乎所有的WAF都可以基于规则来识别过滤SQL注入,这是WAF优点,也是我们能够使用多种姿势绕过WAF的前提保证,而基于规则就直接可以理解为基于正则表达式匹配。为说明这个基础判定条件,我们通过公开资料分析主流WAF的详细参数加以佐证。

 

硬件WAF:从下图可以看出,绿盟硬件WAF中明确指出,多种基于规则的检测基于规则防护来对抗SQL注入,表明硬件WAF采用正则表达式来过滤SQL注入。

突破正则匹配:探寻SQL注入绕过WAF的本源之道

软件WAF:安全狗作为国内一款低端主流的软件WAF产品,受到众多站长的青睐,其HTTP检测规则中提出防止复杂的and or 方式注入,防止基于时间的注入判断等,这些都表明软件WAF也采用正则表达式过滤SQL注入。

突破正则匹配:探寻SQL注入绕过WAF的本源之道

WAF:腾讯云Web防火墙中对于防止SQL注入的描述是基于AI+规则,说明云WAF在防护SQL注入时依然离不开基于规则的正则匹配。

突破正则匹配:探寻SQL注入绕过WAF的本源之道

因此,WAF使用基于基于规则的防护手段是常态,基于规则就是基于正则匹配,理解了正则表达式有助于我们从原理本质上弄清各种绕过WAF的手段

 

0X02 WAF正则匹配原理

正则表达式(regular expression)是使用单个字符串来描述、匹配一系列符合某种句法规则的字符串,广泛应用于各种编程代码中。例如:匹配8位数字的QQ号码的正则表达式可以写成^d{8}$;匹配1开头11位数字的手机号码可以写成 ^1d{10}$;匹配*号是14~18位的数字可以写成^d{14,18}$。正则表达式虽然是一个非常强大的处理字符工具,但其可读性很差、晦涩难懂。完整的正则表达式由两种字符构成:特殊字符(元字符)和普通字符。这里我们用正则表达式提取URL中的各个组成部分的例子来说明其原理:

突破正则匹配:探寻SQL注入绕过WAF的本源之道

对于网站管理员来说,在用上面的正则表达式获取到URL链接中的参数提后,下一步要做的是继续使用正则表达式分析参数,过滤掉恶意攻击。为此,网站管理员可以先使用这样的正则表达式:

 

"["']s*OR|ANDs*d+=d+"

其中," 是双引号”、'单引号’、=为=号的ASCII编码。这样是正则表达式在忽略大小写的模式下,可以过滤类似’ or 1=1或者’ and 22=22样式的SQL注入测试,这也是上面某狗SQL注入过滤规则之一的“防止简单and or方式注入”。诚然,这样一个正则表达式太过于简单,很容易被攻击者绕过,于是网络管理员使出浑身力气,构建了一个恶意SQL注入的正则表达式库,部分如下所示:

"(OR|AND)(s+?).+?=["'](s+?)["']$"

"(OR|AND)(s+?).+?=(s+?)["']$", "(["'])?(s+?)--(s+?)(["'])?"

".+?=["']*["']s(AND|OR)s.+?=["']["']", ";DROP"

"((')|("))*((')|("))"

"#.+?WHERE.+?SELECT", "--.+?["']","%27%20","/*|*/",";.+?$"

"w*((%27)|('))(s?)((%6F)|(%4F))((%72)|(%52))"

 "w*((%27)|('))(s?)((%6F)|o|(%4F))((%72)|r|(%52))"

"w*((%6F)|(%4F))((%72)|(%52))(s?)((%27)|('))",".+?(%2A).+?$"

".+?(0x3(a|A)).+?$", ".+?information_schema.+?$"

0X03 从正则匹配角度反观WAF绕过手法
说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!