宽字节注入原理

宽字节注入原理分析_1stPeak's Blog-CSDN博客_宽字节注入原理

原理: mysql在使用GBK编码的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)

php的魔术引号(magic_quotes_gpc)开启,会在特殊字符(比如 ' , " , \ , null)前面加 \ ,导致闭合失败。

\ 作用:mysql中\后面接的字符代表本身字符的意思,比如 \%

SELECT txt1 FROM T1 WHERE txt1 LIKE '_a\%' //本身%代表通配符,但是前面加了\,%代表要找的是a%这个字符串

补充:PHP5.4.0及其之后PHP版本取消了魔术引号,之后转义都需要加上addslashes函数 (stripslashes删除反斜杠\)

           魔术引号: 总结3:PHP中的魔术引号_hyh1123176978的博客-CSDN博客

实例:

sqli-32:   
http://127.0.0.1/sqli/Less-32/?id=-1%df' union select 1,database(),3 --+

(记住union前面语句要错的,虽然这里我不知道id=1%df'为什么不行,我觉得转义之后为1运,应该不会找到id=1了吧,如果有大佬解答的话就多谢啦)

防御:

宽字节注入原理分析_1stPeak's Blog-CSDN博客_宽字节注入原理

客户端-连接层-服务器各自字符集名称:

 转换场景:

(1)在PHP中使用mysql_query(“set names GBK”),3个字符集都为gbk,

%df%27=====(addslashes)======>%df%5c%27======(GBK)======>運’

(2)都为utf-8,但是url直接传入gbk编码

%e5%5c%27====(addslashes)====>e55c5c5c27====(iconv)====>e98ca65c5c27

防御方法:缺一不可 
(1)使用mysql_set_charset(GBK)指定字符集 
(2)使用mysql_real_escape_string进行转义 
原理:mysql_real_escape_string与addslashes的不同之处在于其会考虑mysql_set_charset(GBK)指定的字符集,不会出现前面df和5c拼接为一个宽字节的问题

感谢本文章的链接的作者,侵权私我必删

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值