宽字节注入-专门针对GBK编码字符的使用
GBK:GBK全称《汉字内码扩展规范》(GBK即“国标”、“扩展”汉语拼音的第一个字母,英文名称:Chinese Internal Code Specification)
在注入过程中需要敏感注意到的字符
字符 | URL转码 |
---|---|
空格 | %20 |
'(单引号) | %27 |
# | %23 |
\ | %5C |
例:addslashes函数
(php4,php5,php 7) // 应用的版本
addslashes - 使用反斜线引用字符串
说明:
String addslashes (string $str)
返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。
这些字符是单引号(')、双引号(") 、反斜线(\)、与NUL (NULL字符)
如何从addslashes函数逃逸出来
1.\前面加一个 \ (或单数个),变成 \’,变成 \’ ,这样 \被转义了, ’ 逃出了限制
原理:
宽字节注入是利用mysql的一个特性,mysql在使用GBK编码的时候会认为两个字符是一个汉字(前一个ascii码要大于128,才能达到汉字的范围)
比如:
’ 经过addslashes后就变成了 \’ , GBK编码后 %5C%27
%df 经过addslashes后就变成了 %df\,GBK编码后 %df%5C%27,它就会把%df和%5C拼接在一起,认为是一个汉字,’ 就能逃出限制
2.把 \ 弄没