一、宽字节概率
1、单字节字符集:所有的字符都使用一个字节来表示,比如 ASCII编码(0-127)
2、多字节字符集:在多字节字符集中,一部分字符用多个字节来表示,另一部分字符(可能没有)用
单个字节来表示。
3、宽字节注入是利用mysql的一个特性,使用GBK编码的时候,会认为两个字符是一个汉字
4、PHP中编码为GBK,函数执行添加的是ASCI编码,MYSOL默认字符集是GBK等
二、php中的宽字节
addslashes()函数
1、addslashes()函数返回在预定义字符之前添加反斜杠的字符串。
2、预定义字符:单引号(),双引号("),反斜杠(\),NULL
3、实例
<?php
$ss=addslashes('aiyou"bu"cuoo”)
echo($ss);
?>
运行结果:aiyou\"bu\"cuoo
三、宽字节注入原理
1、%DF':会被PHP当中的addslashes函数转义为“%DF\’",\在URL里是“%5C”,那么也就是说,“%DF'"会被转成“%DF%5C%27,倘若网站的字符集是GBK,MYSOL使用的编码也是GBK的话,就会认为“%DF%5C%27"是一个宽字符
2、数据库使用的是GBK编码,PHP编码为UTF8就可能出现宽字节注入,原因是为了防止发生SQL注入,会调用上面所介绍的几种函数,将单引号或双引号转义操作,在单或双引号前加斜杠(\)。当数据库使用的宽字节编码会将两个连在一起的字符被当做是一个汉字,而在PHP使用的UF8编码则认为是两个独立的字符
四、演示操作(sqlilabs less-33)
sqlilabs.com/Less-33/?id=-1%df' union select 1,2,3 --+
出现%df' 像这种http请求的话一定是注入攻击请求,而且是宽字节注入