主题
sql注入系列:宽字节注入
原理
mysql 在使用 GBK 编码的时候, 会认为两个字符为一个汉字, 例如
%aa%5c
就是一个汉字(前一个 ascii 码大于 128 才能到汉字的范围) 。
我们在过滤 ’
的时候, 往往利用的思路是将 ‘
转换为 \’
因此我们在此想办法将 ‘
前面添加的 \
除掉, 一般有两种思路:
1、 %df
吃掉 \
具体的原因是 urlencode(\') = %5c%27
, 我们在%5c%27
前面添加%df
, 形成%df%5c%27
, 而上面提到的 mysql 在 GBK 编码方式的时候会将两个字节当做一个汉字。
此时%df%5c
就是一个汉字, %27
则作为一个单独的符号在外面,同时也就进行了闭合。
2、 将 \'
中的 \
过滤掉, 例如可以构造 %**%5c%5c%27
的情况, 后面的%5c
会被前面的%5c
给注释掉。
这也是 bypass 的一种方法。
%df%27
浏览器url自动解码⏩ β\'
转为16进制⏩ 0xdf0x5c0x27
转换为url编码⏩ %df%5c%27
进行url解码(因为是GBK编码,%df
和%5c
结合为汉字)⏩ 運'
我们以墨者学院靶场为例
由于'
会被转码为\'
放到数据库 %27\
会被转换 而'
会留下 编程了 '-1運'
造成闭合之后我们就可以执行命令,而且在要注意一个点就是table_name这里的单引号也会被转义,于是我们直接给他转成16进制,数据库会自动给我们将16进制转换为字符串
得到最终结果
https://mp.weixin.qq.com/s/tAG-r-zpdY8F-7gikTYNFQ
标签:27,字节,sql,汉字,5c%,MYSQL,df%,5c,注入 From: https://www.cnblogs.com/o-O-oO/p/18353582