SQL注入之報錯注入的具體使用
報錯注入就是利用了數(shù)據(jù)庫的某些機制,人為地制造錯誤條件,使得查詢結(jié)果能夠出現(xiàn)在錯誤信息中。這里主要介紹報錯注入中常用的xpath語法錯誤和 concat+rand()+group by()導(dǎo)致主鍵重復(fù)。
1、 xpath語法
利用xpath語法錯誤進行報錯注入主要利用以下兩個函數(shù):
extractvalueupdatexml
注意: xpath語法錯誤使用條件必須滿足mysql版本>5.1.5。
(1)extractvalue
作用:從目標xml中返回包含所查詢值的字符串。其語法: extractvalue(xml_document,xpath_string)
,即 extractvalue('目標xml文件名','在xml中查詢的字符串')
第一個參數(shù): xml_document是string格式,為xml文檔對象的名稱
第二個參數(shù): xpath_string是xpath格式的字符串
注意:第二個參數(shù)是要求符合xpath語法的字符串,如果不滿足要求,則會報錯,并且將查詢結(jié)果放在報錯信息里。
payload: select extractvalue(1,concat('~',database()))
Xpath沒問題的情況下,在1中查詢不到database()的結(jié)果,但是也沒有語法錯誤,所以不會報錯。
Xpath有問題的情況,用concat函數(shù)拼接一個錯誤的Xpath讓mysql報錯得到包含查詢值的字符串。
注意:extractvalue()能查詢字符串的最大長度為32,如果我們想要的結(jié)果趨過32,那要用substring()函數(shù)截取或limit分頁,一次查看最多32位。
(2)updatexml
作用:改變文檔中符合條件的節(jié)點的值,語法: updatexml(xml_document,xpath_string,new_value)
- 第一個參數(shù):xml_document是string格式,為xml文檔對象的名稱;
- 第二個參數(shù):xpath_string是xpath格式的字符串,第二個參數(shù)跟extractvalue函數(shù)一樣,且利用方式相同;
- 第三個參數(shù):new_document是string格式,替換查找到的符合條件的數(shù)據(jù);
payload: select updatexml(1,concat('~ ',(select version()), '~'),1)
Xpath沒問題的情況下,結(jié)果如下:
Xpath有問題的情況,結(jié)果如下。
2、concat+rand()+group by()導(dǎo)致主鍵重復(fù)
這種報錯方法的本質(zhì)是因為floor(rand()*2)的重復(fù)性,導(dǎo)致group by語句出錯。group by key的原理是循環(huán)讀取數(shù)據(jù)的每一行,將結(jié)果保存于臨時表中。讀取每一行的key時,如果key存在于臨時表中,則不在臨時表中更新臨時表的數(shù)據(jù);如果key不在臨時表中,則在臨時表中插入key所在行的數(shù)據(jù)。
- floor():對任意正或者負的十進制值向下取整;
- rand():生成0~1之間的隨機數(shù);
- rand(0)*2:生成0~2之間的隨機數(shù);
- floor(rand()*2):有兩條記錄就會報錯;
- floor(rand(0)*2):記錄需3條以上,且3條以上必報錯,返回的值有規(guī)律;
- count():是用來統(tǒng)計結(jié)果的,相當(dāng)于刷新一次結(jié)果,簡單來說就是計數(shù);
- group by():在對數(shù)據(jù)進行分組時會先看看虛擬表里有沒有這個值,沒有的話就插入,存在的話count()加1
payload: select 1 from (select count(*),concat((select語句),floor(rand()*2))x from information_schema.tables group by x)a
到此這篇關(guān)于SQL注入之報錯注入的具體使用的文章就介紹到這了,更多相關(guān)SQL 報錯注入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
sqlserver 不能將值NULL插入列id(列不允許有空值解決)
Microsoft OLE DB Provider for SQL Server 錯誤 '80040e2f' 不能將值 NULL 插入列 'id',表 'web.dbo.dingdan';列不允許有空值。INSERT 失敗2013-06-06重裝MS SQL Server 2000前必須徹底刪除原安裝文件的方法
重裝MS SQL Server 2000前必須徹底刪除原安裝文件的方法...2007-11-11SQL?Server?實例之間傳輸?shù)卿浢兔艽a的詳細步驟
本文介紹如何在Windows上運行的SQL?Server的不同實例之間傳輸?shù)卿浢兔艽a,適用于SQL mirroring,SQL AG中的本地logins的遷移或者同步,需要的朋友可以參考下2023-06-06sql函數(shù)實現(xiàn)去除字符串中的相同的字符串
去除字符串中的相同的字符,此功能在開發(fā)過程中很實用,為此本文整理了一些,希望對你了解它有所幫助2013-01-01SQL Server如何通過創(chuàng)建臨時表遍歷更新數(shù)據(jù)詳解
這篇文章主要給大家介紹了關(guān)于SQL Server如何通過創(chuàng)建臨時表遍歷更新數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09sqlserver 無法驗證產(chǎn)品密匙的完美解決方案[測試通過]
Win2003 SQL2000時CD-KEY(序列號)無法驗證的問題的解決方法2009-07-07