webug宽字节注入

GBK是一种多字符编码,一个汉字占2个字节,utf-8编码的汉字占3个字节。
addslashes() 函数会对括号里 (’) 、(")、 ()、 (NULL)、的四个字符添加反斜杠并将其返回。
Mysql有一个特性,在进行GBK编码时会将两个字符认为一个汉字(前提是第一个字符的ASCII大于128才能达到汉字范围)。
如果SQL输入经过了addslashes() 函数处理,我们输入’ 时 会变成 \’。一般绕过的方法有两种

  1. 将 ’ 前面的 斜杠 进行转义 \’ 这样单引号就能绕过,逃逸出来
  2. 想办法去掉前面的\
    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=縗’,有了单引号就好注入了。

宽字节注入原理即是利用编码转换,将服务器端强制添加的本来用于转义的\符号吃掉,从而能使攻击者输入的引号起到闭合作用,以至于可以进行SQL注入。

利用%df’进行注入
webug宽字节注入
后面的步骤类似于显错注入
http://192.168.199.143/control/sqlinject/width_byte_injection.php?id=1%df%27%20union%20select%201,2%20%23
webug宽字节注入
查询所有数据库
http://192.168.199.143/control/sqlinject/width_byte_injection.php?id=1%df%27union%20select%201,group_concat(schema_name)%20from%20information_schema.SCHEMATA%20%23
webug宽字节注入