網絡安全自學篇之Sqlmap基礎用法、CTF實戰及請求參數設置(一)

文章來源:https://blog.csdn.net/Eastmount/article/details/103170828
排版整理:安全加

免責聲明:本公衆號發佈的文章均轉載自互聯網或經作者投稿授權的原創,文末已註明出處,其內容和圖片版權歸原網站或作者本人所有,並不代表本平臺的觀點,若有無意侵權或轉載不當之處請聯繫我們處理,謝謝合作! 


作者介紹:楊秀璋

自幼受貴州大山的薰陶,養成了誠實質樸的性格。經過寒窗苦讀,考入BIT,爲完成自己的教師夢,放棄IT、航天等工作,成爲貴財一名大學教師,並想把自己所學所感真心傳授給自己的學生,幫助更多陌生人。

一.Sqlmap介紹

Sqlmap

是一個開源的滲透測試工具,它可以自動化檢測和利用SQL注入缺陷以及接管數據庫服務器的過程。它配備了一個強大的檢測引擎,由Python語言開發完成,通過外部連接訪問數據庫底層文件系統和操作系統,並執行命令實現滲透。許多適合於終極滲透測試的小衆特性和廣泛的開發,從數據庫指紋、從數據庫獲取數據到訪問底層文件系統和通過帶外連接在操作系統上執行命令。

Sqlmap下載

可以從官方網址、Github或Python調用PIP命令實現。

官方網址:http://sqlmap.org/

Github下載:https://github.com/sqlmapproject/sqlmap/

由於Sqlmap是通過Python語言開發完成,也可以安裝Python環境,調用Pyhon命令pip install sqlmap安裝。

建議大家在官方網站下載類似Sqlmap的軟件,否則不知道是否有後門,這裏從Github下載如下圖所示。

打開CMD,Sqlmap直接在Python中調用。由於Sqlmap使用Python(解釋型語言)編寫,所以可以直接在命令行中調用Python解釋器運行Sqlmap.py。如下圖所示,表示運行成功。

查看Sqlmap版本命令如下:

查看簡要的幫助信息,參數及含義。

查詢高級幫助信息。

二.Sqlmap基礎用法及CTF實戰

Sqlmap的基本流程如下:

找注入點並檢測:sqlmap –u “鏈接”

列庫顯示數據庫:sqlmap –u “鏈接” --dbs

列表顯示錶:sqlmap –u “鏈接” –D 數據庫 --tables

列字段顯示錶中字段:sqlmap –u “鏈接” –D 數據庫 –T 表名 --columns

顯示字段內容:sqlmap –u “鏈接” –D 數據庫 –T 表名 –C 字段 --dump

作者這裏以“實驗吧”的CTF題目作爲測試地址,希望讀者一定結合這個例子進行嘗試,熟悉SQLMAP的基本用法。

測試地址:http://ctf5.shiyanbar.com/web/index_3.php?id=1

網頁如下圖所示,我們需要通過SQL注入把數據庫中的表格flag值獲取出來。

這個實例一定推薦大家自己去嘗試,熟悉SQLMAP的基本用法。

1.獲取數據庫

運行結果如下圖所示,獲取3個數據庫,其中–dbs參數表示databases。

2.獲取當前數據庫

運行結果如下圖所示,其中–current-db參數表示當前數據庫(MySQL),輸出結果:web1。

PS:對應的內容如下所示,LOGO還挺好看的。

C:\Users\yxz\Desktop\sqlmap-master>python sqlmap.py -u "http://ctf5.shiyanbar.com/web/index_3.php?id=1" --current-db
        ___
       __H__
 ___ ___["]_____ ___ ___  {1.3.11.86#dev}
|_ -| . [,]     | .'| . |
|___|_  [(]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org


[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program


[*] starting @ 11:27:32 /2019-11-21/


[11:27:32] [INFO] resuming back-end DBMS 'mysql'
[11:27:32] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1' AND 2112=2112 AND 'btem'='btem
---
[11:27:33] [INFO] the back-end DBMS is MySQL
web application technology: Nginx 1.10.2, PHP 5.5.38
back-end DBMS: MySQL 5
[11:27:33] [INFO] fetching current database
[11:27:33] [WARNING] running in a single-thread mode. Please consider usage of option '--threads' for faster data retrieval
[11:27:33] [INFO] retrieved: web1
current database: 'web1'
[11:27:35] [INFO] fetched data logged to text files under 'C:\Users\yxz\AppData\Local\sqlmap\output\ctf5.shiyanbar.com'


[*] ending @ 11:27:35 /2019-11-21/

3.獲取當前用戶

運行結果如下圖所示,獲取當前數據庫用戶:web1@localhost。

獲取數據庫用戶和密碼的代碼如下所示:

4.獲取數據庫中所有表

運行結果如下圖所示,獲取數據庫web1的所有表,其中-D表示數據庫,–tables表示所有表。
輸出結果爲flag和web_1兩張表。

5.獲取表中所有字段

輸出結果如下圖所示:

輸出結果如下圖所示:

最終我們需要的結果flag在這個表裏。

6.獲取用戶名和密碼

獲取的結果如下圖所示:

最終的結果爲:flag{Y0u_@r3_5O_dAmn_90Od}

如果某網站存在SQL注入漏洞,通過SQLMAP就能:
(1)獲取數據庫名、用戶
(2)獲取後臺登錄表
(3)獲取登錄表中用戶名和密碼字段
(4)獲取後臺管理員的用戶名和密碼
所以,SQL注入、XSS注入、弱口令這些低級錯誤是需要各個管理員避免的。

三.Sqlmap確定目標常見方法

1.Sqlmap直連數據庫

Sqlmap支持直接連接數據庫,通過以下命令來直連。

服務型數據庫(前提指導數據庫用戶名和密碼)

DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(MySQL、Oracle、SQL Server、PostgreSQL)

例如:

獲取banner信息和用戶信息如下圖所示:

文件型數據庫(前提指導數據庫絕對路徑)

DBMS://DATABASE_FILEPATH(SQLite、Microsoft Access、Firebird、etc.)

2.Sqlmap URL探測

Sqlmap直接對單一URL探測,參數使用-u或-url,URL格式:http(s): //target_url[:port]/[…]

還是以CTF目標爲例,命令如下:

輸出結果如下圖所示,獲取banner信息,檢測SQL注入和XSS注入。

返回網站指紋信息,包括MySQL、Apache、PHP、操作系統等。

3.Sqlmap文件讀取目標

在某些情況下,不只是對單一URL探測,還需要對HTTP提交參數以及多個URL進行探測,只是用-u參數已經無法滿足時,就需要使用更強大的方式從文件中讀取目標進行探測。

SQLMAP支持從不同類型的文件中讀取目標進行SQL注入探測。

-l 從Burpsuite proxy或WebScarab proxy中讀取HTTP請求日誌文件

-x 從sitemap.xml站點地圖文件中讀取目標探測地圖中URL

-m 從多行文本格式文件讀取多個目標,對多個目標進行探測

-r 從文本文件中讀取HTTP請求作爲SQL注入探測的目標

-c 從配置文件sqlmap.conf中讀取目標探測

這裏以Kali中 DVWA 本地某網站爲例,作者只是介紹基本的方法,建議讀者下來深入嘗試。

首先,在Burpsuite中“Project options”勾選“Proxy”。

勾選之後會彈出對話框,輸入“test”點擊保存,此時桌面有個test文件。

接着更改代理服務器設置,設置爲127.0.0.1,端口號爲8080,訪問目標網站時,BurpSuite攔截我們的數據。

此時打開某網站,這裏以Kali環境中的 DVWA 爲例,本地數據會截斷獲取相關信息。

輸出結果如下圖所示,查看test有對應的相關信息。

在BurpSuite中點擊Forward查看相關信息,可以看到各種請求信息。

接下來再通過SQLMAP調用文件注入檢測。test文件複製到SQLMAP目錄下,輸入命令開始檢測,核心命令:

使用這種方式可以探測大量的目標,比單一的探測更加高效。指定多個URL進行探測如下圖所示:

4.Sqlmap Google批量掃描注入

Google黑客批量掃描注入中,Sqlmap通過-g自動利用Google獲取指定Google hack的目標,再利用交互向導模式進行Sql注入探測。

例如:

因爲不能訪問谷歌,所以此時不能正常獲取數據。如果能正常訪問,則顯示如下圖所示。

PS:這裏不建議大家使用SQLMAP GOOGLE探測,我們需要在授權的情況下去檢測目標網站,更好地保護網站或檢測網站漏洞,作爲白帽子綠色乾淨的網絡需要我們共同維護。

四.Sqlmap請求參數設置

1.Sqlmap設置HTTP方法

Sqlmap會自動在探測過程中使用合適的HTTP請求方法。但是在某些具體情況下,需要強制使用具體的HTTP請求方法。例如PUT請求方法,HTTP PUT請求方法不會自動使用,因此需要我們強制指定。使用–method=PUT。

2.Sqlmap設置POST提交參數

這是一個非常重要且常用的功能,並且某些情況下GET容易被識別,POST方法更好。記住這句話,後面的文章會深入實驗。

默認情況下,用於執行HTTP請求的HTTP方法是GET,但是您可以通過提供在POST請求中發送的數據隱式地將其更改爲POST。這些數據作爲這些參數,被用於SQL注入檢測。

–method=POST 也可以強制POST,但這裏使用 –data=“id=1” 注入參數的檢測,隱式的將GET方法轉換爲POST方法。其中,-f 表示fingerprint指紋信息,–banner --dbs --users 用於獲取數據庫、用戶等信息。

假設某網站是POST提交請求,使用GET法獲取信息的。這裏使用DVWA示例。

接着設置瀏覽器代理,打開BurpSuite截斷數據。

當我們輸入用戶名和密碼後,BurpSuite會截斷我們的請求,然後提取其中的請求值。

可以看到截斷的請求如下圖所示:

Sqlmap中輸入指令如下圖所示,通過這種方式把GET指定的URL提交修改爲POST數據提交,從而探測POST注入。

python sqlmap.py -u "http://192.168.1.100/sqli/Less-11/index.php" --data="uname=admin&passwd=admin&submit=submit" -f --banner --dbs --users 

首先返回存在SQL注入的信息,如下圖所示:

接着返回對應的指紋信息。

同時輸出指定返回的數據庫信息、用戶信息。

3.Sqlmap設置參數分隔符

在某些情況下,Sqlmap需要覆蓋默認參數分隔符(如& in GET和POST數據),才能正確地分割和單獨處理每個參數。例如:提交的數據使用“;”分割,而使用Sqlmap時會報錯,需要使用–param指定分隔符。

python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=1" --param-del=";" -f --banner --dbs --users 

使用&來正確分割這些信息,接着進行SQL注入的檢測。

4.Sqlmap設置Cookie頭

Sqlmap中用來設置Cookie的參數,包括:

使用場景:

(1) Web應用程序具有基於Cookie驗證的過程。

例如某網站登錄後臺之後存在注入漏洞,現在用Sqlmap進行檢測,設置相應的Cookie,使得每一個Sqlmap探測在HTTP請求中都加入了Cookie值,繞過登錄限制。

(2) 利用Cookie值上的SQL注入漏洞。

Sqlmap使用Cookie過程如下:

(1) 登錄或瀏覽頁面。

(2) 打開審計工具或代理攔截,複製Cookie。

(3) 在Sqlmap中使用–cookie粘貼Cookie。

這裏同樣以DVWA爲例,打開網頁輸入URL並登錄。

接着通過F12打開工具獲取Cookie值。

調用Sqlmap設置Cookie並獲取相關信息。注意,這裏不加Cookie探測會報302錯誤,同時這裏的Cookie值是需要登錄系統之後才能獲取的。後續作者會繼續學習,希望能分享一些示例。

如果在通信過程中,Web應用程序使用Set-Cookie標頭進行響應,Sqlmap將在所有進一步的HTTP請求中自動使用其值作爲Cookie標頭。Sqlmap還將爲SQL注入自動測試這些值。這可以通過提供–drop-set-cookie,Sqlmap將忽略任何即將到來的Set-Cookie頭來避免。

反之亦然,如果您提供了一個帶有選項的HTTP Cookie報頭——Cookie和目標URL在任何時候發送一個HTTP set-Cookie報頭,Sqlmap將詢問您要以下HTTP請求使用哪組Cookie。load-cookie可以用來提供包含Netscape/wget格式的Cookie的特殊文件。

五.總結

又忙了16個小時,發現自己網絡安全方向的基礎非常薄弱,有太多實踐知識想學,太多學術論文想看,每天都在忙碌,過程非常艱辛,博士哪有這麼好畢業。但是這種苦中帶甜,充實的滋味又讓我陶醉,還有遠方的女神、許多朋友和博友的陪伴。希望未來在網絡態勢感知、惡意代碼檢測、嫌疑識別和知識圖譜方面能再深入點,多讀文獻,多找創新,加油。

天行健,君子以自強不息。

地勢坤,君子以厚德載物。

最後希望基礎性文章對您有所幫助,作者也是這個領域的菜鳥一枚,希望與您共同進步,共勉。


網絡安全自學篇(二十五)| Shodan搜索引擎詳解及Python命令行調用

網絡安全自學篇(二十四)| 基於機器學習的入侵檢測和攻擊識別——以KDD CUP99數據集爲例

網絡安全自學篇(二十三)| Web安全學習路線及木馬、病毒和防禦初探

網絡安全自學篇(二十二)| 基於機器學習的惡意請求識別及安全領域中的機器學習

網絡安全自學篇(二十一)| Web滲透之網站信息、域名信息、端口信息、敏感信息及指紋信息收集

網絡安全自學篇(二十)| Powershell基礎入門及常見用法(二)

網絡安全自學篇(十九)| Powershell基礎入門及常見用法(一)

網絡安全自學篇(十八)| XSS跨站腳本攻擊原理及代碼攻防演示(一)

網絡安全自學篇(十七)|  Python攻防之構建Web目錄掃描器及ip代理池(四)

網絡安全自學篇(十六)| Python攻防之弱口令、自定義字典生成及網站暴庫防護

網絡安全自學篇(十五)| Python攻防之多線程、C段掃描和數據庫編程(二)

網絡安全自學篇(十四)| Python攻防之基礎常識、正則表達式、Web編程和套接字通信(一)

網絡安全自學篇(十三)| Wireshark抓包原理(ARP劫持、MAC泛洪)及數據流追蹤和圖像抓取(二)

網絡安全自學篇(十二)| Wireshark安裝入門及抓取網站用戶名密碼(一)

網絡安全自學篇(十一)| 虛擬機VMware+Kali安裝入門及Sqlmap基本用法

網絡安全自學篇(十)| 論文之基於機器學習算法的主機惡意代碼

網絡安全自學篇(九)| 社會工程學之基礎概念、IP獲取、IP物理定位、文件屬性

網絡安全自學篇(八)| Web漏洞及端口掃描之Nmap、ThreatScan和DirBuster工具

網絡安全自學篇(七)| 快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討

網絡安全自學篇(六)| OllyDbg動態分析工具基礎用法及Crakeme逆向破解

網絡安全自學篇(五)| IDA Pro反彙編工具初識及逆向工程解密實戰

網絡安全自學篇(四)| 實驗吧CTF實戰之WEB滲透和隱寫術解密

網絡安全自學篇(三)| Burp Suite工具安裝配置、Proxy基礎用法及暴庫示例

網絡安全自學篇(二)| Chrome瀏覽器保留密碼功能滲透解析及登錄加密入門筆記

網絡安全自學篇(一)| 入門筆記之看雪Web安全學習及異或解密示

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