宽字节注入
前言如何解决 注入时 输入的 '(单引号) 被转义成 \'(反斜杠+单引号) 首先我们来看一下sql注入中遇到的问题 遇到这种情况,说明单引号在插入时被转义了,那么如何去bypass? 使用宽字节注入,把单引号前的\给消除掉,这样就可以正常使用单引号去闭合了 这里使用的方法是在单引号前面加上**%df**。 关于为什么要加上%df就可以宽字节注入了呢?请听我娓娓道来~ 单引号前被插入了 \ 说明php源码代码中出现了以下函数,那么首先我们要了解一下这些函数。 PHP转义函数 addslashes, mysql_real_escape_string, mysql_escape_string 宽字节注入条件: 使用addslashes函数 (并且开启GPC) 数据库编码设置为GBK (php编码为 utf-8 或其它非GBK格式) 宽字节注入流程: 正常被转义: ‘ –> \‘ (单引号 -> 反斜杠+单引号) 加%df 宽字节注入过滤: %df’ –> %df%27% –> %df%5c%27 –> 運’ 浏览器输入 –> url编码 –> addslashes转义 –> %df%5c被转义成汉字 運 宽字节注入原理: %df%5c 为什么会被转义成为汉字 運 呢? %df’经过addslashes编码之后带入了‘\’ %df’ 就变成了 %df' –> %df%5c%27 (url编码后) %df%5c%27 在带入到mysql时使用了GBK,%df%5c被转译成汉字運 so最后输出结果为 運' 讲到GBK编码转义 为什么%df%5c%27 只转义%5c而不转义%27 呢? GBK编码,它的编码范围是0x8140~0xFEFE(不包括xx7F), 在遇到 %df(ascii(223)) > ascii(128) 时自动拼接%5c, 因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了。 ...