MySQL注入绕过

本文探讨了如何绕过WAF进行MySQL注入,包括构造闭合、连接字符、空格绕过和关键字绕过的方法。通过举例说明如何使用特殊字符、混淆关键字和等效替代来规避拦截,提升SQL注入的效率和成功率。

本文主要结合本人绕过最近某rasp和一些waf的经验,分享绕过waf的思路,MySQL测试版本(8.0.31)

构造闭合

对于构造闭合,主要是判断一个sql注入能否利用的第一步,只有闭合成功,才能在添加我们自己想执行的sql函数,或者语句。mysql主要存在以下两个方式。

'#
'--+

一个就是逃逸字符,一般为单双引号(某些复杂的sql可能还需要括号等来进行闭合),或者是数字型的注入不需要逃逸字符,第二个就是注释字符,用来闭合后面的原始字符。

如同所示,选择的字符是我们的输入,对前面的的单引号进行了闭合,对后面的单引号进行了注释

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mXu7h2ec-1679646830347)(./MySQL注入绕过.assets/image-20230223170836542.png)]

闭合构造完成之后如果存在一些拦截规则,常规的注入语句是无法获取到数据的,包括sqlmap等,这时就需要我们进行手工注入,下面我为大家介绍一下,我绕waf的一个思路。

连接字符

我把可以直接在字符后面可以紧跟执行着函数的字符称为连接字符,如下

'sleep(1)# -- 执行失败
'-sleep(1)# -- 执行成功

执行失败展示

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-okpMsKuk-1679646830349)(./MySQL注入绕过.assets/image-20230223171044795.png)]

执行成功
在这里插入图片描述

在这里减号就连接了一个函数,我就把这种字符成为连接字符,当然,and,or也算在其中,以下是我总结的一些连接字符

&  >  >=  <  <>  !=  <=  <=>  %  MOD  *  +  -  /  :=  =  ^  |  ~  &&  ||  !   and  or  not  div

以上符号具体对绕waf有什么帮助呢,简单举个例子

and updataxml(..) 	-- 被拦截
^updataxml(..) 		-- 未拦截

and 1=1 -- 被拦截
-1+1 	-- 未拦截
'/1 	-- 未拦截

对此,可以看出,主要存在两个waf绕过的可能,一个是在注入最开始,产生布尔值用于判断sql注入是否真的存在,以及可以通过waf不能正确识别这些字符,绕过检测的可能。

对于加号,减号是一个比较特殊的存在,可进行如下无限叠加,且不会报错。

select-1; -- 正常执行
SELECT------------------1;	-- 正常执行
SELECT+++++++--------1;		-- 正常执行

可以看见确实成功执行了

在这里插入图片描述

空格绕过

空格(%20)在sql注入中有不可或缺的作用,所以单独提出来分享绕过空格的一些姿势

我把空格绕过分为两种绕过,完全替代和部分替代

完全替代

mysql支持一下空白字符,这些字符基本是完全等效于空格的

09 0A 0B 0C 0D A0 20
# 可使用各种常见编码尝试进行绕过 - 这里的编码主要还是得看运行的web容器,中间件等是否会解析该编码
%20
/u0020
/**/
/*!*/

部分替代

主要是一些连接字符,括号,等一些字符,如下

# 一些连接字符,如 + -  等
''
""
`
@
()

具体举例如下

# 均可正常执行
select(1)
select'',1
select-1
select@1
select!1

可以看见均可正常执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l3CixNCW-1679646830353)(./MySQL注入绕过.assets/image-20230223171440018.png)]

为什么要分开,因为在测试过程中,我发现这些字符在一些场景并无法替代空格,下面举例的空格均无法使用这些字符替代,当然可能还存在更多的场景

into outfile
limit 1,1

可以看见均会爆语法错误,从而无法正确执行
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

limit是一个比较特殊的情况,一般关键字+数字这种形式均可用运算符号绕过空格,但是limit不行

正常执行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7I5F7WWX-1679646830355)(./MySQL注入绕过.assets/image-20230223171845619.png)]

减号报错,加号当然同样报错

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AepgNIES-1679646830356)(./MySQL注入绕过.assets/image-20230223171914104.png)]

甚至括号都不行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xdTyffuu-1679646830357)(./MySQL注入绕过.assets/image-20230223172002182.png)]

关键字绕过

关键字绕过我主要分为两种思考方向,混淆绕过和等效替代,通过union select的绕过来对两种思考方向进行一个举例

假设存在一个waf,union select被进行的拦截,但是空格并未被拦截,或者我们以及找到替代,还是会被拦截的情况,

混淆绕过

union all select -- 利用官方语法混淆
/*大量脏数据*/union select
UniOn Select -- 大小写
union(select)
union%0dselect

举个具体例子

在这里直接使用union select被拦截

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y9mZg5Qi-1679646830383)(./MySQL注入绕过.assets/image-20230223172229889.png)]

但是如果使用 union DISTINCT select就成功绕过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hJHskoyj-1679646830384)(./MySQL注入绕过.assets/image-20230223172350103.png)]

该网站后面还对infromation_schema.tables进行过滤,导致无法读表名,最后通过脏数据成功绕过

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IvtnsHna-1679646830395)(./MySQL注入绕过.assets/image-20230223173224141.png)]

成功读取数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w3sr43HB-1679646830397)(./MySQL注入绕过.assets/image-20230223173253312.png)]

等效替代

-- mysql 8.0.19 之后可用table和values关键字
-- 具体使用可参考该文章 https://xz.aliyun.com/t/8646
union table
union vaules

之所以我会把两种分开,其实主要是在对关键字绕过的时候的思考方向分为两种,

一种是对union select的混淆,但本质上还是执行了union select语句,只是我们做了各种绕waf不能正常识别我们的union select

另一种则是找到一些能在一些效能上部分或完全替代该union select关键字的作用,从而进一步进行注入

该实例是某rasp绕过测试,不太好直接放出payload,简单说明一下,该手段主要是通过,tables 读取flag从而可直接盲注出flag,具体注入手段可参考上面给出的参考连接,具体的注入手法相同。

总结

本文其实主要是结合我绕过waf的经验,以及这次某rasp绕过的思路总结,对waf绕过整理出一个清晰的思路,而不是没次都漫无目的的尝试,毫无逻辑可言,把思路整理清楚后,我发现对整个绕过的理解,以及速度都有到达的一个新的台阶,故整理出来和大家进行分享,如有不足支持,欢迎指出。

该实例是某rasp绕过测试,不太好直接放出payload,简单说明一下,该手段主要是通过,tables 读取flag从而可直接盲注出flag,具体注入手段可参考上面给出的参考连接,具体的注入手法相同。

总结

本文其实主要是结合我绕过waf的经验,以及这次某rasp绕过的思路总结,对waf绕过整理出一个清晰的思路,而不是没次都漫无目的的尝试,毫无逻辑可言,把思路整理清楚后,我发现对整个绕过的理解,以及速度都有到达的一个新的台阶,故整理出来和大家进行分享,如有不足支持,欢迎指出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值