mysql floor_注入之mysql报错Floor报错分析

完整的payload:

http://www.xishaonian.cn/sql.php?id=1+and(select 1 from(select count(*),concat((select (select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)

简化后:select count(*),(floor(rand(0)*2))x from table order by x;

MYSQL官方文档指出rand和group by不能一起用,为啥不能够一起用呢?因为一个是随机的一个是排序的。你咋让随机的进行排序呢。是吧。所以是不行滴。floor注入也就是主要利用这一点。

(floor(rand(0)*2))x :

rand(0)*2 就是说取随机数0(该数字被称之为随机因子,如图一所示)乘2。floor是向下取正。

本来rand(0)的值是:0.15522042769493574

乘2以后是:0.3104408553898715

向下取正以后就是0

后面的x是别名,等价于 (floor(rand(0)*2)) as x;(如图二所示)

所以得出:(floor(rand(0)*2))x会等于0(如图二所示)

图一:

20180110214823941267.png

图二:

20180110214823943220.png

那么都分析了还有一个count(*)还没分析呢。

count和group by 合在一起用就会建立一个虚拟表,来数(shǔ)数(shù)。

大概的虚拟表如下所示(其中key是主键,是不可以重复的):

20180110214823944197.png

他首先会在自己内部自己创建一个虚拟的表,1代表有,0代表无。一、二、三、四、五.....如此数下去。数到最后也就0的就会结束。

(floor(rand()*2));出现的是0和1随机出现的,但(floor(rand(0)*2))出现的则是固定的为0

20180110214823946150.png

20180110214823947127.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值