条件
- 使用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 当作是一个字符了。