zoukankan      html  css  js  c++  java
  • sql注入之双查询注入

    双查询注入前需要了解什么是子查询

    子查询可以理解在一个select语句中再插入一个select 里面的select语句就是子查询
    例子:select concat((select database()));
    执行语句时,先从子查询进行, 先执行select database()再把结果传入到concat函数

    双注入查询需要理解几个函数

    1. count():汇总数据函数
    2. rand():随机输出一个小于1的正数
    3. floor():把输出的结果取整
    4. group by语句:把结果分组输出
    5. concat():连接两条语句

    在本地进行测试

    连接数据库后使用security数据库

    select concat((select database()));

    显示security 当前数据库的名字了

    Concat()用法
    Select concat()

    Rand()用法
    Select rand()

    这个函数就是返回大于0小于1的随机数

    Floor()用法
    Select floor(1.534236);

    这个函数就是返回小于等于输入数的整数

    • select floor(rand()*2);
      从里往外看,rand随机一个0-1的数再乘以2传给floor取整 就是说这个语句输出的结果不是0就是1

    • select concat((select database()),floor(rand()2));
      还是从里往外看,select database()显示数据库名,floor(rand()
      2)返回的结果只有0或者1,传给concat进行拼接然后查询显示

    在后面加上from+表名 可以查新到表名中的所有符合的用户

    • select concat((select database()),floor(rand()*2)) from users;

    由于表中用户数据很多,容易产生 很多随机值 所以现在要用group by语句进行分组

    • select concat((select database()),floor(rand()*2))as a from information_schema.tables group by a;

    这句语句的意思就是从information_schema.tables 中查询到的结果拼接后取一个别名a,然后使用它进行分组,这样相同的security0为一组,security1为一组 就只有两个结果了

    其中表可以换成information_schema.columns database()处也可以替换成任意想查询的函数。Eg: version() user() datadir()

    最后呢加入聚合函数count(*)

    • select count(), concat((select database()), floor(rand()2))as a from information_schema.tables group by a;
  • 相关阅读:
    嵌入式linux问题杂锦
    QT creator 调试问题
    torcs代码
    ubuntu12.04安装KDevelop
    ubuntu12.04LTS安装以及卸载 QT4.8.6和QT creator2.5.2
    用vs2010编译vs2013建的工程
    mysql+matlab配置
    流形学习笔记
    可用的rtmp互联网地址
    信用卡术语
  • 原文地址:https://www.cnblogs.com/zjhzjhhh/p/14105863.html
Copyright © 2011-2022 走看看