SQL注入之報(bào)錯(cuò)注入的具體使用
報(bào)錯(cuò)注入就是利用了數(shù)據(jù)庫(kù)的某些機(jī)制,人為地制造錯(cuò)誤條件,使得查詢結(jié)果能夠出現(xiàn)在錯(cuò)誤信息中。這里主要介紹報(bào)錯(cuò)注入中常用的xpath語(yǔ)法錯(cuò)誤和 concat+rand()+group by()導(dǎo)致主鍵重復(fù)。
1、 xpath語(yǔ)法
利用xpath語(yǔ)法錯(cuò)誤進(jìn)行報(bào)錯(cuò)注入主要利用以下兩個(gè)函數(shù):
extractvalueupdatexml
注意: xpath語(yǔ)法錯(cuò)誤使用條件必須滿足mysql版本>5.1.5。
(1)extractvalue
作用:從目標(biāo)xml中返回包含所查詢值的字符串。其語(yǔ)法: extractvalue(xml_document,xpath_string) ,即 extractvalue('目標(biāo)xml文件名','在xml中查詢的字符串')
第一個(gè)參數(shù): xml_document是string格式,為xml文檔對(duì)象的名稱
第二個(gè)參數(shù): xpath_string是xpath格式的字符串
注意:第二個(gè)參數(shù)是要求符合x(chóng)path語(yǔ)法的字符串,如果不滿足要求,則會(huì)報(bào)錯(cuò),并且將查詢結(jié)果放在報(bào)錯(cuò)信息里。
payload: select extractvalue(1,concat('~',database()))
Xpath沒(méi)問(wèn)題的情況下,在1中查詢不到database()的結(jié)果,但是也沒(méi)有語(yǔ)法錯(cuò)誤,所以不會(huì)報(bào)錯(cuò)。

Xpath有問(wèn)題的情況,用concat函數(shù)拼接一個(gè)錯(cuò)誤的Xpath讓mysql報(bào)錯(cuò)得到包含查詢值的字符串。

注意:extractvalue()能查詢字符串的最大長(zhǎng)度為32,如果我們想要的結(jié)果趨過(guò)32,那要用substring()函數(shù)截取或limit分頁(yè),一次查看最多32位。
(2)updatexml
作用:改變文檔中符合條件的節(jié)點(diǎn)的值,語(yǔ)法: updatexml(xml_document,xpath_string,new_value)
- 第一個(gè)參數(shù):xml_document是string格式,為xml文檔對(duì)象的名稱;
- 第二個(gè)參數(shù):xpath_string是xpath格式的字符串,第二個(gè)參數(shù)跟extractvalue函數(shù)一樣,且利用方式相同;
- 第三個(gè)參數(shù):new_document是string格式,替換查找到的符合條件的數(shù)據(jù);
payload: select updatexml(1,concat('~ ',(select version()), '~'),1)
Xpath沒(méi)問(wèn)題的情況下,結(jié)果如下:

Xpath有問(wèn)題的情況,結(jié)果如下。

2、concat+rand()+group by()導(dǎo)致主鍵重復(fù)
這種報(bào)錯(cuò)方法的本質(zhì)是因?yàn)閒loor(rand()*2)的重復(fù)性,導(dǎo)致group by語(yǔ)句出錯(cuò)。group by key的原理是循環(huán)讀取數(shù)據(jù)的每一行,將結(jié)果保存于臨時(shí)表中。讀取每一行的key時(shí),如果key存在于臨時(shí)表中,則不在臨時(shí)表中更新臨時(shí)表的數(shù)據(jù);如果key不在臨時(shí)表中,則在臨時(shí)表中插入key所在行的數(shù)據(jù)。
- floor():對(duì)任意正或者負(fù)的十進(jìn)制值向下取整;
- rand():生成0~1之間的隨機(jī)數(shù);
- rand(0)*2:生成0~2之間的隨機(jī)數(shù);
- floor(rand()*2):有兩條記錄就會(huì)報(bào)錯(cuò);
- floor(rand(0)*2):記錄需3條以上,且3條以上必報(bào)錯(cuò),返回的值有規(guī)律;
- count():是用來(lái)統(tǒng)計(jì)結(jié)果的,相當(dāng)于刷新一次結(jié)果,簡(jiǎn)單來(lái)說(shuō)就是計(jì)數(shù);
- group by():在對(duì)數(shù)據(jù)進(jìn)行分組時(shí)會(huì)先看看虛擬表里有沒(méi)有這個(gè)值,沒(méi)有的話就插入,存在的話count()加1
payload: select 1 from (select count(*),concat((select語(yǔ)句),floor(rand()*2))x from information_schema.tables group by x)a
到此這篇關(guān)于SQL注入之報(bào)錯(cuò)注入的具體使用的文章就介紹到這了,更多相關(guān)SQL 報(bào)錯(cuò)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQL Server中刪除重復(fù)數(shù)據(jù)的幾個(gè)方法
數(shù)據(jù)庫(kù)的使用過(guò)程中由于程序方面的問(wèn)題有時(shí)候會(huì)碰到重復(fù)數(shù)據(jù),重復(fù)數(shù)據(jù)導(dǎo)致了數(shù)據(jù)庫(kù)部分設(shè)置不能正確設(shè)置2013-05-05
SQL中字段自增(IDENTITY,序列Sequence)的兩種方法
本文主要介紹了SQL中字段自增,主要包括IDENTITY,序列Sequence的兩種方法,具有一定的參考價(jià)值,感興趣的可以了解一下2023-11-11
DATASET 與 DATAREADER對(duì)象有什么區(qū)別
DataReader和DataSet最大的區(qū)別在于,DataReader使用時(shí)始終占用SqlConnection(俗稱:非斷開(kāi)式連接),在線操作數(shù)據(jù)庫(kù)時(shí),任何對(duì)SqlConnection的操作都會(huì)引發(fā)DataReader的異常。下面同本文對(duì)dataset與datareader的區(qū)別詳細(xì)學(xué)習(xí)吧2016-11-11
SQL?Server?2019完整安裝教程(最新最詳細(xì)!)
SQL Server是一款Microsoft公司推出的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于SQL?Server?2019完整安裝教程的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),本文介紹的是最新最詳細(xì),需要的朋友可以參考下2023-02-02
SQL SERVER數(shù)據(jù)轉(zhuǎn)換失敗的原因及解決方法
在使用 SQL Server 數(shù)據(jù)庫(kù)過(guò)程中,我們經(jīng)常會(huì)遇到數(shù)據(jù)轉(zhuǎn)換失敗的情況,當(dāng) SQL Server 在執(zhí)行查詢、插入或更新操作時(shí),如果發(fā)現(xiàn)數(shù)據(jù)類型不匹配或無(wú)法進(jìn)行有效的轉(zhuǎn)換,就會(huì)拋出轉(zhuǎn)換失敗的錯(cuò)誤,本文給大家介紹了SQL SERVER數(shù)據(jù)轉(zhuǎn)換失敗的原因及解決方法2024-09-09
MsSQL數(shù)據(jù)庫(kù)基礎(chǔ)與庫(kù)的基本操作方法
文章主要介紹了數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí),包括數(shù)據(jù)庫(kù)的定義、主流數(shù)據(jù)庫(kù)系統(tǒng)(如MySQL、PostgreSQL等)、數(shù)據(jù)庫(kù)操作(如創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù),備份和恢復(fù)等)以及查看連接情況,感興趣的朋友一起看看吧2025-02-02

