宽字节注入1

宽字节注入原理

GBK 占用两字节,即一个符号占用两个字节

ASCII占用一字节

PHP中编码为GBK,函数执行添加的是ASCII编码(添加的符号为“\”),MYSQL默认字符集是GBK等宽字节字符集。

大家都知道%df’ 被PHP转义(开启GPC、用addslashes函数,或者icov等),单引号被加上反斜杠\,变成了 %df\’,其中\的十六进制是 %5C ,那么现在 %df\’ =%df%5c%27,如果程序的默认字符集是GBK等宽字节字符集,则MySQL用GBK的编码时,会认为 %df%5c 是一个宽字符,也就是縗,也就是说:%df\’ = %df%5c%27=縗’,有了单引号就好注入了。

%df%5c各站一个字节,合起来就是两个字节
因为又是GBK编码
所以就把这两个字节合并为縗

代码分析

对于第一个函数check输入并没有进行过滤
而是直接用
倒数第四行表示使用的是GBK编码
宽字节注入1_第1张图片
请看倒数第四行
id=’ ’
你输入id=1%df’
%df后一个引号闭合了前一个引号,这就是你之前学的
那为啥要多此一举呢?
不直接id=1’ union select啥啥
因为php有个转义函数
你输入5’后的引号会被变为’
即多出了一个斜杠,所以就不能直接用上述id=5’ union select
所以需要id=1%df’ union select 1,user(),version() --+

Sqlmap安全测试

–search获取数据库名表名字段名

你可能感兴趣的:(SQL,injection)