SQLmap 使用整理

基础

给sqlmap 一个url后的工作流程:

  1. 判断可注入的参数
  2. 判断可以用哪种SQL 注入技术来注入
  3. 识别哪种数据库
  4. 根据用户选择,读取哪些数据

支持五种注入模式:

  1. 基于布尔的盲注,根据返回页面判断条件真假的注入
  2. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行
  3. 基于报错的注入,即页面会返回错误信息,或者把注入的语句结果直接返回在页面中
  4. 联合查询注入,可以使用 union 的情况下的注入
  5. 堆查询注入,可以同时执行多条语句的执行时的注入

可注入的位置:

  • GET 参数
  • POST 参数
  • HTTP Cookie 参数
  • HTTP User-Agent 头
  • HTTP Referer 头

命令参数

扫描等级设置

使用 -v 参数指定等级,共有7个等级,默认为 1:

0:只显示Python错误以及严重的信息
1:同时显示基本信息和警告信息(默认)
2:同时显示 debug 信息
3:同时显示payload
4:同时显示HTTP请求
5:同时显示HTTP响应头
6:同时显示响应页面

可以使用 -v 3 或者 -v 4查看使用的payload或发送的 HTTP 请求。

获取目标方式(target)

有三种方式 :

  • 指定目标 URL,-u--url
  • 从文本中获取目标扫描,-m-r
  • 处理Google的搜索结果,-g

指定目标 URL

使用参数: -u--url

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

如:

sqlmap -u "https://www.zzzsdust.com/1*" -v 4 --random-agent

从文本中获取目标扫描

使用 -m 参数(multiple)指定文件,命令如下:

sqlmap -m 1.txt -v 4 --random-agent

1.txt文件内容如下:

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

使用 -r 参数,从文件中加载 HTTP 请求,比如 burpsuite 中请求,命令如下:

sqlmap -r 1.txt -v 4 --random-agent

1.txt(REQUESTFILE)文件内容如下:

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

id=1

当请求是 HTTPS时,需要指定 --force-ssl 参数,或者在 Host 头后面加上 :443。当然如果网站设置了 http 请求返回 30x 跳转到 https,sqlmap 会询问是否跳转,如:

sqlmap got a 301 redirect to 'https://zzzsdust.com/articles/35/'. Do you want to follow? [Y/n]

处理 Google 的搜索结果

sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果),使用参数 -g,如下:

sqlmap -g "inurl:".php?id=1""

原文

  Target:
    At least one of these options has to be provided to define the
    target(s)

    -d DIRECT           Connection string for direct database connection
    -u URL, --url=URL   Target URL (e.g. "http://www.site.com/vuln.php?id=1")
    -l LOGFILE          Parse target(s) from Burp or WebScarab proxy log file
    -x SITEMAPURL       Parse target(s) from remote sitemap(.xml) file
    -m BULKFILE         Scan multiple targets given in a textual file
    -r REQUESTFILE      Load HTTP request from a file
    -g GOOGLEDORK       Process Google dork results as target URLs
    -c CONFIGFILE       Load options from a configuration INI file

请求参数设置(request)

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

HTTP POST 数据

使用 --data 参数,将数据以 POST 方式提交 :

sqlmap -u "http://www.target.com/vuln.php" --data="id=1" --random-agent -v 4

此时的 HTTP 请求为:

POST /vuln.php HTTP/1.1
Host: www.target.com
Accept-encoding: gzip,deflate
Cache-control: no-cache
Content-type: application/x-www-form-urlencoded; charset=utf-8
Accept: */*
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.3
Content-length: 4
Connection: close

id=1

参数拆分字符

参数: --param-del

当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数,可以搭配 -p 参数使用。

如:

sqlmap -u "http://www.target.com/vuln.php" --data="name="test";pwd="123"" --random-agent -v 4 --param-del=";" -p "pwd"

此时发出的请求为:

POST /vuln.php HTTP/1.1
Host: www.target.com
Cookie: TealeafAkaSid=erJYAHA7L2TLSIffoJ-Nqew1rGPUTet4
Accept-encoding: gzip,deflate
Cache-control: no-cache
Content-type: application/x-www-form-urlencoded; charset=utf-8
Accept: */*
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.1) Gecko/20090716 Firefox/3.5.1
Content-length: 39
Connection: close

name=test%3Bpwd=123%20AND%209338%3D7675

相关参数有:

--cookie           # 设定 Cookie 值
--load-cookies     # 从文件中加载 Cookie 值
--drop-set-cookie  # 忽略服务器返回的 set-cookie 
--cookie-del       # 与 --param-del 参数类似,分割 Cookie 

例:

sqlmap -u "https://www.zzzsdust.com/admin/1" --cookie="sessionid=xxx; csrftoken=xxx"

请求包为:

GET /admin/1 HTTP/1.1
Host: www.zzzsdust.com
Cookie: sessionid=xxx; csrftoken=xxx
Accept-encoding: gzip,deflate
Cache-control: no-cache
Accept: */*
User-agent: sqlmap/1.3.11#stable (http://sqlmap.org)
Connection: close

HTTP User-Agent头

相关参数有:

--user-agent
--random-agent
--mobile       # 使用手机UA

可以使用 --user-agent 指定UA,也可以使用 --random-agent 随机选择 UA(/usr/share/sqlmap/data/txt/user-agents.txt

--level 设定为 3 或 3 以上时,会尝试对User-Agent 进行注入。

HTTP Referer头

参数: --referer

sqlmap可以在请求中伪造HTTP中的referer,当–-level参数设定为3或者3以上的时候会尝试对referer注入

额外的HTTP头

参数: --headers

通过 --headers 参数增加额外的 HTTP 头,如果需要添加多个则用 \n 分割,如:

sqlmap -u "https://a.b.com/index.php?id=1" --headers="Accept-Language: fr\nETag: 123" --random-agent -v 4 

HTTP(S)代理

参数:

--proxy        # 设置代理
--proxy-cred   # 使用密码
--ignore-proxy # 忽略不使用系统代理

格式:

sqlmap -u "http://a.b.com/1.php?id=1" --proxy=(http|https|socks4|socks5)://address:port --proxy-cred=username:password

HTTP 请求延迟

参数 --delay

可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认是没有延迟的。

设定超时时间

参数: --timeout

可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒。

设定重试超时

参数: --retries

当HTTP(S)超时时,可以设定重新尝试连接次数,默认是 3 次

利用正则过滤目标网址

参数:--scope

一般用来将 burpsuite 拦截的request日志(burpsuite -> Options -> Misc -> Logging -> Proxy -> Requests)进行过滤

例:

sqlmap -l burp.log --scope="zzzsdust\.(com|net|org)"

避免过多的错误请求被屏蔽

参数:

--safe-url    # 提供一个安全不错误的 url,每隔一段时间都会访问一下
--safe-freq   # 提供一个安全不错误的 url,每次测试请求后再访问一下

作用:防止过多的错误请求被服务器拉黑

关掉 Payload 的url编码

参数:

--skip-urlencode

例:

sqlmap -u "http://www.target.com/vuln.php" --data="name="test";pwd="123"" --random-agent -v 4 --param-del=";" -p "pwd" --skip-urlencode

请求包:

POST /vuln.php HTTP/1.1
Host: www.target.com
Cookie: TealeafAkaSid=YqUbSkFxq2ywOSG_J4sysCKImOI_BstQ
Accept-encoding: gzip,deflate
Cache-control: no-cache
Content-type: text/plain; charset=utf-8
Accept: */*
User-agent: Mozilla/5.0 (X11; U; FreeBSD i386; en-US; rv:1.8.1.20) Gecko/20090225 Firefox/2.0.0.20
Content-length: 27
Connection: close

name=test;pwd=123((,((('".,

每次请求时候执行自定义的python代码

参数:--eval

在有些时候,需要根据某个参数的变化,而修改另个一参数,才能形成正常的请求,这时可以用–eval参数在每次请求时根据所写python代码做完修改后请求。

例:

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

原文

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
    --mobile            Imitate smartphone through HTTP User-Agent header
    --random-agent      Use randomly selected HTTP User-Agent header value
    --host=HOST         HTTP Host header value
    --referer=REFERER   HTTP Referer header value
    -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
    --csrf-method=CS..  HTTP method to use during anti-CSRF token page visit
    --force-ssl         Force usage of SSL/HTTPS
    --chunked           Use HTTP chunked transfer encoded (POST) requests
    --hpp               Use HTTP parameter pollution method
    --eval=EVALCODE     Evaluate provided Python code before the request (e.g.
                        "import hashlib;id2=hashlib.md5(id).hexdigest()")

注入 (Injection)

These options can be used to specify which parameters to test for,
provide custom injection payloads and optional tampering scripts

注入参数设置

参数:

-p     # 指定注入的参数
--skip # 指定不注入的参数 

sqlmap默认测试所有的GET和POST参数,当--level的值大于等于2的时候也会测试HTTP Cookie头的值,当大于等于3的时候也会测试User-Agent和HTTP Referer头的值。但是你可以手动用-p参数设置想要测试的参数。

例如: -p "id,user-agent"

当你使用--level的值很大但是有个别参数不想测试的时候可以使用--skip参数。

例如:

sqlmap -u "http://www.target.com/vuln.php" --data="name="test";pwd="123";code="abc"" --random-agent -v 4 --param-del=";"  --skip-urlencode --skip="name,pwd"

指定数据库

参数:--dbms

默认情况系sqlmap会自动的探测web应用后端的数据库是什么,sqlmap支持的数据库有:

MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAP MaxDB、DB2

指定数据库服务器系统

参数:--os

默认情况下sqlmap会自动的探测数据库服务器系统,支持的系统有:Linux、Windows。

向 payload 添加前缀、后缀

参数:

--prefix    # 前缀 
--suffix    # 后缀 

在有些环境中,需要在注入的payload的前面或者后面加一些字符,来保证payload的正常执行。如最近泛微的SQL注入。

例:

代码中调用数据库:

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

则可以使用:

sqlmap -u "http://a.b.com/p.php?id=1" -p "id" --prefix = "')" --suffix = "AND ('abc'=='abc"

修改注入的 payload

参数:--tamper

可以使用 tamper 对payload进行修改绕过 WAF 等设备,tamper脚本格式为:

# 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

比如 randomcase.py:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env python

"""
Copyright (c) 2006-2019 sqlmap developers (http://sqlmap.org/)
See the file 'LICENSE' for copying permission
"""

import re

from lib.core.common import randomRange
from lib.core.compat import xrange
from lib.core.data import kb
from lib.core.enums import PRIORITY

__priority__ = PRIORITY.NORMAL

def dependencies():
    pass

def tamper(payload, **kwargs):
    """
    Replaces each keyword character with random case value (e.g. SELECT -> SEleCt)

    Tested against:
        * Microsoft SQL Server 2005
        * MySQL 4, 5.0 and 5.5
        * Oracle 10g
        * PostgreSQL 8.3, 8.4, 9.0
        * SQLite 3

    Notes:
        * Useful to bypass very weak and bespoke web application firewalls
          that has poorly written permissive regular expressions
        * This tamper script should work against all (?) databases

    >>> import random
    >>> random.seed(0)
    >>> tamper('INSERT')
    'InSeRt'
    >>> tamper('f()')
    'f()'
    >>> tamper('function()')
    'FuNcTiOn()'
    >>> tamper('SELECT id FROM `user`')
    'SeLeCt id FrOm `user`'
    """

    retVal = payload

    if payload:
        for match in re.finditer(r"\b[A-Za-z_]{2,}\b", retVal):
            word = match.group()

            if (word.upper() in kb.keywords and re.search(r"(?i)[`\"\[]%s[`\"\]]" % word, retVal) is None) or ("%s(" % word) in payload:
                while True:
                    _ = ""

                    for i in xrange(len(word)):
                        _ += word[i].upper() if randomRange(0, 1) else word[i].lower()

                    if len(_) > 1 and _ not in (_.lower(), _.upper()):
                        break

                retVal = retVal.replace(word, _)

    return retVal

可用脚本所在目录(Kali): /usr/share/sqlmap/tamper

原文

Injection:
    These options can be used to specify which parameters to test for,
    provide custom injection payloads and optional tampering scripts

    -p TESTPARAMETER    Testable parameter(s)
    --skip=SKIP         Skip testing for given parameter(s)
    --skip-static       Skip testing parameters that not appear to be dynamic
    --param-exclude=..  Regexp to exclude parameters from testing (e.g. "ses")
    --param-filter=P..  Select testable parameter(s) by place (e.g. "POST")
    --dbms=DBMS         Force back-end DBMS to provided value
    --dbms-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

共有五个等级,默认为1,sqlmap使用的payload可以在/usr/share/sqlmap/data/xml/payloads/中看到,你也可以根据相应的格式添加自己的payload。

这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。

总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

风险等级

参数: --risk

共有三个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。

在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。

页面比较

参数:

--string 
--not-string
--regexp
--code

默认情况下sqlmap通过判断返回页面的不同来判断真假,但有时候这会产生误差,因为有的页面在每次刷新的时候都会返回不同的代码,比如页面当中包含一个动态的广告或者其他内容,这会导致sqlmap的误判。此时用户可以提供一个字符串或者一段正则匹配,在原始页面与真条件下的页面都存在的字符串,而错误页面中不存在(使用–string参数添加字符串,--regexp添加正则),同时用户可以提供一段字符串在原始页面与真条件下的页面都不存在的字符串,而错误页面中存在的字符串(--not-string添加)。用户也可以提供真与假条件返回的HTTP状态码不一样来注入,例如,响应200的时候为真,响应401的时候为假,可以添加参数--code=200

原文

Detection:
    These options can be used to customize the detection phase

    --level=LEVEL       Level of tests to perform (1-5, default 1)
    --risk=RISK         Risk of tests to perform (1-3, default 1)
    --string=STRING     String to match when query is evaluated to True
    --not-string=NOT..  String to match when query is evaluated to False
    --regexp=REGEXP     Regexp to match when query is evaluated to True
    --code=CODE         HTTP code to match when query is evaluated to True
    --smart             Perform thorough tests only if positive heuristic(s)
    --text-only         Compare pages based only on the textual content
    --titles            Compare pages based only on their titles

注入技术

These options can be used to tweak testing of specific SQL injection techniques

指定注入方式

参数:--technique

指定SQLmap使用的注入方式,默认会使用所有方式。

B: Boolean-based blind SQL injection(布尔型注入)
E: Error-based SQL injection(报错型注入)
U: UNION query SQL injection(可联合查询注入)
S: Stacked queries SQL injection(可多语句查询注入)
T: Time-based blind SQL injection(基于时间延迟注入)

设置延迟注入的时间

参数:--time-sec

当使用基于时间的盲注时,使用--time-sec参数设定延时时间,默认是5秒。

设定UNION查询字段数

参数: --union-cols

默认情况下sqlmap测试UNION查询注入会测试1-10个字段数,当--level为5的时候他会增加测试到50个字段数。设定--union-cols的值应该是一段整数,如:12-16,是测试12-16个字段数。

设定UNION查询使用的字符

参数:--union-char

默认情况下sqlmap针对UNION查询的注入会使用NULL字符,但是有些情况下会造成页面返回失败,而一个随机整数是成功的,这是你可以用--union-char指定UNION查询的字符。

原文

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

获取数据

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  数据库版本信息 version() 
--current-user      Retrieve DBMS current user 当前数据库用户 user()
--current-db        Retrieve DBMS current database  当前数据库 database()
--hostname          Retrieve DBMS server hostname
--is-dba            Detect if the DBMS current user is DBA 判断当前用户是否是DB管理员
--users             Enumerate DBMS users  数据库所有用户名
--passwords         Enumerate DBMS users password hashes 获取密码hash值,并尝试破解
--privileges        Enumerate DBMS users privileges 
--roles             Enumerate DBMS users roles
--dbs               Enumerate DBMS databases  获取所有数据库名
--tables            Enumerate DBMS database tables 某数据库下所有表
--columns           Enumerate DBMS database table columns 某表下所有字段及类型
--schema            Enumerate DBMS schema 获取数据库的架构,包含所有的数据库,表和字段,以及各自的类型
--count             Retrieve number of entries for table(s) 获取表中的数据个数而不是具体的内容
--dump              Dump DBMS database table entries 获取表中所有数据
--dump-all          Dump all DBMS databases tables entries 获取所有表的数据
--search            Search column(s), table(s) and/or database name(s)
--comments          Check for DBMS comments during enumeration
--statements        Retrieve SQL statements being run on DBMS
-D DB               DBMS database to enumerate 指定数据库
-T TBL              DBMS database table(s) to enumerate 指定表
-C COL              DBMS database table column(s) to enumerate 指定字段
-X EXCLUDE          DBMS database identifier(s) to not enumerate
-U USER             DBMS user to enumerate 指定用户,比如破解hash密码时可用
--exclude-sysdbs    Exclude DBMS system databases when enumerating tables  不获取系统数据中的数据
--pivot-column=P..  Pivot column name
--where=DUMPWHERE   Use WHERE condition while table dumping
--start=LIMITSTART  First dump table entry to retrieve
--stop=LIMITSTOP    Last dump table entry to retrieve
--first=FIRSTCHAR   First query output word character to retrieve
--last=LASTCHAR     Last query output word character to retrieve
--sql-query=SQLQ..  SQL statement to be executed  执行指定sql 语句
--sql-shell         Prompt for an interactive SQL shell 
--sql-file=SQLFILE  Execute SQL statements from given file(s)

爆破

These options can be used to run brute force checks

暴力破解表名

参数: --common-tales

当使用 --tables 无法获取数据库的表时,使用此参数。通常是以下情况:

  1. MySQL 版本小于 5.0,没有 information_schema 表
  2. 数据库是Microsoft Access,系统表 MSysObjects 不可读(默认)
  3. 当前用户没有权限读取系统中保存数据结构表的权限

暴力破解的表在 /usr/share/sqlmap/data/txt/common-tables.txt 文件,可以自己添加。

暴力破解列名、文件

参数:

--common-columns 
--common-files

原文

Brute force:
    These options can be used to run brute force checks

    --common-tables     Check existence of common tables
    --common-columns    Check existence of common columns
    --common-files      Check existence of common files

用户自定义函数注入

参数:

--udf-inject
--shared-lib

你可以通过编译MySQL注入你自定义的函数(UDFs)或PostgreSQL在windows中共享库,DLL,或者Linux/Unix中共享对象,sqlmap将会问你一些问题,上传到服务器数据库自定义函数,然后根据你的选择执行他们,当你注入完成后,sqlmap将会移除它们。

原文:

  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

参考链接: