sql注入_1-8_宽字节注入

一.sql_宽字节注入概念

1.了解宽字节注入前,必须先了解字符集编码:点击这里

2.gbk占用两个字节,ascll占用一个字节,php编码为gbk,
函数执行添加的是ascll编码,
mysql默认字符集是gbk等宽字节字符集

%DF’ :会被PHP当中的addslashes函数转意%DF\’,"\" 既是url中的"%5C", 也就会被转成"%DF%5C%27",如果网站的字符集是GBK,mysql也是gbk,就认为%DF%5C%27是一个宽字节,也就是"縗"

我们理清一下思路

<1>.既然被addslashes函数转意,多了一个,所以我们就要想办法去掉他,或者让他无法转义’
.<2>mysql使用gbk编码时,两个字符是一个汉字(也就是一个汉字占2个字节)

<3>.当我们使用%DF’ 时,就变为了%DF%5C%27,而%DF%5C,刚好是两个字符,这两个字符合起来也就变成了中文"縗",此时我们发现我们就逃出了\ ,所以我们就可以进行探测了


3.最常用的宽字节注入利用%df,只要ascii码大于128就可以了,比如ASCII码为129(十进制)转化为十六进制,
gbk首字母对应0x81-0xFE ,尾部对应0x40-0xFE(除了0x7F)
所以只要在这个范围都可以,比如0xbf 一样可以,也就是%bf’

二.sql_宽字节注入源码分析

1.介绍两个函数
这里是借鉴大佬的总结

addslashes()函数,这个函数在遇到意前,添加反斜杠\,
预定义:单引号’ 、双引号"、反斜杠\、和空值,这个函数有一个特点,虽然加\转义,但是\并不会插入数据库中, 这个函数的功能和魔术引号完全相同,当打开了魔术引号时,不应该使用这个函数。

mysql_real_escape_string()函数,这个函数用来转义sql语句中的特殊字符x00 ,\n,\r,,等

魔术引号:当打开时,所有的单引号’、双引号"、反斜杠\ 和 NULL 字符都会被自动加上一个反斜线来进行转义,这个和 addslashes()函数的作用完全相同。所以,如果魔术引号打开了,就不要使用addslashes()函数了。一共有三个魔术引号指令。

magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。不能在运行时改变。在 PHP 中默认值为 on。

参见 get_magic_quotes_gpc()。 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。

参见 set_magic_quotes_runtime() get_magic_quotes_runtime()。 magic_quotes_sybase 如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 ‘’。而双引号、反斜线 和 NULL 字符将不会进行转义。 如何取得其值参见 ini_get()

2.看看 less-33 源码
1.使用了addslashes函数过滤
2.使用了gbk编码
3.传入sql语句
在这里插入图片描述
3.看看less-32源码
可以看到转义了固定字符

问题来了,当程序员使用了gbk编码时,并且过滤不全面时,是很有可能被绕过的,所以最好使用预编译来防御,
好,既然我们看了源码,我们往下测试less-33,less-32
在这里插入图片描述

三.sql_宽字节注入演示

打开less-33
输入?id=1’
看看语句,发现和我们学的概念一模一样
因为addslashes函数,而多了个\

在这里插入图片描述
想办法去掉他,
使用%df’
在url中就变为了%DF%5C%27
所以两个字节算一个汉字,所以就变成了 縗’
就绕过了
就报错了
所以应该存在宽字节注入

在这里插入图片描述
在这里插入图片描述

我们使用–+闭合
返回正常
因此,更加证明存在宽字节注入
在这里插入图片描述
在这里插入图片描述
使用order by 推测字段,3时返回正常,所以存在3个字段
在这里插入图片描述
使用union select 联合查询语句,爆出存在注入的字段
在这里插入图片描述
在这里插入图片描述
加入database()
可以看到数据库名就出来了
接下就可以继续探测了,具体 就不写了

在这里插入图片描述

我们打开less-32
使用其他gbk编码范围的探测
一样报错
说明可能存在宽字节注入

在这里插入图片描述
在这里插入图片描述
–+闭合
正常
再次证明存在
接着就可以使用其他sql语句探测了

在这里插入图片描述
在这里插入图片描述

四.sql_宽字节注入总结

1.当发现宽字节注入时可以使用sqlmap探测在参数后面加一个%df就可以。
2.宽字节注入的防御,应该使用预编译方法,否则,很有可能被绕过

发布了15 篇原创文章 · 获赞 2 · 访问量 2422

猜你喜欢

转载自blog.csdn.net/weixin_44110913/article/details/103498265