有什么网站可以做微信支付宝支付宝,北京网站建设价格行情,成都关键词快速排名,网站维护需要什么技能一、原理#xff1a; floor()报错注入需要组合count()、rand()、group by()等函数使用#xff0c;通过一些手段使数据库在处理语句时产生主键重复的报错#xff0c;从而达到爆出信息的目的 二、内容#xff1a;
?id-1 or
(select 1 from (select count(*),concat(databa…一、原理 floor()报错注入需要组合count()、rand()、group by()等函数使用通过一些手段使数据库在处理语句时产生主键重复的报错从而达到爆出信息的目的 二、内容
?id-1 or
(select 1 from (select count(*),concat(database(),floor(rand(0)*2))x
from information_schema.tables group by x)y)-- 2.1函数作用 1、count(*)统计查询到的不同类型的个数 2、(database(),floor(rand(0)*2))是security和0的拼接所以数据依次为security0、security1、security1、security0、security1......等 3、information_schema.tables这个表可以替换为其他表表中有数据即可不过在我们注入的时候不知道当前数据库有什么表所以用它 4、floor(rand(0)*2)表中有多行数据所以rand(0)在提供了一个固定的随机数的种子0后就会生成一串固定的随机数floor()是向下取整所以要写成rand(0)*2以免全是0这样我们就能得到一串固定的随机数。并且根据固定的随机数种子0他每次产生的随机数列都是相同的0 1 1 0 1 1 5、group by将表中的数据按列名分组显示相同的内容只显示最开始匹配的一个数据 2.2报错原因 假如我们需要注入出数据库名security floor(rand(0)*2)产生的随机数是0 1 1 0 1 1 group by这个语句生效时会先建立一张虚表里面两列为空值key[x]|count(*)在数据插入的过程中有rand()的存在就会产生问题rand()函数在没有检测到主键key存在时会先执行一次......此时只有主键security1存在虚表中对应的个数count(*)为2再插入security0时还是没有检测到该主键所以再执行一次floor(rand(0)*2)于是又插入security1因为与第二次插入的security1重复就报错了 key payload count(*) security0 1 security1 1 security1 2 security0 1 security1 ---此时key[1]重复了报错
三、注意 要注意加入随机数种子的问题如果没加入随机数种子或者加入其他的数那么floor(rand()2)产生的序列是不可测的这样可能会出现正常插入的情况。最重要的是前面几条记录查询后不能让虚表存在0,1键值如果存在了那无论多少条记录也都没办法报错因为floor(rand()2)不会再被计算做为虚表的键值这也就是为什么不加随机因子有时候会报错有时候不会报错的原因。