sqlmap

发布时间 2023-04-16 16:20:53作者: 挖洞404

sqlmap快速入门 – FreeBuf网络安全行业门户

SQLMAP详细参数详解 – FreeBuf网络安全行业门户

Sqlmap中文手册若水斋-CSDN博客sqlmap

sqlmap:自动SQL注入和数据库接管工具

公司简介 ·sqlmapproject/sqlmap Wiki ·GitHub

用法 ·sqlmapproject/sqlmap Wiki ·GitHub

1、介绍

sqlmap是一个开源渗透测试工具,可以自动检测和利用SQL注入缺陷以及接管数据库服务器。它配备了强大的检测引擎,许多用于终极渗透测试仪的利基功能,以及从数据库指纹识别,从数据库获取数据到访问底层文件系统并通过带外连接在操作系统上执行命令的各种开关。

  • 完全支持MySQL,Oracle,PostgreSQL,Microsoft SQL Server,Microsoft Access,IBM DB2,SQLite,Firebird,Sybase,SAP MaxDB,Informix,MariaDB,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,Raima Database Manager,YugabyteDB和Virtuoso数据库管理系统。
  • 完全支持六种 SQL 注入技术:基于布尔的盲区、基于时间的盲区、基于错误的、基于 UNION 查询的、堆叠查询和带外查询。
  • 通过提供 DBMS 凭据、IP 地址、端口和数据库名称,支持直接连接到数据库,而无需通过 SQL 注入。
  • 支持枚举用户,密码哈希,权限,角色,数据库,表和列
  • 自动识别密码哈希格式并支持使用基于字典的攻击破解它们
  • 支持完全转储数据库表,根据用户的选择一系列条目或特定列。用户还可以选择仅转储每列条目中的一系列字符。
  • 支持搜索特定数据库名称,所有数据库中的特定表或所有数据库表中的特定列。例如,这对于标识包含自定义应用程序凭据的表非常有用,其中相关列的名称包含 name 和 pass 等字符串。
  • 当数据库软件为MySQL,PostgreSQL或Microsoft SQL Server时,支持从数据库服务器底层文件系统下载和上传任何文件
  • 当数据库软件为MySQL,PostgreSQL或Microsoft SQL Server时,支持在数据库服务器底层操作系统上执行任意命令并检索其标准输出
  • 支持在攻击者计算机和数据库服务器基础操作系统之间建立带外有状态 TCP 连接。根据用户的选择,此通道可以是交互式命令提示符、Meterpreter 会话或图形用户界面 (VNC) 会话。
  • 支持通过 Metasploit 的 Meterpreter 命令提升数据库进程的用户权限getsystem

2、语法

(1)不带参数

-h
--help

不带参数,一个段横杠与首字母,或者两个相邻的段横杠与单词

(2)带参数

-u URL
--url=URL

带参数,

(3)

  • 一般的,数字不用引号,字符串使用单引号或者双引号,字母大写作为预定值
  • 命令大小写敏感,否则报错
  • 字符串不使用引号,具有一定的兼容性,可以运行,但是不建议

3、基础

基于kali系统自带的sqlmap版本,1.5.2#stable,的帮助信息和官网的使用文档进行整理。

$ sqlmap -h
# or
$ sqlmap --help
  • 显示基本的帮助信息
$ sqlmap -hh
  • 显示高级的,详细的帮助信息
$ sqlmap --version                                                   
1.5.2#stable
  • 显示程序的版本号
$ sqlmap -v VERBOSE
  • 详细程度:0-6,默认为1
    • 0:只显示python错误以及严重信息
    • 1:同时显示基本信息和警告信息
    • 2:同时显示debug信息
    • 3:同时显示注入的pyload
    • 4:同时显示HTTP请求
    • 5:同时显示HTTP相应头
    • 6:同时显示HTTP相应页面

4、目标

至少使用一种操作用于定义目标。

$ sqlmap -u URL, --url=URL
​
$ sqlmap -u "http://www.site.com/vuln.php?id=1"
$ sqlmap --url="http://www.site.com/vuln.php?id=1"
  • 通过url进行定义
$ sqlmap -r REQUESTFILE
$ sqlmap -r “request.txt”
  • 从一个文件中加载http请求
  • 一般的,会直接使用请求报文中的cookie等信息,如果另外指定cookie的话,可以覆盖
$ sqlmap -l LOGFILE
  • 从Burp或者WebScarab代理的日志文件中分析目标
$ sqlmap -g GOOGLEDORK
  • 从google搜索结果作为目标url集合
$ sqlmap -d DIRECT
  • 用于连接数据库的字符串,包括主机、端口、用户名和密码、数据库名等
$ sqlmap -c CONFIGFILE
  • ini配置文件加载操作
$ sqlmap -m BULKFILE
  • 扫描文本文件给的多个目标

5、请求

这些操作可以用于具体说明怎样连接目标url。

--method=METHOD
--method=PUT
  • 强行指定请求方法,例如PUT
--data=DATA
--data="id=1"
  • 数据字符串通过POST方法发送
$ sqlmap -u "" --cookie="security=low; PHPSESSID=2eh0cg8j1pfcn5lcud9ofnan9k"
  • 设置http请求的cookie,值直接从burp拦截的请求中复制即可
  • 设置cookie一般是明确的需要用户身份的,或者sqlmap提示转向login页面的情况
--safe-url=SAFEURL
  • 有的web服务器会在多次错误的访问请求后屏蔽所有请求,使用–safe-url 就可以每隔一段时间去访问一个正常的页面。
    -A AGENT, --user..  HTTP User-Agent header value
    -H HEADER, --hea..  Extra header (e.g. "X-Forwarded-For: 127.0.0.1")
    --method=METHOD     Force usage of given HTTP method (e.g. PUT)
    --data=DATA         Data string to be sent through POST (e.g. "id=1")
    --param-del=PARA..  Character used for splitting parameter values (e.g. &)
    --cookie=COOKIE     HTTP Cookie header value (e.g. "PHPSESSID=a8d127e..")
    --cookie-del=COO..  Character used for splitting cookie values (e.g. ;)
    --live-cookies=L..  Live cookies file used for loading up-to-date values
    --load-cookies=L..  File containing cookies in Netscape/wget format
    --drop-set-cookie   Ignore Set-Cookie header from response
    --mobile            Imitate smartphone through HTTP User-Agent header
    --random-agent      Use randomly selected HTTP User-Agent header value
    --host=HOST         HTTP Host header value
    --referer=REFERER   HTTP Referer header value
    --headers=HEADERS   Extra headers (e.g. "Accept-Language: fr\nETag: 123")
    --auth-type=AUTH..  HTTP authentication type (Basic, Digest, NTLM or PKI)
    --auth-cred=AUTH..  HTTP authentication credentials (name:password)
    --auth-file=AUTH..  HTTP authentication PEM cert/private key file
    --ignore-code=IG..  Ignore (problematic) HTTP error code (e.g. 401)
    --ignore-proxy      Ignore system default proxy settings
    --ignore-redirects  Ignore redirection attempts
    --ignore-timeouts   Ignore connection timeouts
    --proxy=PROXY       Use a proxy to connect to the target URL
    --proxy-cred=PRO..  Proxy authentication credentials (name:password)
    --proxy-file=PRO..  Load proxy list from a file
    --proxy-freq=PRO..  Requests between change of proxy from a given list
    --tor               Use Tor anonymity network
    --tor-port=TORPORT  Set Tor proxy port other than default
    --tor-type=TORTYPE  Set Tor proxy type (HTTP, SOCKS4 or SOCKS5 (default))
    --check-tor         Check to see if Tor is used properly
    --delay=DELAY       Delay in seconds between each HTTP request
    --timeout=TIMEOUT   Seconds to wait before timeout connection (default 30)
    --retries=RETRIES   Retries when the connection timeouts (default 3)
    --randomize=RPARAM  Randomly change value for given parameter(s)
    --safe-url=SAFEURL  URL address to visit frequently during testing
    --safe-post=SAFE..  POST data to send to a safe URL
    --safe-req=SAFER..  Load safe HTTP request from a file
    --safe-freq=SAFE..  Regular requests between visits to a safe URL
    --skip-urlencode    Skip URL encoding of payload data
    --csrf-token=CSR..  Parameter used to hold anti-CSRF token
    --csrf-url=CSRFURL  URL address to visit for extraction of anti-CSRF token
    --csrf-method=CS..  HTTP method to use during anti-CSRF token page visit
    --csrf-retries=C..  Retries for anti-CSRF token retrieval (default 0)
    --force-ssl         Force usage of SSL/HTTPS
    --chunked           Use HTTP chunked transfer encoded (POST) requests
    --hpp               Use HTTP parameter pollution method
    --eval=EVALCODE     Evaluate provided Python code before the request (e.g.
                        "import hashlib;id2=hashlib.md5(id).hexdigest()")

6、优化

这些选项可用于优化sqlmap的性能。

-o
  • 打开所有优化开关
--predict-output
  • 预测常见查询输出
--keep-alive
  • 使用持久HTTP连接
--null-connection
  • 检索没有实际HTTP响应正文的页面长度
--threads=THREADS
  • 最大并发HTTP请求数(默认为1)

7、注入

这些选项可用于指定要测试的参数,提供自定义注入有效负载和可选篡改脚本。

-p TESTPARAMETER
  • 可测试参数
--skip=SKIP
  • 跳过给定参数的测试
--skip-static
  • 跳过看起来不是动态的测试参数
--param-exclude=..
  • Regexp将参数排除在测试之外(例如“ses”)
--param-filter=P..
  • 按位置选择可测试参数(如“POST”)
--dbms=DBMS
  • 强迫指定后端的数据库的值
--dbms-cred=DBMS..
  • DBMS身份验证凭据(用户:密码)
--os=OS
  • 强迫指定后端的操作系统的值
--invalid-bignum
  • 使用大数字作为无效值
--invalid-logical
  • 使用逻辑操作作为无效值
--invalid-string 
  • 使用随机字符串作为无效值
--no-cast
  • 关闭有效载荷投射机构
--no-escape
  • 关闭字符串转义机制
--prefix=PREFIX
  • 注入有效负载前缀字符串
--prefix=PREFIX
  • 注入有效负载前缀字符串
--tamper=TAMPER
  • 使用给定的脚本篡改注入数据

8、侦察

这些选项可用于自定义检测阶段。

--level=LEVEL
  • 要执行的测试级别(1-5,默认为1)
  • level有5个等级,默认等级为1,进行Cookie测试时使用–level 2 ,进行use-agent或refer测试时使用–level 3 ,进行 host 测试时使用–level 5
--risk=RISK
  • 执行测试的风险(1-3,默认值1)
--string=STRING
  • 查询求值为True时要匹配的字符串
--not-string=NOT..
  • 查询求值为False时要匹配的字符串
--regexp=REGEXP 
  • 当查询求值为True时要匹配的Regexp
--code=CODE
  • 查询求值为True时要匹配的HTTP代码
--smart
  • 仅当启发式为正时,才执行彻底测试
--text-only
  • 仅基于文本内容比较页面
--titles
  • 仅根据标题比较页面

9、技巧

这些选项可用于调整特定SQL注入的测试技巧。

--technique=TECH..
  • 要使用的SQL注入技术(默认为“BEUSTQ”)
  • B:Boolean-based blind(布尔型注入) E:Error-based(报错型注入) U:Union query-based(可联合查询注入) S:Stacked queries(可多语句查询注入) T:Time-based blind(基于时间延迟注入) Q:Inline queries(嵌套查询注入)
--time-sec=TIMESEC
  • 延迟DBMS响应的秒数(默认值5)
--union-cols=UCOLS
  • 要测试联合查询SQL注入的列的范围
  • 使用union时,通过orderby测试的查询字段数,默认level为1时,查1-10,level为5时,查1-50.
--union-char=UCHAR
  • 用于强制限定列数的字符
--union-from=UFROM
  • 要在联合查询SQL注入的FROM部分中使用的表
--dns-domain=DNS..
  • 用于DNS过滤攻击的域名
--second-url=SEC..
  • 搜索二阶响应的结果页面URL
--second-req=SEC..
  • 从文件加载二阶HTTP请求

10、指纹

$ sqlmap -f, --fingerprint
  • 执行扩展DBMS版本指纹,简单来说,就是看数据库是mysql还是其它

11、枚举

这些选项可用于枚举后端数据库,文件中包含的管理系统信息、结构和数据表

-a, --all
  • 检索所有
-b, --banner
/*
[16:39:29] [INFO] the back-end DBMS is MySQL
[16:39:29] [INFO] fetching banner
web application technology: PHP 7.3.4, Nginx 1.15.11
back-end DBMS: MySQL >= 5.6
banner: '5.7.26'
*/
  • 检索dbms的标识,包括数据库类型、版本和其它服务器信息
--current-user
  • 检索dbms当前用户
--current-db
  • 检索dbms当前数据库
--hostname 
  • 检索dbms的服务器主机名
--is-dba
  • 检测DBMS当前用户是否为DBA
  • dba用户是指具有dba角色的数据库用户。特权用户可以执行启动实例,关闭实例等特殊操作,而dba用户只有在启动数据库后才能执行各种管理工作。
--users
  • 枚举DBMS用户,指的是对当前数据库具有权限的用户,而非所有数据库
--passwords
  • 枚举DBMS用户密码哈希
--privileges
  • 枚举DBMS用户权限
--roles
  • 枚举DBMS用户角色
--dbs
  • 枚举dbms数据库
--tables
  • 枚举dbms下的数据表
  • 如果不指定数据库,则会枚举所有数据库的数据表,按数据库列出
--columns
  • 枚举dbms下的数据字段
--schema
  • 枚举DBMS模式,实际上给出数据库和数据表的对应关系
--count
  • 检索表的条目数
--dump
  • 转储DBMS数据库表项
--dump-all
  • 转储所有DBMS数据库表项
--search
  • 搜索列、表和/或数据库名称
--comments 
  • 在枚举期间检查DBMS注释
--statements
  • 检索正在DBMS上运行的SQL语句
-D DB
  • 指定数据库进行枚举
-T TBL
  • 指定数据表
-C COL
  • 指定数据字段
-X EXCLUDE
  • 不枚举的DBMS数据库标识符
-U USER
  • 指定用户
--exclude-sysdbs
  • 枚举表时排除DBMS系统数据库
--pivot-column=P..
  • Pivot column name
--where=DUMPWHERE
  • 在表格转储时使用WHERE条件
--start=LIMITSTART
  • 要检索的第一个转储表条目
--stop=LIMITSTOP
  • 要检索的最后一个转储表条目
--first=FIRSTCHAR
  • 要检索的第一个查询输出字字符
--last=LASTCHAR
  • 要检索的最后一个查询输出字字符
--sql-query=SQLQ..
  • 要执行的SQL语句
--sql-shell
  • 提示输入交互式SQL shell
--sql-file=SQLFILE
  • 从给定文件执行SQL语句

12、暴力破解

这些选项可用于运行暴力检查。

--common-tables
  • 检查公共表是否存在,即暴力破解表名,当–tables无效时使用
--common-columns
  • 检查公共列名是否存在,即暴力破解字段名,当–columns无效时使用
--common-files
  • 检查公共文件名是否存在,即暴力破解文件名

13、用户定义函数注入

这些选项可用于创建自定义用户定义函数

    --udf-inject        Inject custom user-defined functions
    --shared-lib=SHLIB  Local path of the shared library

14、文件系统访问

这些选项可用于访问后端数据库管理系统底层文件系统

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

15、操作系统访问

这些选项可用于访问后端数据库管理系统底层操作系统

--os-cmd=OSCMD
--os-cmd=whoami
  • 执行操作系统命令
    --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

16、windows注册表访问

这些选项可用于访问后端数据库管理系统Windows注册表

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

17、全体的

这些选项可用于设置一些常规工作参数

-s SESSIONFILE
  • 从一个存储文件中加载session
-t TRAFFICFILE
  • 将所有HTTP通信记录到文本文件中
--answers=ANSWERS
  • 设置预定义的答案(例如“退出=N,跟随=N”)
--base64=BASE64P..
  • 包含Base64编码数据的参数
--base64-safe
  • 使用URL和文件名安全Base64字母表(RFC 4648)
--batch
  • 永远不要要求用户输入,使用默认行为

    --binary-fields=..  Result fields having binary values (e.g. "digest")
    --check-internet    Check Internet connection before assessing the target
    --cleanup           Clean up the DBMS from sqlmap specific UDF and tables
    --crawl=CRAWLDEPTH  Crawl the website starting from the target URL
    --crawl-exclude=..  Regexp to exclude pages from crawling (e.g. "logout")
    --csv-del=CSVDEL    Delimiting character used in CSV output (default ",")
    --charset=CHARSET   Blind SQL injection charset (e.g. "0123456789abcdef")
    --dump-format=DU..  Format of dumped data (CSV (default), HTML or SQLITE)
    --encoding=ENCOD..  Character encoding used for data retrieval (e.g. GBK)
    --eta               Display for each output the estimated time of arrival
    --flush-session     Flush session files for current target
    --forms             Parse and test forms on target URL
    --fresh-queries     Ignore query results stored in session file
    --gpage=GOOGLEPAGE  Use Google dork results from specified page number
    --har=HARFILE       Log all HTTP traffic into a HAR file
    --hex               Use hex conversion during data retrieval
    --output-dir=OUT..  Custom output directory path
    --parse-errors      Parse and display DBMS error messages from responses
    --preprocess=PRE..  Use given script(s) for preprocessing (request)
    --postprocess=PO..  Use given script(s) for postprocessing (response)
    --repair            Redump entries having unknown character marker (?)
    --save=SAVECONFIG   Save options to a configuration INI file
    --scope=SCOPE       Regexp for filtering targets
    --skip-heuristics   Skip heuristic detection of SQLi/XSS vulnerabilities
    --skip-waf          Skip heuristic detection of WAF/IPS protection
    --table-prefix=T..  Prefix used for temporary tables (default: "sqlmap")
    --test-filter=TE..  Select tests by payloads and/or titles (e.g. ROW)
    --test-skip=TEST..  Skip tests by payloads and/or titles (e.g. BENCHMARK)
    --web-root=WEBROOT  Web server document root directory (e.g. "/var/www")

18、混杂的

这些选项不属于任何其他类别。

$ sqlmap --purge
  • 安全的移除sqlmap的data目录下的所有内容,如果存在相同路径,前面已经扫描过,则默认不会再次扫描而是使用现有的payload
$ sqlmap --update
  • 用于更新
$ sqlmap --wizard
  • 面向初学者的简单向导界面
  • 在执行之后,会出现交互式流程,询问url、执行等级和任务
    -z MNEMONICS        Use short mnemonics (e.g. "flu,bat,ban,tec=EU")
    --alert=ALERT       Run host OS command(s) when SQL injection is found
    --beep              Beep on question and/or when SQLi/XSS/FI is found
    --dependencies      Check for missing (optional) sqlmap dependencies
    --disable-coloring  Disable console output coloring
    --list-tampers      Display list of available tamper scripts
    --offline           Work in offline mode (only use session data)
    --purge             Safely remove all content from sqlmap data directory
    --results-file=R..  Location of CSV results file in multiple targets mode
    --sqlmap-shell      Prompt for an interactive sqlmap shell
    --tmp-dir=TMPDIR    Local directory for storing temporary files
    --unstable          Adjust options for unstable connections
    --update            Update sqlmap
    --wizard            Simple wizard interface for beginner users

19、实践

安全测试工具之sqlmap – 磨牙君 – 博客园 (cnblogs.com)

sqlmap使用教程(超详细) – Angel-史迪仔 – 博客园 (cnblogs.com)

sqlmap超详细笔记+思维导图 – bmjoker – 博客园 (cnblogs.com)

step1:sqlmap -u [``"URL"``] ``//测试是否存在注入
step2:sqlmap -u [``"URL"``] -current-db ``//查询当前数据库
step3:sqlmap -u [``"URL"``] -D [``"数据库名"``] --tables ``//查询当前数据库中的所有表
step4:sqlmap -u [``"URL"``] -D [``"数据库名"``] -T [``"表名"``] --columns ``//查询指定库中指定表的所有列(字段)
step5:sqlmap -u [``"URL"``] -D [``"数据库名"``] -T [``"表名"``] -C [``"列名"``] --dump ``//打印出指定库中指定表指定列中的字段内容

kali中sqlmap的安装路径为:/usr/share/sqlmap

/usr/share/sqlmap/data/xml/boundaries.xml为sqlmap的payload文件

工具| sqlmap payload修改之路(下) (sohu.com)

SQLMAP进阶使用 – MayIKissYou | 漏洞人生 (vuln.cn)

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

level:共有五个等级,默认为1,在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。

tamper:sqlmap除了使用CHAR()函数来防止出现单引号之外没有对注入的数据修改,你可以使用–tamper参数对数据做修改来绕过WAF等设备。