1. 程式人生 > >Sqlmap全引數詳解

Sqlmap全引數詳解

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 。。。。。。。。。

Options

  1. -h, --help 檢視幫助,沒什麼好說的
  2. -hh 檢視全部的幫助
  3. --version 檢視版本
  4. -v 顯示資訊的級別,一共有六級:0:只顯示python 錯誤和一些嚴重資訊;1:顯示基本資訊(預設);2:顯示debug資訊;3:顯示注入過程的payload;4:顯示http請求包;5:顯示http響應頭;7:顯示http相應頁面。

Target

  1. -d 直接連目標後端接資料庫,而不是使用sql注入漏洞,直接通過目標的偵聽埠連線,當然需要有目標資料庫的賬號名和密碼。例:-d "mysql://user:[email protected]:3389/databasename" --dbs 查詢非常快。
  2. -u 指定一個url連線,url中必須有?xx=xx 才行(最常用的引數)例:-u "www.abc.com/index.php?id=1"
  3. -l 後接一個log檔案,可以是burp等的代理的log檔案,之後sqlmap會掃描log中的所有記錄。例: -l log.txt
  4. -x 站點地圖,提交給sql一個xml檔案。
  5. -m 後接一個txt檔案,檔案中是多個url,sqlmap會自動化的檢測其中的所有url。例: -m target.txt
  6. -r 可以將一個post請求方式的資料包儲存在一個txt中,sqlmap會通過post方式檢測目標。例: -r post.txt
  7. -g 使用google引擎搜尋類似的網址,並且多目標檢測。例: -g "inurl:\".php?id=1\"" \是轉義
  8. -c 將使用的命令寫在一個檔案中,讓sqlmap執行檔案中的命令,我們可以用--save命令將配置寫入檔案。

Request

  1. --method=METHOD 指定是get方法還是post方法。例: --method=GET --method=POST
  2. --data=DATA 指明引數是哪些。例:-u "www.abc.com/index.php?id=1" --data="name=1&pass=2"
  3. --param-del=PARA. 指明使用的變數分割符。例: -u "www.abc.com/index.php?id=1" --data="name=1;pass=2" --param-del=";"
  4. --cookie=COOKIE 指定測試時使用的cookie,通常在一些需要登入的站點會使用。例: -u "www.abc.com/index.php?id=1" --cookie="a=1;b=2"
  5. --cookie-del=COO.. 和前面的 --param-del=PARA. 類似,就是指明分割cookie的字元。
  6. --load-cookies=L.. 從包含Netscape / wget格式的cookie的檔案中載入cookie。
  7. --drop-set-cookie 預設情況下,sqlmap是開啟set-cookie功能的,也就是當收到一個含有set-cookie的http包的時候,下次sql會使用新的cookie進行發包,如果使用這條命令,就會關閉這個功能。在level>=2時會檢測cookie注入。
  8. --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)
  9. --random-agent 使用隨機user-agent進行測試。sqlmap有一個檔案中儲存了各種各樣的user-agent,檔案在sqlmap/txt/user-agent.txt 在level>=3時會檢測user-agent注入。
  10. --host=HOST 指定http包中的host頭引數。例: --host="aaaaaa" 在level>=5時才會檢查host頭注入。\n是換行
  11. --referer=REFERER 指定http包中的refere欄位。例: --refere="aaaaa" 在level>=3時才會檢測refere注入。
  12. -H --headers 額外的header頭,每個佔一行。例:--headers="host:www.a.com\nUser-Agent:yuangh"
  13. --headers=HEADERS 跟上邊一樣,再舉一個例子: --headers="Accept-Language: fr\nETag: 123" 注意所有構造http包的部分均區分大小寫
  14. --auth-type=AUTH.. 基於http身份驗證的種類。例: --auth-type Basic/Digest/NTLM 一共有三種認證方式。
  15. --auth-cred=AUTH.. 使用的認證,例: --auth-type Basic --auth-cred "user:password"
  16. --auth-file=AUTH.. 使用.PEM檔案中的認證。例:--auth-file="AU.PEM" 少見。
  17. --ignore-code=IG.. 無視http狀態碼。例: --ignore-code=401
  18. --ignore-proxy 無視本地的代理,有時候機器會有最基本的代理配置,在掃描本地網段的時候會很麻煩,使用這個引數可以忽略代理設定。
  19. --ignore-redirects 無視http重定向,比如登入成功會跳轉到其他網頁,可使用這個忽略掉。
  20. --ignore-timeouts 忽略連線超時。
  21. --proxy=PROXY 指定一個代理。例: --proxy="127.0.0.1:8087" 使用GoAgent代理。
  22. --proxy-cred=PRO.. 代理需要的認證。例: --proxy="name:password"
  23. --proxy-file=PRO.. 從一個檔案載入代理的認證。
  24. --tor 使用tor匿名網路,不懂。
  25. --tor-port=TORPORT 設定預設的tor代理埠,不懂+2。
  26. --tor-type=TORTYPE 設定tor代理種類,(HTTP, SOCKS4 or SOCKS5 (預設)),不懂+3。
  27. --check-tor 檢查是否正確使用Tor,不懂+4。
  28. --delay=DELAY 每次發包的延遲時間,單位為秒,浮點數。例:--delay 2.5 有時候頻繁的發包會引起伺服器注意,需要使用delay降低發包頻率。
  29. --timeout=TIMEOUT 請求超時的時間,單位為秒,浮點數,預設30s。
  30. --retries=RETRIES 超時重連次數,預設三次。例: --retries=5
  31. --randomize=RPARAM 引數的長度,型別與輸入值保持一致的前提下,每次請求換引數的值。有時候反覆的提交同一個引數會引起伺服器注意。
  32. --safe-url=SAFEURL 用法和-u類似,就是一個載入測試url的方法,但額外功能是防止有時候時間長了不通訊伺服器會銷燬session,開啟這種功能會隔一段時間發一個包保持session。
  33. --safe-post=SAFE.. 和上面的一樣,只是使用post的方式傳送資料。
  34. --safe-req=SAFER.. 和上面的一樣,只是從一個檔案獲得目標。
  35. --safe-freq=SAFE.. 頻繁的傳送錯誤的請求,伺服器也會銷燬session或者其他懲罰方式,開啟這個功能之後,發幾次錯的就會發一次對的。通常用於盲注。
  36. --skip-urlencode 跳過url編碼,畢竟不排除有的奇葩網站url不遵守RFC標準編碼。
  37. --csrf-token=CSR.. 保持csrf令牌的token。
  38. --csrf-url=CSRFURL 訪問url地址獲取csrf的token。
  39. --force-ssl 強制使用ssl。
  40. --hpp 使用http引數汙染,通常http傳遞引數會以名稱-值對的形勢出現,通常在一個請求中,同樣名稱的引數只會出現一次。但是在HTTP協議中是允許同樣名稱的引數出現多次的,就可能造成引數篡改。
  41. --eval=EVALCODE 執行一段指定的python程式碼。例: -u "www.abc.com/index.php?id=1" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

Optimization

  1. -o 開啟下面三項(--predict-output--keep-alive--null-connection
  2. --predict-output 預設的輸出,可以理解為猜一個表存在不存在,根據伺服器返回值來進行判斷,有點類似暴力破解,但和暴力破解又不同,這個是一個範圍性的暴力破解,一次一次的縮小範圍。
  3. --keep-alive 使用http(s)長連結,效能更好,避免重複建立連結的開銷,但佔用伺服器資源,而且與--proxy不相容。
  4. --null-connection 只看頁面返回的大小值,而不看具體內容,通常用於盲注或者布林的判斷,只看對錯,不看內容。
  5. --threads=THREADS 開啟多執行緒,預設為1,最大10。和 --predict-output 不相容。

Injection

  1. -p TESTPARAMETER 知道測試的引數,使用這個的話--level 引數就會失效。例: -p "user-agent,refere"
  2. --skip=SKIP 排除指定的引數。例: --level 5 --skip="id,user-agent"
  3. --skip-static 跳過測試靜態的引數。
  4. --param-exclude=.. 使用正則表示式跳過測試引數。
  5. --dbms=DBMS 指定目標資料庫型別。例: --dbms="MySQL<5.0>" Oracle<11i> Microsoft SQL Server<2005>
  6. --dbms-cred=DBMS.. 資料庫的認證。利: --dbms-cred="name:password"
  7. --os=OS 指定目標作業系統。例: --os="Linux/Windows"
  8. --invalid-bignum 通常情況下sqlmap使用負值使引數失效,比如id=1->id=-1,開啟這個之後使用大值使引數失效,如id=9999999999。
  9. --invalid-logical 使用邏輯使引數失效,如id=1 and 1=2。
  10. --invalid-string 使用隨機字串使引數失效。
  11. --no-cast 獲取資料時,sqlmap會將所有資料轉換成字串,並用空格代替null。
  12. --no-escape 用於混淆和避免出錯,使用單引號的字串的時候,有時候會被攔截,sqlmap使用char()編碼。例如:select “a”-> select char(97)。
  13. --prefix=PREFIX 指定payload字首,有時候我們猜到了服務端程式碼的閉合情況,需要使用這個來指定一下。例: -u "www.abc.com/index?id=1" -p id --prefix")" --suffix "and ('abc'='abc"
  14. --suffix=SUFFIX 指定字尾,例子同上。
  15. --tamper=TAMPER 使用sqlmap自帶的tamper,或者自己寫的tamper,來混淆payload,通常用來繞過waf和ips。

Detection

  1. --level=LEVEL 設定測試的等級(1-5,預設為1)lv2:cookie; lv3:user-agent,refere; lv5:host 在sqlmap/xml/payloads檔案內可以看見各個level傳送的payload
  2. --risk=RISK 風險(1-4,預設1)升高風險等級會增加資料被篡改的風險。risk 2:基於事件的測試;risk 3:or語句的測試;risk 4:update的測試
  3. --string=STRING 在基於布林的注入時,有的時候返回的頁面一次一個樣,需要我們自己判斷出標誌著返回正確頁面的標誌,會根據頁面的返回內容這個標誌(字串)判斷真假,可以使用這個引數來制定看見什麼字串就是真。
  4. --not-string=NOT.. 同理,這個引數代表看不見什麼才是真。
  5. --regexp=REGEXP 通常和上面兩種連用,使用正則表示式來判斷。
  6. --code=CODE 也是在基於布林的注入時,只不過指定的是http返回碼。
  7. --text-only 同上,只不過指定的是頁面裡的一段文字內容。
  8. --titles 同上,只不過指定的是頁面的標題。

Techniques

  1. --technique=TECH 指定所使用的技術(B:布林盲注;E:報錯注入;U:聯合查詢注入;S:檔案系統,作業系統,登錄檔相關注入;T:時間盲注; 預設全部使用)
  2. --time-sec=TIMESEC 在基於時間的盲注的時候,指定判斷的時間,單位秒,預設5秒。
  3. --union-cols=UCOLS 聯合查詢的嘗試列數,隨level增加,最多支援50列。例: --union-cols 6-9
  4. --union-char=UCHAR 聯合查詢預設使用的佔列的是null,有些情況null可能會失效,可以手動指定其他的。例: --union-char 1
  5. --union-from=UFROM 聯合查詢從之前的查詢結果中選擇列,和上面的類似。
  6. --dns-domain=DNS.. 如果你控制了一臺dns伺服器,使用這個可以提高效率。例: --dns-domain 123.com
  7. --second-order=S.. 在這個頁面注入的結果,在另一個頁面顯示。例: --second-order 1.1.1.1/b.php

Fingerprint

  1. -f, --fingerprint 指紋資訊,返回DBMS,作業系統,架構,補丁等資訊。

Enumeration

  1. -a, --all 查詢全部,很暴力。直接用-a
  2. -b, --banner 查詢資料庫管理系統的標識。直接用-b
  3. --current-user 當前使用者,常用,直接用--current-user
  4. --current-db 當前資料庫,常用,直接用--current-db
  5. --hostname 主機名,直接用--hostname
  6. --is-dba
  7. --users 查詢一共都有哪些使用者,常用,直接用--users
  8. --passwords 查詢使用者密碼的雜湊,常用,直接用--passwords
  9. --privileges 檢視特權,常用。例: --privileges -U username (CU 就是當前使用者)
  10. --roles 檢視一共有哪些角色(許可權),直接用--roles
  11. --dbs 目標伺服器中有什麼資料庫,常用,直接用--dbs
  12. --tables 目標資料庫有什麼表,常用,直接用--tables
  13. --columns 目標表中有什麼列,常用,直接用--colums
  14. --schema 目標資料庫資料庫系統管理模式。
  15. --count 查詢結果返回一個數字,即多少個。
  16. --dump 查詢指定範圍的全部資料。例: --dump -D admin -T admin -C username
  17. --dump-all 查詢全部資料。例: --dump-all --exclude-sysdbs
  18. --search 搜尋列、表和/或資料庫名稱。
  19. --comments 檢索資料庫的備註。
  20. -D DB 指定從某個資料庫查詢資料,常用。例: -D admindb
  21. -T TBL 指定從某個表查詢資料,常用。例: -T admintable
  22. -C COL 指定從某個列查詢資料,常用。例: -C username
  23. -X EXCLUDE 指定資料庫的識別符號。
  24. -U USER 一個使用者,通常和其他連用。例: --privileges -U username (CU 就是當前使用者)
  25. --exclude-sysdbs 除了系統資料庫。
  26. --pivot-column=P.. 樞軸列名,不懂。
  27. --where=DUMPWHERE 在dump表時使用where限制條件。
  28. --start=LIMITSTART 設定一個起始,通常和--dunmp連用。
  29. --stop=LIMITSTOP 同上,設定一個結束。
  30. --first=FIRSTCHAR 以第一個查詢輸出的字元檢索,不懂。
  31. --last=LASTCHAR 以最後一個查詢輸出的字元檢索,不懂+2。
  32. --sql-query=QUERY 執行一個sql語句。
  33. --sql-shell 建立一個sql的shell。
  34. --sql-file=SQLFILE 執行一個給定檔案中的sql語句

Brute force

  1. --common-tables 檢查有沒有記錄表資訊的公共表,比如mysql>=5.0會有一個information_schema庫,儲存了整個資料庫的基本資訊。有這個會方便很多。
  2. --common-columns 有沒有記錄公共列的表,比如Access就沒有列資訊。這兩種方法都會使用暴力破解。

User-defined function injection

  1. --udf-inject 編譯共享庫建立並上傳至DB Server,生成UDF實現高階注入,不懂。
  2. --shared-lib=SHLIB 同上,不懂。

File system access

  1. --file-read=RFILE 讀取目標站點的一個檔案。例: --file-read="/etc/password"
  2. --file-write=WFILE 寫入到目標站點的一個檔案,通常和--sql-query 連用。例: --sql-query="select "一句話木馬" --file-write="shell.php"
  3. --file-dest=DFILE 同上,只是使用絕對路徑寫入。

Operating system access

  1. --os-cmd=OSCMD 執行一句系統命令。例: --os-shell="ipconfig -all"
  2. --os-shell 建立一個對方作業系統的shell,遠端執行系統命令。直接用即可--os-shell
  3. --os-pwn 同上,獲取一個OOB shell,meterpreter或VNC。
  4. --os-smbrelay 同上,一鍵獲取一個OOB shell,meterpreter或VNC。
  5. --os-bof 利用緩衝區溢位。
  6. --priv-esc 自動提權,資料庫程序使用者許可權提升。
  7. --msf-path=MSFPATH Metasploit Framework本地的安裝路徑。
  8. --tmp-path=TMPPATH 遠端臨時檔案目錄的絕對路徑。

Windows registry access

  1. --reg-read 讀一個Windows登錄檔。
  2. --reg-add 新增一個登錄檔。
  3. --reg-del 刪一個登錄檔。
  4. --reg-key=REGKEY 和之前連用,登錄檔key值。
  5. --reg-value=REGVAL 和之前連用,登錄檔值。
  6. --reg-data=REGDATA 和之前連用,登錄檔資料。
  7. --reg-type=REGTYPE 和之前連用,登錄檔類別。

General

  1. -s SESSIONFILE 從一個檔案載入儲存的session。
  2. -t TRAFFICFILE 記錄流檔案的儲存位置。
  3. --batch 批處理,在檢測過程中會問使用者一些問題,使用這個引數統統使用預設值。
  4. --binary-fields=.. 指定二進位制結果的欄位。
  5. --check-internet 在評估目標之前檢查網際網路連線,新功能。
  6. --crawl=CRAWLDEPTH 從起始位置爬取的深度。例: --crawl=3
  7. --crawl-exclude=.. 除了哪些頁面之外全部爬取。例: --crawl-exclude="abc.com/logout.php"
  8. --csv-del=CSVDEL 指定在CSV輸出中使用的分隔字元。
  9. --charset=CHARSET 強制字串編碼。例: --charset=GBK
  10. --dump-format=DU.. 轉儲資料的格式 ,有(CSV (預設), HTML,SQLITE)三種。
  11. --encoding=ENCOD.. 用於資料檢索的字元編碼。例: --encoding=GBK
  12. --eta 顯示每個輸出的預計到達時間 。
  13. --flush-session 清空會話資訊。
  14. --forms 在目標URL上解析和測試表單。
  15. --fresh-queries sqlmap每次查詢都會講查詢結果儲存在.sqlmap資料夾中,下次再有相同測查詢會呼叫上次的查詢結果,使用這個引數可以忽略檔案中有的記載結果,重新查詢。
  16. --har=HARFILE 將所有http流量記錄在一個har檔案中。
  17. --hex dump非ascii字元時,將其編碼為16進位制,收到後解碼還原。
  18. --output-dir=OUT.. 輸出結果至檔案。例: --output-dir=/tmp
  19. --parse-errors 解析並顯示報錯資訊。
  20. --save=SAVECONFIG 將使用的命令儲存到配置ini檔案
  21. --scope=SCOPE-l類似,只是這個可以過濾資訊,使用正則表示式過濾網址。
  22. --test-filter=TE.. 根據有效負載和/或標題,不懂。
  23. --test-skip=TEST.. 根據有效負載和/或標題跳過測試,不懂+2。
  24. --update 更新sqlmap。

Miscellaneous

  1. -z MNEMONICS 引數助記符,比較傻的一個功能。例: -z "bat,randoma,ign,tec=BEU" 其實就是隻要你寫的字母可以唯一匹配其他引數,就可以生效。
  2. --alert=ALERT 在找到SQL注入時執行主機OS命令。
  3. --answers=ANSWERS 設定問題答案,在剛剛的--batch 可以跳過很多問題,但只是選擇預設值,可以使用者個引數對特定問題設定特定答案。例: --answer "extending=N"
  4. --beep 在問題和/或當SQL注入被發現時發出嘟嘟聲。。。。。。。。。
  5. --cleanup 從SqLMAP特定的UDF和表中找資料庫,類似暴力破解。
  6. --dependencies 檢查缺少的Sql對映依賴項。
  7. --disable-coloring 禁用控制檯輸出著色。
  8. --gpage=GOOGLEPAGE 在指定頁使用google結果,不懂。
  9. --identify-waf 識別目標的防火牆。
  10. --mobile cosplay 手機。
  11. --offline 在離線模式下工作。
  12. --purge-output 情況輸出資料夾。
  13. --skip-waf 跳過WAF/IPS/IDS保護的啟發式檢測。
  14. --smart 有大量檢測目標時候,只選擇基於錯誤的檢測。
  15. --sqlmap-shell 建立一個互動的sqlmap_shell,不懂。
  16. --tmp-dir=TMPDIR 更改儲存臨時檔案的本地目錄。
  17. --web-root=WEBROOT 設定Web伺服器文件根目錄。例: --web-root="/var/www"
  18. --wizard 新手教程。