標籤:ges style mysq href ext span alt image info
完整的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(二所示)
圖一:
那麼都分析了還有一個count(*)還沒分析呢。
count和group by 合在一起用就會建立一個虛擬表,來數(shǔ)數(shù)。
大概的虛擬表如下所示(其中key是主鍵,是不可以重複的):
他首先會在自己內部自己建立一個虛擬表,1代表有,0代表無。一、二、三、四、五.....如此數下去。數到最後也就0的就會結束。
(floor(rand()*2));出現的是0和1隨機出現的,但(floor(rand(0)*2))出現的則是固定的為0
一篇相似的文章:http://www.2cto.com/article/201604/498394.html
注入之mysql報錯Floor報錯分析