floor報錯注入原理

2022-10-09 06:33:09 字數 2244 閱讀 4941

關鍵函式:

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注入的報錯注入利用的是頁面返回了資料庫報錯的內容,當回顯注入無法使用...