宽字节注入是sql注入的一种手段,利用mysql使用GBK编码(因为GBK占用2个字节,而ascii占用1个字节),将两个字符看作一个汉字,从而消除转义字符\。(当某字符的大小为一个字节时,称其字符为窄字节当某字符的大小为两个字节时,称其字符为宽字节。所有英文默认占一个字节,汉字占两个字节。)
以下是个人总结对%df的理解
为什么使用%df
不一定使用%df,但前一个字节ascii码要大于128才到汉字的范围。
为什么那么多人都用%df
and被php转义后就是%df
逃逸过程
php.ini中有一个get_magic_quotes_gpc功能,在开启时所有的 ' (单引号), " (双引号), \ (反斜线) and 空字符会自动加上转义符\。
以'单引号为例,如何使\'中的'逃逸出来:
?id=1%df' and 1=1--+
%df'=>%df\'(单引号会被加上转义字符\)
%df\'=>%df%5c'(\的十六进制为%5c)
%df%5c'=>縗'(GBK编码时会认为这时一个宽字节)
'成功逃逸,sql语法正确
sqlmap中同时也存在宽字节绕过的脚本unmagicquotes.py,使用方式如下
sqlmap -u "ip" --tamper="unmagicquotes.py" --batch
来源地址:https://blog.csdn.net/qq_18980147/article/details/127502369