国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù)

這篇具有很好參考價值的文章主要介紹了sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Mysql報錯注入之floor報錯詳解

updatexml extractvalue

floor 是mysql的函數(shù)

groupby+rand+floor+count

一、簡述

利用 select count(*),(floor(rand(0)*2))x from table group by x,導(dǎo)致數(shù)據(jù)庫報錯,通過 concat 函數(shù),連接注入語句與 floor(rand(0)*2)函數(shù),實現(xiàn)將注入結(jié)果與報錯信息回顯的注入方式。

基本的查詢 select 不必多說,剩下的幾個關(guān)鍵字有 count 、group by 、floor、rand。

二、關(guān)鍵函數(shù)說明

1.rand函數(shù)

rand() 可以產(chǎn)生一個在0和1之間的隨機數(shù)。

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

可見,直接使用rand函數(shù)每次產(chǎn)生的數(shù)都不同,但是當(dāng)提供了一個固定的隨機數(shù)的種子0之后:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

每次產(chǎn)生的值都是一樣的。也可以稱之為偽隨機(產(chǎn)生的數(shù)據(jù)都是可預(yù)知的)。
查看多個數(shù)據(jù)看一下。(users是一個有6行數(shù)據(jù)的表)

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

這樣第一次產(chǎn)生的隨機數(shù)和第二次完全一樣,也就是可以預(yù)測的。
利用的時候rand(0)*2為什么要乘以 2 呢?這就要配合 floor 函數(shù)來說了。

2.floor(rand(0)*2)函數(shù)

floor() 函數(shù)的作用就是返回小于等于括號內(nèi)該值的最大整數(shù)。

而rand() 是返回 0 到 1 之間的隨機數(shù),那么floor(rand(0))產(chǎn)生的數(shù)就只是0,這樣就不能實現(xiàn)報錯的:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

而rand產(chǎn)生的數(shù)乘 2 后自然是返回 0 到 2 之間的隨機數(shù),再配合 floor() 就可以產(chǎn)生確定的兩個數(shù)了。也就是 0 和 1:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

并且根據(jù)固定的隨機數(shù)種子0,他每次產(chǎn)生的隨機數(shù)列都是相同的0 1 1 0 1 1。

3.group by 函數(shù)

group by 主要用來對數(shù)據(jù)進行分組(相同的分為一組)。

還是按照下表進行實驗

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

首先我們在查詢的時候是可以使用as用其他的名字代替顯示的:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

但是在實際中可以缺省as直接查詢,顯示的結(jié)果是一樣的:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

然后就可以用group by函數(shù)進行分組,并按照x進行排序

注意:最后x這列中顯示的每一類只有一次,前面的a的是第一次出現(xiàn)的id值

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

4.count(*)函數(shù)

count(*)統(tǒng)計結(jié)果的記錄數(shù)。

這里與group by結(jié)合使用看一下:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

這里就是對重復(fù)性的數(shù)據(jù)進行了整合,然后計數(shù),后面的x就是每一類的數(shù)量。

5.綜合使用產(chǎn)生報錯:

select count(*),floor(rand(0)*2) x from users group by x;

0 1 1 0 1 1

0 2

1 4

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

根據(jù)前面函數(shù),這句話就是統(tǒng)計后面產(chǎn)生隨機數(shù)的種類并計算每種數(shù)量。

分別產(chǎn)生0 1 1 0 1 1 ,這樣0是2個,1是4個,但是最后卻產(chǎn)生了報錯。

0 2

1 4

三、報錯分析

這個整合然后計數(shù)的過程中,中間發(fā)生了什么我們是必須要明白的。
首先mysql遇到該語句時會建立一個虛擬表。該虛擬表有兩個字段,一個是分組的 key ,一個是計數(shù)值 count()。也就對應(yīng)于實驗中的 user_name 和 count()。
然后在查詢數(shù)據(jù)的時候,首先查看該虛擬表中是否存在該分組,如果存在那么計數(shù)值加1,不存在則新建該分組。

然后mysql官方有給過提示,就是查詢的時候如果使用rand()的話,該值會被計算多次,那這個"被計算多次"到底是什么意思,就是在使用group by的時候,floor(rand(0)*2)會被執(zhí)行一次,如果虛表不存在記錄,插入虛表的時候會再被執(zhí)行一次,我們來看下floor(rand(0)*2)報錯的過程就知道了,從上面的函數(shù)使用中可以看到在一次多記錄的查詢過程中floor(rand(0)*2)的值是定性的,為011011 (這個順序很重要),報錯實際上就是floor(rand(0)*2)被計算多次導(dǎo)致的,我們還原一下具體的查詢過程:

(1)查詢前默認會建立空虛擬表如下圖:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

(2)取第一條記錄,執(zhí)行floor(rand(0)*2),發(fā)現(xiàn)結(jié)果為0(第一次計算), 0 1 1 0 1 1

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

(3)查詢虛擬表,發(fā)現(xiàn)0的鍵值不存在,則插入新的鍵值的時候floor(rand(0)*2)會被再計算一次,結(jié)果為1(第二次計算),插入虛表,這時第一條記錄查詢完畢,如下圖: 0 1 1 0 1 1

0 1 1 0 1 1 0

0 1 1

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

(4)查詢第二條記錄,再次計算floor(rand(0)*2),發(fā)現(xiàn)結(jié)果為1(第三次計算)

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

(5)查詢虛表,發(fā)現(xiàn)1的鍵值存在,所以floor(rand(0)2)不會被計算第二次,直接count()加1,第二條記錄查詢完畢,結(jié)果如下:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

(6)查詢第三條記錄,再次計算floor(rand(0)*2),發(fā)現(xiàn)結(jié)果為0(第4次計算)

0 1 1 0

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

(7)查詢虛表,發(fā)現(xiàn)鍵值沒有0,則數(shù)據(jù)庫嘗試插入一條新的數(shù)據(jù),在插入數(shù)據(jù)時floor(rand(0)*2)被再次計算,1作為虛表的主鍵,其值為1(第5次計算),插入

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

然而1這個主鍵已經(jīng)存在于虛擬表中,而新計算的值也為1(主鍵鍵值必須唯一),所以插入的時候就直接報錯了。

0 1 1 0 1

四、總結(jié)

select count(*),concat(database(),floor(rand(0)*2))x from information_schema.tables group by x

security1
security1
security1


整個查詢過程floor(rand(0)*2)被計算了5次,查詢原數(shù)據(jù)表3次,所以這就是為什么數(shù)據(jù)表中需要最少3條數(shù)據(jù),使用該語句才會報錯的原因。

另外,要注意加入隨機數(shù)種子的問題,如果沒加入隨機數(shù)種子或者加入其他的數(shù),那么floor(rand()*2)產(chǎn)生的序列是不可測的,這樣可能會出現(xiàn)正常插入的情況。最重要的是前面幾條記錄查詢后不能讓虛表存在0,1鍵值,如果存在了,那無論多少條記錄,也都沒辦法報錯,因為floor(rand()*2)不會再被計算做為虛表的鍵值,這也就是為什么不加隨機因子有時候會報錯,有時候不會報錯的原因。

比如下面用1作為隨機數(shù)種子,就不會產(chǎn)生報錯:

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫

sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù),sql,數(shù)據(jù)庫文章來源地址http://www.zghlxwxcb.cn/news/detail-832287.html

到了這里,關(guān)于sql報錯注入 之 floor 函數(shù)報錯:主鍵重復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • MSsql數(shù)據(jù)庫 sql注入

    和mysql不同;每個數(shù)據(jù)庫都有自己的信息總結(jié)表 四個系統(tǒng)數(shù)據(jù)庫 master sysdatabases :所有數(shù)據(jù)庫信息 name :所有數(shù)據(jù)庫名 sysobjects :數(shù)據(jù)庫所有對象的信息 syscolumns :字段信息 固定字段名 name 對象名 id 對象id xtype 對象類型代碼 xtype=\\\'U\\\' 用戶創(chuàng)建的表 xtype=\\\'S\\\' 系統(tǒng)表 model sysobjects sys

    2024年04月10日
    瀏覽(29)
  • 【實訓(xùn)04】數(shù)據(jù)庫SQL注入漏洞

    【實訓(xùn)04】數(shù)據(jù)庫SQL注入漏洞

    ? 下載dvwa的時候其實已經(jīng)通過了,但建議全部做一下,后面的要用 git clone GitHub - digininja/DVWA: Damn Vulnerable Web Application (DVWA) 注入的sql: 使用sql注入查詢數(shù)據(jù)庫用戶名和數(shù)據(jù)庫名,并將用戶名和數(shù)據(jù)庫名寫入/data/workspace/myshixun/result2中: 注入的sql語句: 使用sql注入查詢dvwa數(shù)據(jù)庫

    2024年02月16日
    瀏覽(20)
  • 【數(shù)據(jù)庫】SQL注入從0到1

    【數(shù)據(jù)庫】SQL注入從0到1

    目錄 前言: 1.【入門】普通查詢型注入: 1.0 實驗環(huán)境: 1.1進行一次普通的查詢: 1.2 進行注入得到用戶信息: 1.2.1 執(zhí)行注入: 1.2.2 注入語句分析: 1.3 整型注入與字符型注入?yún)^(qū)別: 2.【進階】從庫到列逐步注入: 2.1 預(yù)備知識: 2.1.1 union函數(shù): 2.1.2 order by函數(shù): 2.1.3 infor

    2024年02月05日
    瀏覽(26)
  • sql server 如何設(shè)置數(shù)據(jù)庫某個字段值不能重復(fù)?

    在 SQL Server 中,可以通過以下兩種方式設(shè)置數(shù)據(jù)庫某個字段值不能重復(fù): 唯一約束(Unique Constraint):唯一約束是在表級別上定義的約束,用于確保某個列的值在表中是唯一的??梢酝ㄟ^以下 SQL 語句來創(chuàng)建唯一約束: 唯一索引(Unique Index):唯一索引也用于確保某個列的值

    2024年02月13日
    瀏覽(93)
  • 滲透測試-SQL注入之核心語法獲取數(shù)據(jù)庫信息

    滲透測試-SQL注入之核心語法獲取數(shù)據(jù)庫信息

    SQL實驗室第一關(guān) 下載sqli-labs到phpstudy的www目錄下 打開localhost/sqli-labs運行即可 (1)注入語句 ‘~’ 相當(dāng)于16進制的0x7e 萬能密碼 \\\'or ‘1’ =\\\'1 ’ and ‘1’=‘1 ’ and 1=2 union select 1,user(),3- -+ 前面加’是為了閉合后面的’ (2)group_concat(string) (1)SQL手工注入方法 select schema_name

    2024年02月10日
    瀏覽(19)
  • Python MySQL 數(shù)據(jù)庫查詢:選擇數(shù)據(jù)、使用篩選條件、防止 SQL 注入

    Python MySQL 數(shù)據(jù)庫查詢:選擇數(shù)據(jù)、使用篩選條件、防止 SQL 注入

    要從MySQL中的表格中選擇數(shù)據(jù),請使用\\\"SELECT\\\"語句: 示例選擇\\\"customers\\\"表格中的所有記錄,并顯示結(jié)果: 注意 :我們使用 fetchall() 方法,該方法從上次執(zhí)行的語句中獲取所有行。 要僅選擇表格中的某些列,請使用\\\"SELECT\\\"語句,后跟列名: 示例僅選擇name和address列: 如果您只對

    2024年02月05日
    瀏覽(116)
  • 確保你的數(shù)據(jù)庫安全:如何防止SQL注入攻擊

    最近,越來越多的組織和公司受到SQL注入攻擊的困擾。這種攻擊可以導(dǎo)致數(shù)據(jù)庫中的敏感信息泄露,破壞數(shù)據(jù)完整性,甚至可能導(dǎo)致整個系統(tǒng)崩潰。如果您是一名數(shù)據(jù)庫管理員或網(wǎng)站管理員,您需要了解如何保護您的數(shù)據(jù)庫免受SQL注入攻擊的威脅。在本文中,小德將介紹什么

    2024年02月02日
    瀏覽(23)
  • 五、C#與數(shù)據(jù)庫交互( SQL注入與安全性)

    在C#與數(shù)據(jù)庫交互時,安全性是非常重要的一部分,特別是要防止SQL注入攻擊。SQL注入是一種常見的網(wǎng)絡(luò)攻擊手段,攻擊者通過在輸入字段中注入惡意SQL代碼來操縱數(shù)據(jù)庫查詢。以下是一些關(guān)于如何防止SQL注入的建議: 使用參數(shù)化查詢 : 這是防止SQL注入的最有效方法。參數(shù)化

    2024年02月02日
    瀏覽(29)
  • 記錄惡意SQL注入引發(fā)的RDS只讀數(shù)據(jù)庫CPU飚100%

    記錄惡意SQL注入引發(fā)的RDS只讀數(shù)據(jù)庫CPU飚100%

    前言 : 在廣州這座城市下著小雨的晚上,我正在廚房洗著碗,突然手機有來電,脫下手套,一看是來自阿里云的告警電話。打開飛書查看告警內(nèi)容,發(fā)現(xiàn)某個業(yè)務(wù)的RDS只讀實例CPU飚到100%,下意識覺得是不是有慢查詢導(dǎo)致,想著不會有啥問題,上去kill慢查就好了,結(jié)果發(fā)現(xiàn)是

    2024年03月19日
    瀏覽(25)
  • 網(wǎng)絡(luò)安全進階學(xué)習(xí)第十二課——SQL手工注入3(Access數(shù)據(jù)庫)

    網(wǎng)絡(luò)安全進階學(xué)習(xí)第十二課——SQL手工注入3(Access數(shù)據(jù)庫)

    判斷數(shù)據(jù)庫類型 —— 判斷表名 —— 判斷列名 —— 判斷列名長度 —— 查出數(shù)據(jù)。 asp的網(wǎng)站,常用數(shù)據(jù)庫為access、sqlserver。 and exsits (select * from msysobjects)0 access and exsits (select * from sysobjects)0 sqlserver 上述語句 會返回1或者0 。 msysobjects是access的默認數(shù)據(jù)庫 , sysobjects是sqlserv

    2024年02月11日
    瀏覽(29)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包