宽字节注入

条件
  • 使用addslashes函数或是开启PHP的GPC
  • 数据库设置编码为GBK php utf-8
原理
前端输入%df%27时首先经过上面的addslashes函数转义变成了%df%5c%27(%5c是反斜杠\),之后载数据查询前应为设置了GBK编码,即是在汉字编码范围内两个字节都会重新编码为一个汉字,然后MySQL服务器就会对查询语句进行GBK编码即是%df%5c转换成了汉字“運”,而单引号就逃逸了出来,从而造成SQL注入
 
 
可以看到,我们绕过了对于 ’ 的过滤。接下来从源代码进行考虑:
 
上述函数为过滤 ‘ \ 的函数,将 ‘ 转为 \’ , 将 \ 转为 \\ ,将 “ 转为 \”。因此
此处我们只能考虑 background 中的第一个思路,添加一个%df 后,将%5c 吃掉即可。
从 input HEX 中可以看到df5c27 ,此处已经将 df5c 看成是一个字符了。
 
posted @ 2020-06-26 16:14  N_schema  阅读(178)  评论(0编辑  收藏  举报