關鍵函式:
rand() -------產生0~1的偽隨機數
rand有兩種形式:
1、rand(),即無引數的,此時產生的隨機數是隨機的,不可重複的;
2、rand(n),即有引數數,如rand(0),相當於指定隨機數生產的種子,那麼這種情況產生的隨機數是可重複的。
floor() -------向下取整數
concat() -----連線字串
count() ------計算總數
1,count(*)
返回表中的記錄數(包括所有列),相當於統計表的行數(不會忽略列值為null的記錄)
2,count(列名)
返回列名指定列的記錄數
group by x 作用以x為主鍵分組
主鍵,指的是乙個列或多列的組合,其值能唯一地標識表中的每一行
其實在做的時候分為兩步首先掃瞄一行一行的掃瞄主鍵,如果虛擬表中有值則跳過,如果沒有第二步將值放入虛表中
首先rand()是隨機生成乙個0到1之間的隨機數
然後一般在floor中使用是會乘以2既floor(rand()*2),floor的作用是對數向下取整,則整個語句會形成一串偽隨機011011....。
count(*)的效果
對於select floor(rand(0)*2),count(*) from users group by floor(rand(0)*2);報錯
過程解析
1,group by時,會建立空虛擬表如下圖,然後從sql語句執行結果序列(011011)讀取資料並插入虛表:
2,虛表寫入第乙個資料(前乙個floor部分進行一次計算,「第一次計算」)掃瞄主鍵,發現沒有與0對應的主建,新建主鍵(這個主鍵的值是後面乙個floor部分進行一次計算的值,「第二次計算」)如圖
3,寫入第二個資料(前乙個floor部分計算的值,「第三次計算」)有對應的主鍵count(*)加一(這裡就沒有再計算後面的floor部分)
4,寫入第三個資料(前乙個floor計算的值,「第四次計算」)掃瞄主鍵,發現沒有與0對應的主建(剛剛建的主鍵記錄的值實際為1),新建主鍵(這個主鍵的值是後面乙個floor部分進行一次計算的值,「第五次計算」)新建的主鍵值又為1,因為主鍵不能重複,所以報錯
SQL注入 floor 報錯注入
基礎知識 floor 去除小數部分 rand 產生隨機數 rand x 每個x對應乙個固定的值,但是如果連續執行多次值會變化,不過也是可 的 floor報錯payload and select 1 from select count concat database floor rand 0 2 x ...
Floor報錯原理分析
最近開始打ctf了,發現好多sql注入都忘了,最近要好好複習一下。floor 返回 某數的最大整數 rand 產生隨機數 rand x 每個x對應乙個固定的值,但是如果連續執行多次值會變化,不過也是可 的 floor報錯payload select count floor rand 0 2 as a...
sql注入之floor薛丁格報錯注入以及報錯原理
之前已經簡單介紹了sql注入的基本原理,接下來會按照sql注入的各種型別一一進行梳理,sql注入的常見主要分為回顯注入 報錯注入 bool盲注 延時注入 堆疊注入 二次注入 寬位元組注入 http頭注入 dns load注入。sql注入的報錯注入利用的是頁面返回了資料庫報錯的內容,當回顯注入無法使用...