SQL注入之宽字节注入

宽字节注入:

宽子节注入只有在,服务器页面代码中使用了gbk编码等汉字编码方式时才有效。

通常,当页面源代码中使用了 addslashes( )函数对用户输入的参数进行过滤,并且使用的是字符串查询的方式时,单引号被转义,无法绕过。那么前面我们介绍的几种SQL注入方式就都不能用了。

但是如果这种情况下如果页面使用的不是utf-8之类的编码方式,而用的是汉字编码方式gbk等,我们就可以使用宽子节注入。

addslashes() 函数

函数返回在预定义字符之前添加反斜杠的字符串
预定义字符:
单引号(')
双引号(")
反斜杠()
NULL

宽字节注入原理

mysql_query(“SET NAMES ‘gbk’”,$conn)语句将数据库编码字符集修改为 GBK格式。此时,%df对应的编码就是 %df%5c,即汉字“ 運‘”,这样 单引号之前的转义符号“”就被吃掉了,单引号就逃逸出来,从而转义失败。

通常我们在做测试时,只要加上在预定义字符前%df就可以了(其他字符也可以,只要拼在一起可以组成一个汉字就行,具体可以参考GBK编码GBK表

以sqli-labs的第32关为例:

输入?id=1,加一个单引号,下面的提示信息:单引号前面加了一个反斜杠转义单引号,

1.png

在单引号之前加%df ,再看:

2.png

我把浏览器的字符编码改成简体中文:

3.png

发现变成了一个汉字,因为%df‘对应的编码就是 %df%5c’,即汉字“ 運‘ ”,这样 单引号之前的转义符号“”就被吃掉了,单引号就逃逸出来,从而转义失败。

4.png

标签: none

添加新评论