union 联合注入,以及SQL注入

一定义:将多条查询语句的结果合并为一个结果,union注入为一种手动测试

常用的系统库:information_schema(mysql5.0版本以后自带的数据库,我们注入的账号能够读取该库,则可以进行脱库)。 tables 表

     table_schema:保存所有库名的列

     table_name:保存所有表名的列

 columns 表

     table_name:保存所有表名的列

     column_name:保存所有列名的列

、使用条件

  • 页面对不同的查询语句有不同的回显结果
  • 根据每一步的返回结果判断和进行下一步操作

、基本流程

0)判断是否具有sql注入条件
1)判断sql注入漏洞是否存在及类型

是否有漏洞:1  or  1 =1

主要注入类型

Ps1:按照数据类型分类
1.数字型  1 or 1=1
2.字符型  1 or 1=1#
3.搜索型  
Ps2:按照提交方式分类
1.GET型
2.POST型
3.Cookie型
4. Http请求头注入
Ps3:按照执行效果分类
1.报错注入
2.联合查询盲注
3.盲注
4. 堆查询注入

  1. 判断sql查询字段数?id=1’ order by 4 -- -

判断列数的原因:

    限制因素:union函数进行联合查询的条件:union前面查询语句查询的 元素需要和后面拼接的查询语句查询元素数量一致

order by能够判断列数的原因:order by 即对查询的数据进行分组排序,分 组排序依据为查询内容的属性,如若前面查询内容总属性为3,如果我 们输入order by 4,后端代码执行时就会回显错误信息给前端页面,由此 我们就能判断sql语句查询的属性列数。
3)判断回显点?id=-1’ union select 1,2,3 -- -

方法:利用联合函数 union 来查询回显的显示位:
目的:后端代码可能查询n个字段位数,但是显示给前端的只有m个字段位 数(m<n),攻击者需要确定哪些位是能看到回显信息的,不然攻击时获取 关键信息就很难受
4) 爆库名?id=-1' union select 1,2,version() -- -/?id=-1' union select 1,2,database() -- -

方法:联合利用数据库内置函数对数据库进行sql注入:此处利用了两个内 置函数
version()函数:获取当前数据库版本信息
database()函数:获取当前数据库名

注意:通过此步可以判断数据库是否具有information_schema基本架构库:mysql5.0以上版本特有,5.0以下版本没有
5) 爆数据库表名、数据库属性字段列名、关键敏感数据信息

information_schema 库爆库语句:

union select group_concat(schema_name);涉及schemata表

information_schema 库爆表语句:

union select group_concat(table_name);涉及tables表:包含table_shema(数 据库名)、table_name(数据表名)字段

information_schema 库爆属性字段语句:

union select group_concat(column_name);涉及columns表:包含table_schema、 table_name、column_name(属性字段名)字段

?id=-1' union select 1,2,group_concat(table_name) from

information_schema.tables where table_schema='security' -- -

爆出security数据库所有表名,并通过group_concat()函数将查询到的表名组合在一起并输出为一条数据

?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='库名' and table_name='user' -- -爆出security数据库所有表名以及users表属性字段列名

?id=-1' union select 1,2,group_concat(username,'--',password) from security.users -- -爆出关键敏感数据信息

四.按最初的流程开始

数字型

1.加单引号,如输入1’,对应的sql为:select * from table where id=1’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常。

2.加and 1=1,如输入1 and 1=1,对应的sql:select * from table where id=1’ and 1=1 没有语法错误且逻辑判断为正确,所以返回正常。

3.加and 1=2,如输入1 and 1=2,对应的sql:select * from table where id=1 and 1=2 没有语法错误但是逻辑判断为假,所以返回错误。

若满足上述步骤,则注入类型为数字型

字符型:

1.加单引号,对应的sql语句由于加单引号后变成三个单引号,则无法执行,程序会报错;

2.输入x’ and ‘1’='1,对应的Sql 语句:select * from table where id = ‘x’ and ‘1’=‘1’,语法正确,逻辑判断正确,所以返回正确。

3.输入x’and ‘1’='2,对应的Sql 语句:select * from where id = ‘x’ and ‘1’=‘2’,

语法正确,但逻辑判断错误,所以返回正确。

若满足上述步骤,则注入类型为字符型。

出处:SQL注入学习之union联合查询注入_union select 注入-CSDN博客

https://blog.csdn.net/spongbob1/article/details/109960680

  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值