目录
宽字节注入
编码区分
原理
函数
转译符号解释
注意
绕过方式详解
堆叠【Stack】注入攻击
注入语句
宽字节注入
- 在说宽字节注入之前 我们需要知道编码相关的知识点,这个有助于搞定什么是宽字节注入
- 分清楚是ascii码是什么
- 宽字节注入代码里面加入了addslashes()转移 拼接
编码区分
Ascii英文单词符号对应成数字没有涵盖中文 1个单词一个字节 8位二进制计算机保存二进制 数据映射到计算机种类。
Unicode 万国码统计编码表 统一4个字节 Unicode可变长度的gbk2312
升级gbk 一个中文2个字节 【十进制 十六进制 八进制】都兼容的编码 可便长度编码
utf-8 英文一个字节 一个中文3个字节 其他国家可变字节 兼容性就更加号
存任何语言节约空间,utf就不会出现什么问题。
url编码 百分号编码 % 百分号跟的 0x16进制数字 === ascii码
原理
-
有些网站在注入的时候 做了防护措施
-
措施就是反斜杠转义 绕不过编码 宽字节转移
-
%2F 反斜杠
-
-
函数
-
addslashes和mysql_real_escape_string 函数
转译符号解释
他们转义的字符是单引号(')、双引号(")、反斜线()与NUL(NULL 字符)
转义的方式就是在这些符号前面自动加上 \ ,
让这些符号的意义失效,或者可以理解为被注释掉了
引号转义 防范的 \'
不能返回 数字型的不需要加斜杠的
sql">// "select id,email from member where username='xx\' or 1=1 #'"
绕过这种方式就是宽字节注入【GBK】反斜杠16进制编码 反斜杠0x5c
sql">%5C GBK 反斜杠
0x5c ascii对应16进制
%23 # 0X23
-
\编码为%5C,我们一般在地址后添加%df。
-
URL编码 %27 单引号
-
16进制 ascii对应16进制 0x27
-
-
%5C GBK 反斜杠加一个df 吃一个反斜杠 吃成一个汉字
-
0x5c ascii对应16进制
-
注意
项目必须是GBK编码
sql">"select id,email from member where username='xx0xdf0x5c' or 1=1 #'"
注入语句: xx0xdf0x5c' or 1=1 # 宽字节注入必须是GBK编码
-
但是URL编码就不行 使用gbk编码 使用ascii 16进制编码
绕过方式详解
-
斜杠不能转移 我们将斜杠转化成一个汉字,那么斜杠就没意义了 只要开启了反斜杠转移的情况下 使用了gbk连接数据库的情况下
-
使用%df吃掉%5c 合成一个汉字让斜杠失去意义,那么单引号闭合就可以使用了
sql">ss%df%5C' or 1=1 #
xx0xdf0x5C' or 1=1 #
- 添加后\变成了汉字,这样就绕过了。之后就和前面的一样了
- 当然,还有双引号等,除了GBK还有GB2312等编码,有兴趣的可以整理一下所有的。
堆叠【Stack】注入攻击
-
堆叠注入可执行多条语句 多语句之间以分号隔开。
-
堆叠注入成功必须需要需要一个条件才能成功
-
分号后面的内容将不会被执行,所以可以说堆叠注入的使用条件十分有限,一旦能够被使用,将对数据安全造成重大威胁。
-
注入语句
sql"> ?id=1;create table test like users --+