sqlmap
目錄
- sqlmap
- 下載&升級
- 獲取幫助
- 使用
- 確定目標
- 請求配置
- 優化
- 注入
- 檢測
- 技術
- 指紋
- 列舉
- 用戶自定義函式注入
- 檔案系統訪問
- 作業系統訪問
- 全域設定
- 混雜選項
- 常用命令
- tamper腳本
- sqlmap API
sqlmap is released under the terms of the GPLv2, which means that any derivative work must be distributed without further restrictions on the rights granted by the General Public License itself.
下載&升級
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
pip install --upgrade sqlmap
python sqlmap.py --update
git pull
獲取幫助
python sqlmap.py -h
python sqlmap.py -hh
使用
Usage: python 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)
至少使用下列一個選項用來確定目標
-u URL, --url=URL Target URL (e.g. "http://www.site.com/vuln.php?id=1")
-d DIRECT Connection string for direct database connection
直接資料庫連接的連接字串
-l LOGFILE Parse target(s) from Burp or WebScarab proxy log file
通過Burp或WebScarab的日志檔案確定目標
-m BULKFILE Scan multiple targets given in a textual file
通過給出的txt檔案掃描多個目標
-r REQUESTFILE Load HTTP request from a file
從一個檔案中加載HTTP請求
-g GOOGLEDORK Process Google dork results as target URLs
將Google Dork結果作為目標URL進行處理
-c CONFIGFILE Load options from a configuration INI file
從配置INI檔案中加載選項
請求配置
Request:
These options can be used to specify how to connect to the target URL
-A AGENT, --user.. HTTP User-Agent header value
-H HEADER, --hea.. Extra header (e.g. "X-Forwarded-For: 127.0.0.1")
--method=METHOD Force usage of given HTTP method (e.g. PUT)
--data=DATA Data string to be sent through POST (e.g. "id=1")
--param-del=PARA.. Character used for splitting parameter values (e.g. &)
--cookie=COOKIE HTTP Cookie header value (e.g. "PHPSESSID=a8d127e..")
--cookie-del=COO.. Character used for splitting cookie values (e.g. ;)
--live-cookies=L.. Live cookies file used for loading up-to-date values
--load-cookies=L.. File containing cookies in Netscape/wget format
--drop-set-cookie Ignore Set-Cookie header from response
--mobile Imitate smartphone through HTTP User-Agent header
--random-agent Use randomly selected HTTP User-Agent header value
--host=HOST HTTP Host header value
--referer=REFERER HTTP Referer header value
--headers=HEADERS Extra headers (e.g. "Accept-Language: fr\nETag: 123")
--auth-type=AUTH.. HTTP authentication type (Basic, Digest, NTLM or PKI)
--auth-cred=AUTH.. HTTP authentication credentials (name:password)
--auth-file=AUTH.. HTTP authentication PEM cert/private key file
--ignore-code=IG.. Ignore (problematic) HTTP error code (e.g. 401)
--ignore-proxy Ignore system default proxy settings
--ignore-redirects Ignore redirection attempts
--ignore-timeouts Ignore connection timeouts
--proxy=PROXY Use a proxy to connect to the target URL
--proxy-cred=PRO.. Proxy authentication credentials (name:password)
--proxy-file=PRO.. Load proxy list from a file
--proxy-freq=PRO.. Requests between change of proxy from a given list
--tor Use Tor anonymity network
--tor-port=TORPORT Set Tor proxy port other than default
--tor-type=TORTYPE Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))
--check-tor Check to see if Tor is used properly
--delay=DELAY Delay in seconds between each HTTP request
--timeout=TIMEOUT Seconds to wait before timeout connection (default 30)
--retries=RETRIES Retries when the connection timeouts (default 3)
--randomize=RPARAM Randomly change value for given parameter(s)
--safe-url=SAFEURL URL address to visit frequently during testing
--safe-post=SAFE.. POST data to send to a safe URL
--safe-req=SAFER.. Load safe HTTP request from a file
--safe-freq=SAFE.. Regular requests between visits to a safe URL
--skip-urlencode Skip URL encoding of payload data
--csrf-token=CSR.. Parameter used to hold anti-CSRF token
--csrf-url=CSRFURL URL address to visit for extraction of anti-CSRF token
--csrf-method=CS.. HTTP method to use during anti-CSRF token page visit
--csrf-retries=C.. Retries for anti-CSRF token retrieval (default 0)
--force-ssl Force usage of SSL/HTTPS
--chunked Use HTTP chunked transfer encoded (POST) requests
--hpp Use HTTP parameter pollution method
--eval=EVALCODE Evaluate provided Python code before the request (e.g.
"import hashlib;id2=hashlib.md5(id).hexdigest()")
優化
Optimization:
These options can be used to optimize the performance of sqlmap
這些選項可以優化sqlmap的性能
-o Turn on all optimization switches
打開所有優化開關
--predict-output Predict common queries output
預測常見的查詢輸出
--keep-alive Use persistent HTTP(s) connections
--null-connection Retrieve page length without actual HTTP response body
檢索頁面長度,無需實際HTTP回應正文
--threads=THREADS Max number of concurrent HTTP(s) requests (default 1)
注入
Injection:
These options can be used to specify which parameters to test for,
provide custom injection payloads and optional tampering scripts
這些選項可用于指定要測驗的引數、提供自定義注入有效負載和可選篡改腳本,
-p TESTPARAMETER Testable parameter(s)
--skip=SKIP Skip testing for given parameter(s)
--skip-static Skip testing parameters that not appear to be dynamic
--param-exclude=.. Regexp to exclude parameters from testing (e.g. "ses")
--param-filter=P.. Select testable parameter(s) by place (e.g. "POST")
--dbms=DBMS Force back-end DBMS to provided value
強制后端的DBMS提供值
--dbms-cred=DBMS.. DBMS authentication credentials (user:password)
--os=OS Force back-end DBMS operating system to provided value
--invalid-bignum Use big numbers for invalidating values
--invalid-logical Use logical operations for invalidating values
--invalid-string Use random strings for invalidating values
--no-cast Turn off payload casting mechanism
--no-escape Turn off string escaping mechanism
--prefix=PREFIX Injection payload prefix string
--suffix=SUFFIX Injection payload suffix string
--tamper=TAMPER Use given script(s) for tampering injection data
檢測
Detection:
These options can be used to customize the detection phase
這些選項可用于自定義檢測階段
--level=LEVEL Level of tests to perform (1-5, default 1)
--risk=RISK Risk of tests to perform (1-3, default 1)
--string=STRING String to match when query is evaluated to True
--not-string=NOT.. String to match when query is evaluated to False
--regexp=REGEXP Regexp to match when query is evaluated to True
--code=CODE HTTP code to match when query is evaluated to True
--smart Perform thorough tests only if positive heuristic(s)
--text-only Compare pages based only on the textual content
--titles Compare pages based only on their titles
技術
Techniques:
These options can be used to tweak testing of specific SQL injection
techniques
這些選項可用于調整特定SQL注入的測驗技術
--technique=TECH.. SQL injection techniques to use (default "BEUSTQ")
--time-sec=TIMESEC Seconds to delay the DBMS response (default 5)
--union-cols=UCOLS Range of columns to test for UNION query SQL injection
--union-char=UCHAR Character to use for bruteforcing number of columns
--union-from=UFROM Table to use in FROM part of UNION query SQL injection
--dns-domain=DNS.. Domain name used for DNS exfiltration attack
--second-url=SEC.. Resulting page URL searched for second-order response
搜索二階回應的結果頁面URL
--second-req=SEC.. Load second-order HTTP request from file
指紋
Fingerprint:
-f, --fingerprint Perform an extensive DBMS version fingerprint
列舉
Enumeration:
These options can be used to enumerate the back-end database
management system information, structure and data contained in the
tables
這些選項可用于列舉表中包含的后端資料庫管理系統資訊、結構和資料
-a, --all Retrieve everything
-b, --banner Retrieve DBMS banner
--current-user Retrieve DBMS current user
--current-db Retrieve DBMS current database
--hostname Retrieve DBMS server hostname
--is-dba Detect if the DBMS current user is DBA
--users Enumerate DBMS users
--passwords Enumerate DBMS users password hashes
--privileges Enumerate DBMS users privileges
--roles Enumerate DBMS users roles
--dbs Enumerate DBMS databases
--tables Enumerate DBMS database tables
--columns Enumerate DBMS database table columns
--schema Enumerate DBMS schema
--count Retrieve number of entries for table(s)
--dump Dump DBMS database table entries
--dump-all Dump all DBMS databases tables entries
--search Search column(s), table(s) and/or database name(s)
--comments Check for DBMS comments during enumeration
--statements Retrieve SQL statements being run on DBMS
-D DB DBMS database to enumerate
-T TBL DBMS database table(s) to enumerate
-C COL DBMS database table column(s) to enumerate
-X EXCLUDE DBMS database identifier(s) to not enumerate
-U USER DBMS user to enumerate
--exclude-sysdbs Exclude DBMS system databases when enumerating tables
--pivot-column=P.. Pivot column name
--where=DUMPWHERE Use WHERE condition while table dumping
--start=LIMITSTART First dump table entry to retrieve
--stop=LIMITSTOP Last dump table entry to retrieve
--first=FIRSTCHAR First query output word character to retrieve
--last=LASTCHAR Last query output word character to retrieve
--sql-query=SQLQ.. SQL statement to be executed
--sql-shell Prompt for an interactive SQL shell
--sql-file=SQLFILE Execute SQL statements from given file(s)
暴力攻擊
Brute force:
These options can be used to run brute force checks
這些選項被用于暴力攻擊
--common-tables Check existence of common tables
--common-columns Check existence of common columns
--common-files Check existence of common files
用戶自定義函式注入
User-defined function injection:
These options can be used to create custom user-defined functions
這些選項可用于創建自定義用戶定義的函式
--udf-inject Inject custom user-defined functions
--shared-lib=SHLIB Local path of the shared library
檔案系統訪問
File system access:
These options can be used to access the back-end database management
system underlying file system
這些選項用于訪問資料庫管理系統后潛在的檔案系統
--file-read=FILE.. Read a file from the back-end DBMS file system
--file-write=FIL.. Write a local file on the back-end DBMS file system
--file-dest=FILE.. Back-end DBMS absolute filepath to write to
作業系統訪問
Windows registry access:
These options can be used to access the back-end database management
system Windows registry
--reg-read Read a Windows registry key value
--reg-add Write a Windows registry key value data
--reg-del Delete a Windows registry key value
--reg-key=REGKEY Windows registry key
--reg-value=REGVAL Windows registry key value
--reg-data=REGDATA Windows registry key value data
--reg-type=REGTYPE Windows registry key value type
全域設定
General:
These options can be used to set some general working parameters
-s SESSIONFILE Load session from a stored (.sqlite) file
-t TRAFFICFILE Log all HTTP traffic into a textual file
--answers=ANSWERS Set predefined answers (e.g. "quit=N,follow=N")
--base64=BASE64P.. Parameter(s) containing Base64 encoded data
--base64-safe Use URL and filename safe Base64 alphabet (RFC 4648)
--batch Never ask for user input, use the default behavior
--binary-fields=.. Result fields having binary values (e.g. "digest")
--check-internet Check Internet connection before assessing the target
--cleanup Clean up the DBMS from sqlmap specific UDF and tables
--crawl=CRAWLDEPTH Crawl the website starting from the target URL
--crawl-exclude=.. Regexp to exclude pages from crawling (e.g. "logout")
--csv-del=CSVDEL Delimiting character used in CSV output (default ",")
--charset=CHARSET Blind SQL injection charset (e.g. "0123456789abcdef")
--dump-format=DU.. Format of dumped data (CSV (default), HTML or SQLITE)
--encoding=ENCOD.. Character encoding used for data retrieval (e.g. GBK)
--eta Display for each output the estimated time of arrival
--flush-session Flush session files for current target
--forms Parse and test forms on target URL
--fresh-queries Ignore query results stored in session file
--gpage=GOOGLEPAGE Use Google dork results from specified page number
--har=HARFILE Log all HTTP traffic into a HAR file
--hex Use hex conversion during data retrieval
--output-dir=OUT.. Custom output directory path
--parse-errors Parse and display DBMS error messages from responses
--preprocess=PRE.. Use given script(s) for preprocessing (request)
--postprocess=PO.. Use given script(s) for postprocessing (response)
--repair Redump entries having unknown character marker (?)
--save=SAVECONFIG Save options to a configuration INI file
--scope=SCOPE Regexp for filtering targets
--skip-heuristics Skip heuristic detection of SQLi/XSS vulnerabilities
--skip-waf Skip heuristic detection of WAF/IPS protection
--table-prefix=T.. Prefix used for temporary tables (default: "sqlmap")
--test-filter=TE.. Select tests by payloads and/or titles (e.g. ROW)
--test-skip=TEST.. Skip tests by payloads and/or titles (e.g. BENCHMARK)
--web-root=WEBROOT Web server document root directory (e.g. "/var/www")
混雜選項
Miscellaneous:
These options do not fit into any other category
-z MNEMONICS Use short mnemonics (e.g. "flu,bat,ban,tec=EU")
--alert=ALERT Run host OS command(s) when SQL injection is found
--beep Beep on question and/or when SQLi/XSS/FI is found
--dependencies Check for missing (optional) sqlmap dependencies
--disable-coloring Disable console output coloring
--list-tampers Display list of available tamper scripts
--offline Work in offline mode (only use session data)
--purge Safely remove all content from sqlmap data directory
--results-file=R.. Location of CSV results file in multiple targets mode
--shell Prompt for an interactive sqlmap shell
--tmp-dir=TMPDIR Local directory for storing temporary files
--unstable Adjust options for unstable connections
--update Update sqlmap
--wizard Simple wizard interface for beginner users
常用命令
python sqlmap.py -u "http://www.target.com/vuln.php" --user -v 2 --method=POST --data="id=1" --param-del=";"
python sqlmap.py --url "http://www.target.com/vuln.php?id=1*" --user -vv
python sqlmap.py --url "http://www.target.com/vuln.php?id=1" -p id
python sqlmap.py --url "http://www.target.com/vuln.php?id=1&username=name" --skip “username,id”
python sqlmap.py -l "log_file" --user
python sqlmap.py -m "multiples_file"
python sqlmap.py -r "request_file"
waybackurls www.target.com | python sqlmap.py # from piped-input
python sqlmap.py -g "inurl:\".php?id=1\"" # from Google dork
python sqlmap.py -c sqlmap.conf # from a configuration INI file
# multiples_file
www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*
# requsetfile
POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0
id=1
直連資料庫
python sqlmap.py -d "mysql://admin:admin@192.168.21.17:3306/testdb" -f --banner --dbs --user
cookie
--cookie, --cookie-del, --live-cookies, --load-cookies and --drop-set-cookie
user-agent
--user-agent, --random-agent
--host
--referer
--headers
HTTP認證
The three supported HTTP protocol authentication mechanisms are:
-
Basic -
Digest -
NTLM
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1"、
--auth-type Basic --auth-cred "testuser:testpass"
HTTP協議私鑰身份驗證
–auth-file=key_file.txt
使用代理
--proxy, --proxy-cred, --proxy-file and --ignore-proxy
Tor 匿名網路
--tor, --tor-port, --tor-type and --check-tor
網路延遲設定
Option: --delay 默認沒有延遲設定
在超時之前等待的秒數
Option: --timeout=30
tamper腳本
tamper 腳本在sqlmap的tamper目錄之下,寫tamper腳本需要定義一個優先級和兩個函式

tamper腳本實體:
#!/usr/bin/env python
"""
Copyright (c) 2006-2021 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""
from lib.core.convert import encodeBase64
from lib.core.enums import PRIORITY
# 這兩個庫的位置在sqlmap主目錄下lib目錄中,可以呼叫其他第三方庫
__priority__ = PRIORITY.LOW
# 七個等級:LOWEST、LOWER、LOW、NORMAL、HIGH、HIGHER、HIGHEST
# 加載多個tamper,誰的優先級高,誰被優先使用
def dependencies():
pass # dependencies函式宣告該腳本適用/不適用的范圍,可以為空,
def tamper(payload, **kwargs):
"""
Base64-encodes all characters in a given payload
>>> tamper("1' AND SLEEP(5)#")
'MScgQU5EIFNMRUVQKDUpIw=='
"""
return encodeBase64(payload, binary=False) if payload else payload
# 傳入值為原payload字串,回傳值值為經過加工后的payload
使用tamper腳本
python sqlmap.py --url "http://www.target.com/vuln.php?id=1*" --tamper "space2commet,versionedmorekeywords.py"
sqlmap API
sqlmap API 本質是sqlmap打開一個web服務器,然后通過使用http協議與客戶端進行互動
開啟sqlmap API
python sqlmapapi.py -s
python sqlmapapi.py -s -H "0.0.0.0" -p 8775
sqlmap 客戶端命令列模式
python sqlmapapi.py -c
python sqlmapapi.py -c -H "192.168.1.101" -p 8775
命令列介面模式命令
api> help
help 顯示幫助資訊
new ARGS 開啟一個新的掃描任務
use TASKID 切換taskid
data 獲取當前任務回傳的資料
log 獲取當前任務的掃描日志
status 獲取當前任務的掃描狀態
option OPTION 獲取當前任務的選項
options 獲取當前任務的所有配置資訊
stop 停止當前任務
kill 殺死當前任務
list 顯示所有任務串列
flush 清空所有任務
exit 退出客戶端
基于HTTP協議的介面模式:
## “@get”就說明需要通過GET請求的,“@post”就說明需要通過POST請求的;
## POST請求需要修改HTTP頭中的Content-Type欄位為application/json
#輔助
@get('/error/401')
@get("/task/new")
@get("/task/<taskid>/delete")
#Admin 命令
@get("/admin/list")
@get("/admin/<token>/list")
@get("/admin/flush")
@get("/admin/<token>/flush")
#sqlmap 核心互動命令
@get("/option/<taskid>/list")
@post("/option/<taskid>/get")
@post("/option/<taskid>/set")
@post("/scan/<taskid>/start")
@get("/scan/<taskid>/stop")
@get("/scan/<taskid>/kill")
@get("/scan/<taskid>/status")
@get("/scan/<taskid>/data")
@get("/scan/<taskid>/log/<start>/<end>")
@get("/scan/<taskid>/log")
@get("/download/<taskid>/<target>/<filename:path>")
腳本實體:
import requsets
r = requests.get("http://ip:port/task/new") # 創建新任務
print(r.json()) # {"success": True, "taskid": taskid}
r = requests.post("http://ip:port/task/taskid/start", data=json.dump{"url":"http://host:port/target.php","data":"keyword=1"})
# 開啟新任務
剩下的,大家自行摸索吧
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342168.html
標籤:其他
上一篇:Flink狀態管理與Checkpoint實戰——模擬電商訂單計算程序中宕機的場景,探索宕機恢復時如何精準繼續計算訂單
下一篇:移動端事件庫
