之前一直不太理解floor报错注入的原理,今天学习一下
首先要清楚group by 是干什么的以及他的工作过程,
group by x 作用以x为主键分组
其实在做的时候分为两步首先扫描一行一行的扫描x,如果虚表中有值则跳过,如果没有第二步将值放入虚表中
因为是分了两步进行,所以可操作性就在这里,主要利用了主键不能重复的特点,也就是说如果我们能让第一步扫描的结果和第二步放入的结果不一样就会因为主键重复而报错
floor():是取整
rand():是随机生成一个0-1的数
floor(rand()*2):随机生成0/1
count():计数用的
所以一般的exp为:
-1‘ union select 1 from (select count(*) concat((payload),floor(rand()*2)) as x from information_schema.tables group by x)