sqlmap
sqlmap 是一款开源的自动化 SQL 注入检测与利用工具,支持多种数据库与注入方式,常用于 Web 安全测试与渗透。
命令行用法概览
用法: python sqlmap.py [选项]
查看简要帮助:sqlmap -h
查看完整帮助:sqlmap -hh
查看版本:sqlmap --version
输出详细度:-v 0-6(默认 1,数字越大输出越详细)
目标(Target)
至少需要指定下列之一来定义目标:
| 选项 | 说明 |
|---|
-u URL / --url=URL | 目标 URL(如 http://www.site.com/vuln.php?id=1) |
-d DIRECT | 直连数据库的连接字符串 |
-l LOGFILE | 从 Burp/WebScarab 代理日志中解析目标 URL |
-m BULKFILE | 从文本文件中读取多个目标 URL 进行扫描 |
-r REQUESTFILE | 从文件加载原始 HTTP 请求 |
-g GOOGLEDORK | 将 Google dork 结果作为目标 URL 进行测试 |
-c CONFIGFILE | 从 INI 配置文件加载选项 |
请求(Request)
控制如何与目标 URL 通信:
| 选项 | 说明 |
|---|
-A / --user-agent | 自定义 HTTP User-Agent |
-H / --header | 额外请求头(如 X-Forwarded-For: 127.0.0.1) |
--method=METHOD | 强制使用指定 HTTP 方法(如 PUT) |
--data=DATA | POST 提交的数据(如 id=1) |
--param-del=CHAR | 参数分隔符(默认 GET/POST 为 &) |
--cookie=COOKIE | Cookie 头内容 |
--cookie-del=CHAR | Cookie 内键值分隔符(默认 ;) |
--random-agent | 随机选择 User-Agent |
--proxy=PROXY | 使用 HTTP(S) 代理(如 http://127.0.0.1:8080) |
--tor | 使用 Tor 代理 |
--delay=SECONDS | 每次请求之间的延迟(秒) |
--timeout=SECONDS | 连接超时时间(默认 30) |
--retries=RETRIES | 超时重试次数(默认 3) |
--force-ssl | 强制使用 HTTPS |
优化(Optimization)
| 选项 | 说明 |
|---|
-o | 开启常用优化(keep-alive、null-connection、threads=3) |
--keep-alive | 使用持久连接 |
--null-connection | 仅获取响应长度、不取正文(盲注时省带宽) |
--threads=THREADS | 最大并发请求数(默认 1,最大 10) |
注入(Injection)
| 选项 | 说明 |
|---|
-p TESTPARAMETER | 指定要测试的参数(逗号分隔) |
--skip=PARAM | 跳过对某参数的测试 |
--dbms=DBMS | 指定后端数据库类型(如 MySQL、Oracle) |
--os=OS | 指定后端操作系统(Linux/Windows) |
--prefix=PREFIX | 注入载荷的前缀 |
--suffix=SUFFIX | 注入载荷的后缀 |
--tamper=TAMPER | 使用的 tamper 脚本(逗号分隔,见 tamper/ 目录) |
检测(Detection)
| 选项 | 说明 |
|---|
--level=LEVEL | 测试深度 1–5(默认 1,越高测试越多) |
--risk=RISK | 风险等级 1–3(默认 1,3 会测 OR 等高风险载荷) |
--string=STRING | 布尔盲注为 True 时页面应包含的字符串 |
--not-string=NOTSTRING | 布尔盲注为 False 时页面应包含的字符串 |
--regexp=REGEXP | 用正则匹配 True 响应 |
--code=CODE | 用 HTTP 状态码判断 True(如 --code=200) |
--smart | 启发式:只对“像有注入”的参数做完整测试 |
技术(Techniques)
| 选项 | 说明 |
|---|
--technique=TECH | 要使用的注入技术字母组合,默认 BEUSTQ |
| B 布尔盲注 E 报错 U UNION S 堆叠 T 时间盲注 Q 内联 |
--time-sec=SEC | 时间盲注的延迟秒数(默认 5) |
--union-cols=MIN-MAX | UNION 测试列数范围(如 12-16) |
--union-char=CHAR | UNION 测试时填充列用的字符(默认 NULL) |
--dns-domain=DOMAIN | DNS 外带攻击时你控制的域名 |
指纹与枚举(Fingerprint & Enumeration)
| 选项 | 说明 |
|---|
-f / --fingerprint | 详细指纹识别 DBMS 版本 |
-b / --banner | 获取 DBMS 版本信息 |
--current-user | 当前数据库用户 |
--current-db | 当前数据库名 |
--hostname | 数据库服务器主机名 |
--is-dba | 当前用户是否为 DBA |
--users | 枚举数据库用户 |
--passwords | 枚举用户密码哈希(可字典破解) |
--privileges | 枚举用户权限 |
--dbs | 枚举数据库列表 |
--tables | 枚举表(需配合 -D 指定库) |
--columns | 枚举列(需配合 -D -T) |
--schema | 导出库/表/列结构 |
--count | 仅统计表行数 |
--dump | 导出表数据(需 -T,可选 -D -C) |
--dump-all | 导出所有可访问表数据 |
-D DB | 指定数据库名 |
-T TBL | 指定表名 |
-C COL | 指定列名(逗号分隔) |
--exclude-sysdbs | 枚举时排除系统库 |
--where=DUMPWHERE | 导出时附加 WHERE 条件 |
--start=L / --stop=L | 导出起始/结束行 |
--sql-query=QUERY | 执行自定义 SQL |
--sql-shell | 交互式 SQL 外壳 |
文件与系统(File & OS)
| 选项 | 说明 |
|---|
--file-read=FILE | 读取数据库服务器上的文件 |
--file-write=F local | 上传本地文件到服务器 |
--file-dest=F remote | 远程写入路径(与 --file-write 配合) |
--os-cmd=CMD | 执行系统命令 |
--os-shell | 获取交互式系统 Shell |
通用(General)
| 选项 | 说明 |
|---|
-s SESSIONFILE | 从 .sqlite 会话文件恢复 |
-t TRAFFICFILE | 将 HTTP 流量记录到文本文件 |
--batch | 非交互模式,一律用默认选择 |
--answers=ANSWERS | 预设答案(如 quit=N,follow=N) |
--flush-session | 清空当前目标的会话缓存 |
--fresh-queries | 忽略会话中已缓存的查询结果 |
--output-dir=DIR | 自定义输出目录 |
--save=CONFIG | 将当前选项保存为 INI 配置 |
-c CONFIGFILE | 从 INI 文件加载选项 |
常用示例
# 检测 GET 参数注入
sqlmap -u "http://target.com/page?id=1"
# 指定参数、数据库类型,并取 banner
sqlmap -u "http://target.com/page?id=1" -p id --dbms=mysql -b
# POST 注入,带 Cookie
sqlmap -u "http://target.com/login" --data="user=admin&pass=123" --cookie="session=xxx" -p user,pass
# 从 Burp 保存的请求文件扫描
sqlmap -r request.txt
# 枚举库、表,并导出指定表
sqlmap -u "http://target.com/page?id=1" --dbs
sqlmap -u "http://target.com/page?id=1" -D 库名 --tables
sqlmap -u "http://target.com/page?id=1" -D 库名 -T 表名 --dump
# 仅使用 UNION 与报错,加快测试
sqlmap -u "http://target.com/page?id=1" --technique=EU --batch
完整选项列表请执行 sqlmap -hh 或查阅 官方 Usage 文档。