宽字节注入

博客详细介绍了宽字节注入的原理,起因于数据库编码设置与数据传输编码不匹配,导致解码异常。通过靶场演示展示了如何利用宽字节注入进行SQL攻击,并给出了三种解决办法,包括设置charset为binary、使用mysql_set_charset或采用PDO。

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

宽字节注入

漏洞原理

一般程序员用gbk编码做开发的时候,会用 set names 'gbk' 来设定,这句话等同于

set

character_set_connection = ‘gbk’,
character_set_result = ‘gbk’,
character_set_client = ‘gbk’;

漏洞发生的原因是执行了 set character_set_client = 'gbk'; 之后,mysql就会认为客户端传过来的数据是gbk编码的,从而使用gbk去解码,而mysql_real_escape是在解码前执行的。
但是直接用 set names 'gbk' 的话real_escape是不知道设置的数据的编码的,就会加 %5c 。此时server拿到数据解码 就认为提交的字符+%5c是gbk的一个字符,这样就产生漏洞了。

宽字节注入是由于不同编码中中英文所占字符的不同所导致的。
通常来说,在GBK编码当中,一个汉字占用2个字节。而UTF-8编码中,一个汉字占用3个字节。
在一般的sql注入时,参数id=1在数据库查询时是被单引号包围的。当传入id=1’时,传入的单引号又被转义符(反斜线)转义,导致参数ID无法逃逸单引号的包围,所以在一般情况下,此处是不存在sql注入漏洞的。
不过有个特例,就是当数据库的编码是GBK时,可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

carefree798

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

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

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

打赏作者

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

抵扣说明:

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

余额充值