白帽子:SQL注入之双查询注入
什么是双查询注入呢?
看大佬的解释太深奥 , 粗俗的理解就是一个select语句里再嵌套一个select语句 , 将有用的信息显示在SQL的报错信息 。
首先,理解四个函数/语句:Concat(),Rand(), Floor(), Count(),Group by clause
①concat()函数
我理解为组合 , 汇合函数将括号里的符号连接在一起 。
文章插图
将结果连在了一起 。
文章插图
②Rand函数
用来返回一个01之间的随机数 , 区间表示就是【0,1) 。 括号里为空时 , 随机产生数 。
文章插图
当括号里的参数固定时 , 随机数(随机数列)也是固定的 。
文章插图
让我们看一下随机数列
select rand(3) from information_schema.columns limit 3;产生三列随机数 。
文章插图
对比一下还是不变 。
③Floor()函数
Floor()函数时取整函数 , 当输入一个非整数 , 返回小于等于输入参数的最大整数 。
文章插图
④count()函数
用于统计行数 。
文章插图
⑤group by 语句
先看这句:
select table_schema, table_name from information_schema.tables;
文章插图
加上group by语句后:
select table_schema, table_name from information_schema.tables by table_schema;
文章插图
【白帽子:SQL注入之双查询注入】加上之后 , 数据明显少了很多的重复的 。 重复的数据库只显示一个 , 并且只显示数据库里的第一张表 。
几个函数灵活运用 , 会有什么不异想不到的结果呢?
我们实践一下
①rand()函数和floor()函数结合使用 。
select floor(rand(5)*12) from information_schema.columns limit 5;
文章插图
由内到外逐个分析 , rand(5)会随机产生5个不同的值 , 但是*12 , 就是将【0 , 1)扩大到【0 , 12) , floor函数就是取整了 。
②count()函数和group by语句
select table_schema, count(*) from information_schema.tables group by table_schema;
文章插图
他们的组合就是统计了每个数据库里有多少张表 。
其原理就是:Mysql会建立一张临时表 , 有group_key和tally两个字段 , 其中group_key设置了UNIQUE约束 , 即不能有两行的group_key列的值相同 。 使用group by语句和count()函数的时候 , mysql数据库会先建立一个虚拟表 , 当查询到新的键不在虚拟表中 , 数据库就会将其插入表中 , 如果数据库中已存在该键 , 则找到该键对应的计数字段并加1 。
- FlinkSQL 动态加载 UDF 实现思路
- 基于Spring+Angular9+MySQL开发平台
- MySQL数据库数据归档回收工具使用场景分享-爱可生
- 实践中如何优化MySQL(建议收藏!)
- 面试官问:MySQL 的自增 ID 用完了,怎么办?
- FLASK数据库模型
- SQL注入
- 零散的MySql基础记不住,看这一篇就够啦
- MySQL性能优化——Explain使用分析
- SQL竞争对手简史