SQL注入-宽字节注入

本文介绍了宽字节注入原理,通过GBK编码解释和SQL转义函数Addslashes的工作机制,以及如何利用%df绕过转义,进行字符型注入、联合查询,包括猜列数、判断回显位和数据库/表名查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

宽字节注入原理

一个GBK汉字占两个字节,每个字节有自己的取值范围,如果设置GBK编码后,遇到连续两个字节,都符合GBK取值范围,会自动解析为一个汉字。Addslashes函数防止sql注入,将传入参数值进行转义。例如将 '转义为 \' ,这样我们在注入的时候闭合单引号就会变成 id='1\',这样会导致闭合失败从而注入失败。

绕过方式:

输入%df'(%27),本来会转义'\' ,但 \ (%5c)遇上%df,两者会合起来被解析成一个汉字(),这样变成 id='1運',在MYSQL中效果等同于 id= '1'(隐式类型转换) ,因而成功绕过。

注入过程

1.判断是否存在漏洞

这里注入时不管是正确还是错误语句页面都回显数据,我初步判断存在漏洞且可能是字符型

2.判断注入类型

这里提示我们输入的变成了1\','被转义为了\',被转义后数据库不会认为他是单引号的作用,而将其视为一个普通字符,就起不到引起单引号缺失的作用。

这时我们为了使其回复单引号的作用我们就可以使用%df让其和转以后得\组成%df%5c也就是我们的運这个繁体字。当然不一定要使用%df,只要是能和%5c组成一个字使其失去转义功能就可以。

引起了单引号报错,确定了存在单引号闭合这个,我们就可以继续后续查询,在一开始输入id=1时页面可以回显数据,那么我就可以使用联合注入的步骤来继续后续查询。

3.联合查询

3.1猜列数

最后猜中是3列

3.2判断回显位

2,3位是回显位

3.3查询数据库名

security

3.4查询表名

在查询表名时,发现出现了报错,查看报错发现table_schema='security'的两个单引号也被转义了,那么我们就换一种方式表达数据库名,可以用ascii码值表示

我们使用工具转换,将16进制的替换上去,就查询了表名

后续查询举一反三即可,分享就到这里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

dkk11

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

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

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

打赏作者

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

抵扣说明:

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

余额充值