sqlmap 1.10.10 配置参数详解
sqlmap 1.10.10 参数体系详解:-h/-hh 帮助体系、-c 配置文件加载与键名规则、16 分组参数逐项默认值、conf↔CLI 键名映射表与扫描预案模板,含键名错配静默忽略等实测排障。
sqlmap 1.10.10 配置参数详解
目标:把 sqlmap 的参数体系讲透——从
-h/-hh帮助体系、-c配置文件加载机制,到 16 个参数分组的逐项详解与默认值,最后沉淀一份可实测验证的"扫描预案"配置模板。全部命令与回显均在 Ubuntu 22.04.4 + sqlmap 1.10.10(pip 版)实测通过(2026-10-24)。
一、环境信息
本章记录实测环境与素材来源,读者在同类环境可直接复现。
- 操作系统:Ubuntu 22.04.4 LTS
- 工具版本:sqlmap 1.10.10(pip 安装,
sqlmap --version输出1.10.10#pip,安装过程见《Ubuntu 22.04 安装 sqlmap 1.10.10 指南》) - Python:3.10.12 / pip 22.0.2
- 靶场:自建 Python + SQLite 注入靶场,仅监听
127.0.0.1:8145,含/user?id=1注入点(UNION 注入已验证),供-c配置文件加载实测 - 参数素材:
sqlmap -h(90 行)与sqlmap -hh(330 行)完整输出采集于 2026-10-24;默认值取自包内lib/core/defaults.py;配置模板取自包内sqlmap.conf
⚠️ 安全声明:sqlmap 是攻击性安全工具,本文所有实验均针对自建授权靶场(127.0.0.1 本地监听)。未获得书面授权对他人系统使用 sqlmap 属违法行为。
二、前置条件
- 已按《Ubuntu 22.04 安装 sqlmap 1.10.10 指南》完成安装,
which sqlmap返回/usr/local/bin/sqlmap。 - 如需复现本文
-c配置文件实测,准备一个本地注入靶场(Python 标准库http.server+sqlite3即可搭建,监听 127.0.0.1,提供/user?id=1注入点)。 - 配置文件路径认知:pip 安装后包内模板位于
/usr/local/lib/python3.10/dist-packages/sqlmap/sqlmap.conf(ls实测存在),源码安装则位于解压目录根。
三、参数查看与修改方式
sqlmap 有 4 种参数查阅/固化途径:-h、-hh、-c 配置文件、--save 落盘。先看 -h 与 -hh 的差别(实测):
sqlmap -h
___
__H__
___ ___[,]_____ ___ ___ {1.10.10#pip}
|_ -| . [)] | .'| . |
|___|_ [.]_|_|_|__,| _|
|_|V... |_| https://sqlmap.org
Usage: python3 sqlmap [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)
...
sqlmap -h | grep -c ""
sqlmap -hh | grep -c ""
90
330
结论:-h 只显示常用参数(90 行),-hh 显示全量参数(330 行,16 分组)。日常排查从 -h 入手,深度调参查 -hh。
3.1 配置文件加载(-c)
-c CONFIGFILE 从 INI 格式文件加载参数。关键规则:配置文件中的键名与 CLI 开关同名不同形——CLI 的 --tables 在 conf 里叫 getTables,--timeout 就叫 timeout。实测一段错误键名([Enumeration] tables = True)的表现:
[08:52:36] [INFO] parsing configuration file 'shop-scan.conf'
...
[08:52:37] [INFO] testing connection to the target URL
[08:52:38] [INFO] testing if the target URL is stable
...
[08:52:45] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/127.0.0.1'
目标与检测均执行了,但枚举没有任何输出——错误键名被静默忽略,不报错。把键名改为官方 conf 中的正确写法 getTables = True 再跑:
[08:54:16] [INFO] fetching tables for database: 'SQLite_masterdb'
Database: SQLite_masterdb
[2 tables]
+--------------------+
| shop_items |
| users |
+--------------------+
[08:54:24] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/127.0.0.1'
users、shop_items 两张表成功枚举。这是 sqlmap 配置文件最大的坑:键名写错不报错、直接静默跳过。正确的键名清单见包内 sqlmap.conf(每个键都有注释说明)。
3.2 配置文件与命令行的合并关系(实测)
-c 与命令行参数是叠加合并而非二选一:conf 提供基线(如 getTables = True),命令行再追加新动作(如 --current-db),两类都会执行。实测(conf 含 url + getTables,命令行加 --current-db):
sqlmap -c shop-scan.conf --batch --current-db
[08:58:09] [WARNING] on SQLite it is not possible to get name of the current database (use only '--tables')
[08:58:09] [INFO] fetching tables for database: 'SQLite_masterdb'
Database: SQLite_masterdb
[2 tables]
+--------------------+
| shop_items |
| users |
+--------------------+
conf 里的 getTables 与命令行的 --current-db 都生效了(SQLite 不支持当前库名枚举的提示为预期行为)。
3.3 修改参数的 4 条路径小结
| 路径 | 命令/文件 | 适用场景 | 生效方式 |
|---|---|---|---|
| 临时 CLI 开关 | sqlmap --xxx ... | 单次运行微调 | 立即生效,会话内缓存 |
| 配置文件 | -c /path/plan.conf | 固化"扫描预案"复用 | 与 CLI 叠加合并 |
| 交互应答固化 | --batch | 无人值守 | 对所有交互取默认答案 |
| 帮助查询 | -h / -hh | 查参数与默认值 | 只读 |
四、参数总览(16 分组)
-hh 将全量参数组织为 16 个分组(实测分组标题,2026-10-24):
| # | 分组 | 职责 | 代表参数 |
|---|---|---|---|
| 1 | Options | 运行行为总控 | -h/-hh/--version/-v |
| 2 | Target | 指定目标 | -u/-r/-m/-g/-c/--random-pick |
| 3 | Request | HTTP 请求定制 | --data/--cookie/--headers/--timeout/--retries/--proxy/--random-agent |
| 4 | Optimization | 性能优化 | -o/--threads/--keep-alive/--null-connection/--predict-output |
| 5 | Injection | 注入面圈定 | -p/--skip/--dbms/--os/--tamper/--test-filter |
| 6 | Detection | 检测灵敏度 | --level/--risk/--string/--not-string/--smart |
| 7 | Techniques | 注入技术 | --technique/--time-sec/--union-cols/--dns-domain |
| 8 | Fingerprint | 指纹 | --extensive-fp |
| 9 | Enumeration | 数据枚举 | --banner/--tables/--columns/--dump/--schema |
| 10 | Brute force | 表/列名盲猜 | --common-tables/--common-columns |
| 11 | User-defined function injection | 自定义函数注入 | --udf-inject |
| 12 | File system access | 文件系统读写 | --file-read/--file-write/--file-dest |
| 13 | Operating system access | 操作系统接管 | --os-shell/--os-pwn/--priv-esc |
| 14 | Windows registry access | Windows 注册表 | --reg-read |
| 15 | General | 通用行为 | --batch/-s/--output-dir/--flush-session/--dump-format |
| 16 | Non-SQL injection | 非 SQL 注入检测 | --forms/--crawl/--invalid-bignum 等新能力面 |
💡 技术拓展:
-hh的分组顺序即 sqlmap 的运行流水线(定目标 → 构请求 → 圈注入面 → 检测 → 定技术 → 枚举取数 → 接管)。调参时顺着这条线找参数,比按字母序检索快得多。
五、核心参数分类详解
以下每个参数的默认值均为实测(-hh 输出与包内 lib/core/defaults.py 交叉核对,2026-10-24)。
5.1 Target:目标参数
| 参数 | 说明 | 默认值 |
|---|---|---|
-u URL | 目标 URL(如 http://host/vuln.php?id=1) | 无 |
-r FILE | 从 HTTP 请求文件加载目标(配合 Burp 抓包) | 无 |
-m FILE | 批量目标文件(每行一个 URL) | 无 |
-g GOOGLEDORK | Google dork 搜索结果作为目标 | 无 |
-c CONFIGFILE | 加载 INI 配置文件 | 无 |
--random-pick | 从批量目标中随机挑选活跃目标 | False |
5.2 Request:HTTP 请求参数
| 参数 | 说明 | 默认值 |
|---|---|---|
--data | POST 数据体 | 无 |
--cookie | Cookie 头 | 无 |
--headers | 附加 HTTP 头 | 无 |
--user-agent / --random-agent | UA 指定 / 随机 UA | 自带默认 UA / False |
--timeout | 请求超时秒数 | 30 |
--retries | 超时重试次数 | 3 |
--delay | 每次请求间延迟秒数 | 0 |
--csrf-retries | CSRF token 失败重试 | 0 |
--proxy | HTTP(S) 代理 | 无 |
--safe-url/--safe-freq | 安全访问 URL 与频率(0=禁用) | 0 |
💡 说明:
--delay/--safe-url是对目标限速/IDS 的友好保护项;对自建单线程靶场,连续密集请求容易触发connection timed out重试(实测在--dbs枚举时出现过),提高--timeout或降低并发可缓解。
5.3 Optimization:优化参数
| 参数 | 说明 | 默认值 |
|---|---|---|
-o | 打开全部优化开关(等价 keep-alive/null-connection 等) | False |
--threads | 最大并发 HTTP 请求数 | 1 |
--keep-alive | HTTP 长连接 | False |
--null-connection | 仅取响应长度不取正文(盲注提速) | False |
--predict-output | 输出预测(逐字符收敛) | False |
5.4 Injection:注入面圈定
| 参数 | 说明 | 默认值 |
|---|---|---|
-p PARAMETER | 只测指定参数 | 无 |
--skip | 跳过指定参数 | 无 |
--dbms | 指定后端 DBMS(省指纹步骤) | 无 |
--os | 指定后端 OS | 无 |
--tamper | payload 改写脚本(WAF 绕过) | 无 |
--test-filter | 按名称过滤测试用例 | 无 |
--test-skip | 按名称跳过测试用例 | 无 |
5.5 Detection:检测灵敏度
| 参数 | 说明 | 默认值 |
|---|---|---|
--level | 测试面等级 1-5,越高测试的参数注入点越多(1 只测 GET/POST 参数,2 起含 Cookie 等,3 起含 User-Agent/Referer,5 全测试面) | 1 |
--risk | 风险等级 1-3,越高执行的测试语句越激进(3 含 OR 型布尔测试,有改写数据风险) | 1 |
--string | 真条件匹配串 | 无 |
--not-string | 假条件匹配串 | 无 |
--code | 真条件 HTTP 状态码 | 无 |
--smart | 仅在有阳性启发时做全量测试 | False |
⚠️ 注意:
--risk 3的 OR 型布尔注入会向目标写入条件数据(如把整表值置同),只对授权测试的靶机使用。
5.6 Techniques:注入技术
| 参数 | 说明 | 默认值 |
|---|---|---|
--technique | 注入技术组合(B 布尔/E 报错/U UNION/S 堆叠/T 时间/Q 内联) | BEUSTQ |
--time-sec | 时间盲注延迟秒数 | 5 |
--union-cols | UNION 列数探测范围 | 无(自动) |
--union-char | UNION 占位列字符 | 无(自动) |
--union-from | UNION 补 FROM 表 | 无 |
--dns-domain | DNS 外带域名(Q 技术取数) | 无 |
--second-url | 二阶注入回显页 | 无 |
5.7 Enumeration:数据枚举
| 参数 | 说明 | SQLite 支持性(实测) |
|---|---|---|
--banner | 数据库版本横幅 | 支持(实测返回 SQLite 3.37.2) |
--current-user | 当前用户 | 不支持(工具提示不可用) |
--current-db | 当前数据库名 | 不支持(提示 use only '--tables') |
--dbs | 枚举数据库 | 不支持(提示 use '--tables') |
--tables | 枚举表 | 支持 |
--schema | 枚举表结构与列定义 | 支持 |
--count | 行数统计 | 支持 |
-T/--columns | 指定表后枚举列 | 支持 |
-T/--dump | 拖库导出 | 支持 |
--dump-all | 全库导出 | 支持 |
💡 说明:SQLite 是嵌入式单文件库,没有"服务器多库"概念,所以
--dbs/--current-db这类多库枚举天然不适用——sqlmap 会明确提示改用--tables。这是方言差异,不是故障。
5.8 General:通用行为
| 参数 | 说明 | 默认值 |
|---|---|---|
--batch | 所有交互取默认答案(无人值守) | False |
-s SESSIONFILE | 指定会话文件 | ~/.local/share/sqlmap/output/<目标>/session.sqlite |
--output-dir | 输出目录 | ~/.local/share/sqlmap/output |
--flush-session | 丢弃会话重新检测 | False |
--dump-format | 拖库导出格式(CSV/HTML/SQLITE) | CSV |
--csv-del | CSV 分隔符 | , |
--update | 自更新到最新稳定版 | False |
5.9 Miscellaneous 与 Non-SQL injection
| 参数 | 说明 | 默认值 |
|---|---|---|
--wizard | 向导模式(逐步提问) | False |
--purge | 安全删除 sqlmap 全部数据目录 | False |
--list-tampers | 列出全部 tamper 脚本 | False |
--dependencies | 自检第三方依赖 | False |
--forms | 自动解析页面表单为目标 | False |
--crawl | 爬取站点指定深度后再测 | 无 |
--invalid-bignum/--invalid-logical | 用大数/布尔条件作失效值 | False |
--dependencies 实测(节选,用于直连特定 DBMS 前的依赖自检):
[08:58:47] [WARNING] sqlmap requires 'python-psycopg2' third-party library in order to directly connect to the DBMS 'PostgreSQL'. Download from 'https://github.com/psycopg/psycopg2'
[08:58:47] [WARNING] sqlmap requires 'python-oracledb' third-party library in order to directly connect to the DBMS 'Oracle'. Download from 'https://oracle.github.io/python-oracledb/'
[08:58:47] [WARNING] sqlmap requires 'python-pymssql' third-party library in order to directly connect to the DBMS 'Microsoft SQL Server'. Download from 'https://github.com/pymssql/pymssql'
[08:58:47] [WARNING] sqlmap requires 'python-impacket' third-party library for out-of-band takeover feature. Download from 'https://github.com/coresecurity/impacket'
注意:这些 WARNING 只影响"直连数据库"与"带外接管"特性;走 HTTP 注入路径不需要任何第三方库。
六、扫描预案配置模板
sqlmap 没有"生产环境"概念(CLI 工具、无常驻服务),但可以把高频参数组合固化成 INI "预案文件",用 -c 复用。以下模板基于包内 sqlmap.conf 的真实键名整理(默认值与第 5 节一致),保存为 plan.conf:
# ---- 目标 ----
[Target]
# 单目标:url = http://127.0.0.1:8145/user?id=1
# 批量目标:bulkFile = /root/targets.txt
# 请求文件:requestFile = /root/req.txt
# ---- 请求 ----
[Request]
timeout = 30
retries = 3
delay = 0
randomAgent = False
# ---- 检测 ----
[Detection]
level = 1
risk = 1
# ---- 技术 ----
[Techniques]
technique = BEUSTQ
timeSec = 5
# ---- 枚举 ----
[Enumeration]
getBanner = True
getTables = True
getColumns = False
dumpTable = False
# ---- 通用 ----
[General]
batch = True
flushSession = False
dumpFormat = CSV
逐项说明(键名 ↔ CLI 开关对照,均按包内 sqlmap.conf 实测核对):
| conf 键名 | CLI 开关 | 模板取值 | 取值依据 |
|---|---|---|---|
timeout/retries | --timeout/--retries | 30 / 3 | 官方默认值(defaults.py) |
level/risk | --level/--risk | 1 / 1 | 官方默认值;首扫用保守档,确认注入后再加深 |
technique | --technique | BEUSTQ | 官方默认全开(conf 注释原文"recommended") |
timeSec | --time-sec | 5 | 官方默认值(conf 注释 # Default: 5) |
getTables | --tables | True | 预案核心动作;键名不是 tables |
batch | --batch | True | 靶场无人值守实测必需 |
dumpFormat | --dump-format | CSV | 官方默认值;HTML 便于出报告 |
flushSession | --flush-session | False | 保留会话复用,改 True 则强制重检 |
加载方式与实测验证(模板放入 shop-scan.conf,getTables = True 开启):
sqlmap -c shop-scan.conf --batch --flush-session
[08:54:16] [INFO] fetching tables for database: 'SQLite_masterdb'
Database: SQLite_masterdb
[2 tables]
+--------------------+
| shop_items |
| users |
+--------------------+
适用场景:目标授权书要求"先摸表结构、暂不拖库"时,dumpTable=False、getColumns=True;确认后把 dumpTable 改 True 复扫。模板文件可按目标分文件管理(如 plan-tcp80.conf、plan-tcp8443.conf),配合第 3.2 节的叠加特性,临时动作走命令行、固定动作进预案。
七、常见问题
Q1:conf 里写了开关但不生效,也不报错?
九成是键名写错(如把 --tables 写成 tables)。正确键名必须以包内 sqlmap.conf 为准:枚举类是 getTables/getColumns/dumpTable/getBanner,通用类是 batch/flushSession。写错静默忽略,本文第 3.1 节有完整实录。
Q2:-c 配置文件和命令行同时给参数,谁赢?
两者叠加合并:conf 提供基线,命令行追加新动作,都执行(第 3.2 节实测)。想让某次运行覆盖预案,把要改的项写进命令行,conf 里的同键项保持不变即可(命令行开关最终仍以显式传入为准)。
Q3:单线程靶机枚举时频繁 connection timed out 重试?
自建 http.server 单线程处理请求,连续密集枚举会排队超时。sqlmap 按 --retries 3 自动重试并最终完成(实测 --dbs 时出现过一次超时重试,结果仍完整)。缓解:降低 --threads(默认 1 本就最保守)、提高 --timeout。
Q4:--risk 3 会不会破坏靶机数据?
会。risk 3 的 OR 型布尔注入会改写目标表数据,conf 注释原文写明"boolean-based blind SQL injection tests with AND are considered risk 1, with OR are considered risk 3"。授权靶场可玩,真实业务一律 risk ≤ 1。
Q5:如何确认某个 tamper 脚本存在与用途?
sqlmap --list-tampers
实测输出共 84 个脚本条目(如 apostrophemask.py、between.py 等),每条带一行用途说明;脚本本体在包内 tamper/ 目录(85 个 .py 文件,含 __init__.py)。
八、参考链接
- 包内模板:
/usr/local/lib/python3.10/dist-packages/sqlmap/sqlmap.conf(1.10.10,2026-10-24 实测读取) - 默认值定义:包内
lib/core/defaults.py - 官方参数手册:
sqlmap -hh全量输出(330 行)与用户手册 https://github.com/sqlmapproject/sqlmap/wiki/Usage - 站内系列:《sqlmap 1.10.10 介绍与选型指南》《Ubuntu 22.04 安装 sqlmap 1.10.10 指南》《sqlmap 1.10.10 常用 CLI 命令与工具详解》