注入之mysql報錯Floor報錯分析

來源:互聯網
上載者:User

標籤: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報錯分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.