目录

​一、简介​

​1.1、概念:​

​1.2、原理:​

​1.3、转义函数​

​二、注入​

​2.1、利用:​

​使用:​

​原理:​


一、简介

1.1、概念:

单字节字符集: 所有的字符都使用一个字节来表示(ASCII 编码0-127)

多字节字符集: 在多字节字符集中,用多个字节来表示(也有可能一部分用一个字节表示)

宽字符:用多个字节来代表的字符称之为宽字符

字符、字符集 字符(character)是组成字符集(character set)的基本单位。对字符赋予一个数值(encoding)来确定这个字符在该字符集中的位置。

UTF8 由于ASCII表示的字符只有128个,因此网络世界的规范是使用UNICODE编码,但是用ASCII表示的字符使用UNICODE并不高效。因此出现了中间格式字符集,被称为通用转换格式,及UTF(Universal Transformation Format)。

宽字节 GB2312、GBK、GB18030、BIG5、Shift_JIS等这些都是常说的宽字节,实际上只有两字节。宽字节带来的安全问题主要是吃ASCII字符(一字节)的现象,即将两个ascii字符误认为是一个宽字节字符。

1.2、原理:

1、宽字节注入是利用mysql的一个特性

2、PHP发送请求到mysql,mysql在使用GBK编码(GBK是宽字节,双字节)的时候,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)

3、字符和转义的反斜杠组成了新的汉字,但是组成的新汉字又不是一个正常的汉字,就起到了注掉 \ 的作用

4、可以看出来是字符集不一致造成的宽字节注入

1.3、转义函数

addslashes函数

对单引号(’)、双引号(")、反斜线()与x00 (NULL字符)

magic_quotes_gpc函数

判断解析用户提交的数据,有post、get、cookie数据时增加转义字符“\”



二、注入

2.1、利用:

使用:

%df、汉字

原理:

planA

提交%df的数据会被加入\(编码为%5c),在后面加上后变为%df%5c(繁体汉字運),变成了一个有多个字节的字符,避免了后面引号的转义


planB

使用汉字绕过,一个汉字PHP接收后通过UTF-8编码(三字节),并和\两两配对组成两个汉字,避免了后面引号的转义