sqlmap全參數詳解
sqlmap是在sql注入中非常常用的一款工具,由於其開源性,適合從個人到企業,從學習到實戰,各領域各階段的應用,我們還可以將它改造成我們自己獨有的滲透利器。這款工具中,大大小小191個參數,在這篇文章中,我將一一介紹,其實很多參數我也沒有使用過,所以有一些是自己的經驗,還有一些是網上搜集的資料和sqlmap文檔的記載。
參數簡介
以下是使用-hh參數看見的全部的sqlmap參數,我們分階段進行講解。
sqlmap.py -hh
___
__H__
___ ___[,]_____ ___ ___ {1.2.3.41#dev}
|_ -| . ['] | .'| . |
|___|_ [']_|_|_|__,| _|
|_|V |_| http://sqlmap.org
Usage: sqlmap.py [options]
Options:
-h, --help Show basic help message and exit -hh Show advanced help message and exit --version Show program's version number and exit -v VERBOSE Verbosity level: 0-6 (default 1) Target: At least one of these options has to be provided to define the target(s) -d DIRECT Connection string for direct database connection -u URL, --url=URL Target URL (e.g. "http://www.site.com/vuln.php?id=1") -l LOGFILE Parse target(s) from Burp or WebScarab proxy log file -x SITEMAPURL Parse target(s) from remote sitemap(.xml) file -m BULKFILE Scan multiple targets given in a textual file -r REQUESTFILE Load HTTP request from a file -g GOOGLEDORK Process Google dork results as target URLs -c CONFIGFILE Load options from a configuration INI file 。。。。。。。。。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
Options
-h, --help查看幫助,沒什么好說的-hh查看全部的幫助--version查看版本-v顯示信息的級別,一共有六級:0:只顯示python 錯誤和一些嚴重信息;1:顯示基本信息(默認);2:顯示debug信息;3:顯示注入過程的payload;4:顯示http請求包;5:顯示http響應頭;7:顯示http相應頁面。
Target
-d直接連目標后端接數據庫,而不是使用sql注入漏洞,直接通過目標的偵聽端口連接,當然需要有目標數據庫的賬號名和密碼。例:-d "mysql://user:password@192.168.75.128:3389/databasename" --dbs查詢非常快。-u指定一個url連接,url中必須有?xx=xx才行(最常用的參數)例:-u "www.abc.com/index.php?id=1"-l后接一個log文件,可以是burp等的代理的log文件,之后sqlmap會掃描log中的所有記錄。例:-l log.txt-x站點地圖,提交給sql一個xml文件。-m后接一個txt文件,文件中是多個url,sqlmap會自動化的檢測其中的所有url。例:-m target.txt-r可以將一個post請求方式的數據包保存在一個txt中,sqlmap會通過post方式檢測目標。例:-r post.txt-g使用google引擎搜索類似的網址,並且多目標檢測。例:-g "inurl:\".php?id=1\""\是轉義-c將使用的命令寫在一個文件中,讓sqlmap執行文件中的命令,我們可以用--save命令將配置寫入文件。
Request
--method=METHOD指定是get方法還是post方法。例:--method=GET--method=POST--data=DATA指明參數是哪些。例:-u "www.abc.com/index.php?id=1" --data="name=1&pass=2"--param-del=PARA.指明使用的變量分割符。例:-u "www.abc.com/index.php?id=1" --data="name=1;pass=2" --param-del=";"--cookie=COOKIE指定測試時使用的cookie,通常在一些需要登錄的站點會使用。例:-u "www.abc.com/index.php?id=1" --cookie="a=1;b=2"--cookie-del=COO..和前面的--param-del=PARA.類似,就是指明分割cookie的字符。--load-cookies=L..從包含Netscape / wget格式的cookie的文件中加載cookie。--drop-set-cookie默認情況下,sqlmap是開啟set-cookie功能的,也就是當收到一個含有set-cookie的http包的時候,下次sql會使用新的cookie進行發包,如果使用這條命令,就會關閉這個功能。在level>=2時會檢測cookie注入。--user-agent=AGENT指定一個user-agent的值進行測試。例:--user-agent="aaaaaaa"默認情況下,sqlmap會使用自己的user-agent進行測試(所以很多服務器發現user-agent是sqlmap的數據包直接認為是入侵),sqlmap自己的user-agent是:sqlmap/1.0-dev-nongit-201603020a89(http://sqlmap.org)--random-agent使用隨機user-agent進行測試。sqlmap有一個文件中儲存了各種各樣的user-agent,文件在sqlmap/txt/user-agent.txt在level>=3時會檢測user-agent注入。--host=HOST指定http包中的host頭參數。例:--host="aaaaaa"在level>=5時才會檢查host頭注入。\n是換行--referer=REFERER指定http包中的refere字段。例:--refere="aaaaa"在level>=3時才會檢測refere注入。-H --headers額外的header頭,每個占一行。例:--headers="host:www.a.com\nUser-Agent:yuangh"--headers=HEADERS跟上邊一樣,再舉一個例子:--headers="Accept-Language: fr\nETag: 123"注意所有構造http包的部分均區分大小寫--auth-type=AUTH..基於http身份驗證的種類。例:--auth-type Basic/Digest/NTLM一共有三種認證方式。--auth-cred=AUTH..使用的認證,例:--auth-type Basic --auth-cred "user:password"--auth-file=AUTH..使用.PEM文件中的認證。例:--auth-file="AU.PEM"少見。--ignore-code=IG..無視http狀態碼。例:--ignore-code=401--ignore-proxy無視本地的代理,有時候機器會有最基本的代理配置,在掃描本地網段的時候會很麻煩,使用這個參數可以忽略代理設置。--ignore-redirects無視http重定向,比如登錄成功會跳轉到其他網頁,可使用這個忽略掉。--ignore-timeouts忽略連接超時。--proxy=PROXY指定一個代理。例:--proxy="127.0.0.1:8087"使用GoAgent代理。--proxy-cred=PRO..代理需要的認證。例:--proxy="name:password"--proxy-file=PRO..從一個文件加載代理的認證。--tor使用tor匿名網絡,不懂。--tor-port=TORPORT設置默認的tor代理端口,不懂+2。--tor-type=TORTYPE設置tor代理種類,(HTTP, SOCKS4 or SOCKS5 (默認)),不懂+3。--check-tor檢查是否正確使用Tor,不懂+4。--delay=DELAY每次發包的延遲時間,單位為秒,浮點數。例:--delay 2.5有時候頻繁的發包會引起服務器注意,需要使用delay降低發包頻率。--timeout=TIMEOUT請求超時的時間,單位為秒,浮點數,默認30s。--retries=RETRIES超時重連次數,默認三次。例:--retries=5--randomize=RPARAM參數的長度,類型與輸入值保持一致的前提下,每次請求換參數的值。有時候反復的提交同一個參數會引起服務器注意。--safe-url=SAFEURL用法和-u類似,就是一個加載測試url的方法,但額外功能是防止有時候時間長了不通訊服務器會銷毀session,開啟這種功能會隔一段時間發一個包保持session。--safe-post=SAFE..和上面的一樣,只是使用post的方式發送數據。--safe-req=SAFER..和上面的一樣,只是從一個文件獲得目標。--safe-freq=SAFE..頻繁的發送錯誤的請求,服務器也會銷毀session或者其他懲罰方式,開啟這個功能之后,發幾次錯的就會發一次對的。通常用於盲注。--skip-urlencode跳過url編碼,畢竟不排除有的奇葩網站url不遵守RFC標准編碼。--csrf-token=CSR..保持csrf令牌的token。--csrf-url=CSRFURL訪問url地址獲取csrf的token。--force-ssl強制使用ssl。--hpp使用http參數污染,通常http傳遞參數會以名稱-值對的形勢出現,通常在一個請求中,同樣名稱的參數只會出現一次。但是在HTTP協議中是允許同樣名稱的參數出現多次的,就可能造成參數篡改。--eval=EVALCODE執行一段指定的python代碼。例:-u "www.abc.com/index.php?id=1" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"
Optimization
-o開啟下面三項(--predict-output,--keep-alive,--null-connection)--predict-output預設的輸出,可以理解為猜一個表存在不存在,根據服務器返回值來進行判斷,有點類似暴力破解,但和暴力破解又不同,這個是一個范圍性的暴力破解,一次一次的縮小范圍。--keep-alive使用http(s)長鏈接,性能更好,避免重復建立鏈接的開銷,但占用服務器資源,而且與--proxy不兼容。--null-connection只看頁面返回的大小值,而不看具體內容,通常用於盲注或者布爾的判斷,只看對錯,不看內容。--threads=THREADS開啟多線程,默認為1,最大10。和--predict-output不兼容。
Injection
-p TESTPARAMETER知道測試的參數,使用這個的話--level參數就會失效。例:-p "user-agent,refere"--skip=SKIP排除指定的參數。例:--level 5 --skip="id,user-agent"--skip-static跳過測試靜態的參數。--param-exclude=..使用正則表達式跳過測試參數。--dbms=DBMS指定目標數據庫類型。例:--dbms="MySQL<5.0>"Oracle<11i>Microsoft SQL Server<2005>--dbms-cred=DBMS..數據庫的認證。利:--dbms-cred="name:password"--os=OS指定目標操作系統。例:--os="Linux/Windows"--invalid-bignum通常情況下sqlmap使用負值使參數失效,比如id=1->id=-1,開啟這個之后使用大值使參數失效,如id=9999999999。--invalid-logical使用邏輯使參數失效,如id=1 and 1=2。--invalid-string使用隨機字符串使參數失效。--no-cast獲取數據時,sqlmap會將所有數據轉換成字符串,並用空格代替null。--no-escape用於混淆和避免出錯,使用單引號的字符串的時候,有時候會被攔截,sqlmap使用char()編碼。例如:select “a”-> select char(97)。--prefix=PREFIX指定payload前綴,有時候我們猜到了服務端代碼的閉合情況,需要使用這個來指定一下。例:-u "www.abc.com/index?id=1" -p id --prefix")" --suffix "and ('abc'='abc"--suffix=SUFFIX指定后綴,例子同上。--tamper=TAMPER使用sqlmap自帶的tamper,或者自己寫的tamper,來混淆payload,通常用來繞過waf和ips。
Detection
--level=LEVEL設置測試的等級(1-5,默認為1)lv2:cookie; lv3:user-agent,refere; lv5:host在sqlmap/xml/payloads文件內可以看見各個level發送的payload--risk=RISK風險(1-4,默認1)升高風險等級會增加數據被篡改的風險。risk 2:基於事件的測試;risk 3:or語句的測試;risk 4:update的測試--string=STRING在基於布爾的注入時,有的時候返回的頁面一次一個樣,需要我們自己判斷出標志着返回正確頁面的標志,會根據頁面的返回內容這個標志(字符串)判斷真假,可以使用這個參數來制定看見什么字符串就是真。--not-string=NOT..同理,這個參數代表看不見什么才是真。--regexp=REGEXP通常和上面兩種連用,使用正則表達式來判斷。--code=CODE也是在基於布爾的注入時,只不過指定的是http返回碼。--text-only同上,只不過指定的是頁面里的一段文本內容。--titles同上,只不過指定的是頁面的標題。
Techniques
--technique=TECH指定所使用的技術(B:布爾盲注;E:報錯注入;U:聯合查詢注入;S:文件系統,操作系統,注冊表相關注入;T:時間盲注; 默認全部使用)--time-sec=TIMESEC在基於時間的盲注的時候,指定判斷的時間,單位秒,默認5秒。--union-cols=UCOLS聯合查詢的嘗試列數,隨level增加,最多支持50列。例:--union-cols 6-9--union-char=UCHAR聯合查詢默認使用的占列的是null,有些情況null可能會失效,可以手動指定其他的。例:--union-char 1--union-from=UFROM聯合查詢從之前的查詢結果中選擇列,和上面的類似。--dns-domain=DNS..如果你控制了一台dns服務器,使用這個可以提高效率。例:--dns-domain 123.com--second-order=S..在這個頁面注入的結果,在另一個頁面顯示。例:--second-order 1.1.1.1/b.php
Fingerprint
-f, --fingerprint指紋信息,返回DBMS,操作系統,架構,補丁等信息。
Enumeration
-a, --all查找全部,很暴力。直接用-a-b, --banner查找數據庫管理系統的標識。直接用-b--current-user當前用戶,常用,直接用--current-user--current-db當前數據庫,常用,直接用--current-db--hostname主機名,直接用--hostname--is-dba--users查詢一共都有哪些用戶,常用,直接用--users--passwords查詢用戶密碼的哈希,常用,直接用--passwords--privileges查看特權,常用。例:--privileges -U username (CU 就是當前用戶)--roles查看一共有哪些角色(權限),直接用--roles--dbs目標服務器中有什么數據庫,常用,直接用--dbs--tables目標數據庫有什么表,常用,直接用--tables--columns目標表中有什么列,常用,直接用--colums--schema目標數據庫數據庫系統管理模式。--count查詢結果返回一個數字,即多少個。--dump查詢指定范圍的全部數據。例:--dump -D admin -T admin -C username--dump-all查詢全部數據。例:--dump-all --exclude-sysdbs--search搜索列、表和/或數據庫名稱。--comments檢索數據庫的備注。-D DB指定從某個數據庫查詢數據,常用。例:-D admindb-T TBL指定從某個表查詢數據,常用。例:-T admintable-C COL指定從某個列查詢數據,常用。例:-C username-X EXCLUDE指定數據庫的標識符。-U USER一個用戶,通常和其他連用。例:--privileges -U username (CU 就是當前用戶)--exclude-sysdbs除了系統數據庫。--pivot-column=P..樞軸列名,不懂。--where=DUMPWHERE在dump表時使用where限制條件。--start=LIMITSTART設置一個起始,通常和--dunmp連用。--stop=LIMITSTOP同上,設置一個結束。--first=FIRSTCHAR以第一個查詢輸出的字符檢索,不懂。--last=LASTCHAR以最后一個查詢輸出的字符檢索,不懂+2。--sql-query=QUERY執行一個sql語句。--sql-shell創建一個sql的shell。--sql-file=SQLFILE執行一個給定文件中的sql語句
Brute force
--common-tables檢查有沒有記錄表信息的公共表,比如mysql>=5.0會有一個information_schema庫,儲存了整個數據庫的基本信息。有這個會方便很多。--common-columns有沒有記錄公共列的表,比如Access就沒有列信息。這兩種方法都會使用暴力破解。
User-defined function injection
--udf-inject編譯共享庫創建並上傳至DB Server,生成UDF實現高級注入,不懂。--shared-lib=SHLIB同上,不懂。
File system access
--file-read=RFILE讀取目標站點的一個文件。例:--file-read="/etc/password"--file-write=WFILE寫入到目標站點的一個文件,通常和--sql-query連用。例:--sql-query="select "一句話木馬" --file-write="shell.php"--file-dest=DFILE同上,只是使用絕對路徑寫入。
Operating system access
--os-cmd=OSCMD執行一句系統命令。例:--os-shell="ipconfig -all"--os-shell創建一個對方操作系統的shell,遠程執行系統命令。直接用即可--os-shell--os-pwn同上,獲取一個OOB shell,meterpreter或VNC。--os-smbrelay同上,一鍵獲取一個OOB shell,meterpreter或VNC。--os-bof利用緩沖區溢出。--priv-esc自動提權,數據庫進程用戶權限提升。--msf-path=MSFPATHMetasploit Framework本地的安裝路徑。--tmp-path=TMPPATH遠程臨時文件目錄的絕對路徑。
Windows registry access
--reg-read讀一個Windows注冊表。--reg-add添加一個注冊表。--reg-del刪一個注冊表。--reg-key=REGKEY和之前連用,注冊表key值。--reg-value=REGVAL和之前連用,注冊表值。--reg-data=REGDATA和之前連用,注冊表數據。--reg-type=REGTYPE和之前連用,注冊表類別。
General
-s SESSIONFILE從一個文件加載保存的session。-t TRAFFICFILE記錄流文件的保存位置。--batch批處理,在檢測過程中會問用戶一些問題,使用這個參數統統使用默認值。--binary-fields=..指定二進制結果的字段。--check-internet在評估目標之前檢查互聯網連接,新功能。--crawl=CRAWLDEPTH從起始位置爬取的深度。例:--crawl=3--crawl-exclude=..除了哪些頁面之外全部爬取。例:--crawl-exclude="abc.com/logout.php"--csv-del=CSVDEL指定在CSV輸出中使用的分隔字符。--charset=CHARSET強制字符串編碼。例:--charset=GBK--dump-format=DU..轉儲數據的格式 ,有(CSV (默認), HTML,SQLITE)三種。--encoding=ENCOD..用於數據檢索的字符編碼。例:--encoding=GBK--eta顯示每個輸出的預計到達時間 。--flush-session清空會話信息。--forms在目標URL上解析和測試表單。--fresh-queriessqlmap每次查詢都會講查詢結果儲存在.sqlmap文件夾中,下次再有相同測查詢會調用上次的查詢結果,使用這個參數可以忽略文件中有的記載結果,重新查詢。--har=HARFILE將所有http流量記錄在一個har文件中。--hexdump非ascii字符時,將其編碼為16進制,收到后解碼還原。--output-dir=OUT..輸出結果至文件。例:--output-dir=/tmp--parse-errors解析並顯示報錯信息。--save=SAVECONFIG將使用的命令保存到配置ini文件--scope=SCOPE和-l類似,只是這個可以過濾信息,使用正則表達式過濾網址。--test-filter=TE..根據有效負載和/或標題,不懂。--test-skip=TEST..根據有效負載和/或標題跳過測試,不懂+2。--update更新sqlmap。
Miscellaneous
-z MNEMONICS參數助記符,比較傻的一個功能。例:-z "bat,randoma,ign,tec=BEU"其實就是只要你寫的字母可以唯一匹配其他參數,就可以生效。--alert=ALERT在找到SQL注入時運行主機OS命令。--answers=ANSWERS設置問題答案,在剛剛的--batch可以跳過很多問題,但只是選擇默認值,可以使用者個參數對特定問題設定特定答案。例:--answer "extending=N"--beep在問題和/或當SQL注入被發現時發出嘟嘟聲。。。。。。。。。--cleanup從SqLMAP特定的UDF和表中找數據庫,類似暴力破解。--dependencies檢查缺少的Sql映射依賴項。--disable-coloring禁用控制台輸出着色。--gpage=GOOGLEPAGE在指定頁使用google結果,不懂。--identify-waf識別目標的防火牆。--mobilecosplay 手機。--offline在脫機模式下工作。--purge-output情況輸出文件夾。--skip-waf跳過WAF/IPS/IDS保護的啟發式檢測。--smart有大量檢測目標時候,只選擇基於錯誤的檢測。--sqlmap-shell創建一個交互的sqlmap_shell,不懂。--tmp-dir=TMPDIR更改存儲臨時文件的本地目錄。--web-root=WEBROOT設置Web服務器文檔根目錄。例:--web-root="/var/www"--wizard新手教程。
