sqlmap 1.10.10 配置参数详解

sqlmap 1.10.10 参数体系详解:-h/-hh 帮助体系、-c 配置文件加载与键名规则、16 分组参数逐项默认值、conf↔CLI 键名映射表与扫描预案模板,含键名错配静默忽略等实测排障。

sqlmap发票管理自托管PHP 应用预约调度安全测试sqlmap2026/10/24

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 属违法行为。

二、前置条件

  1. 已按《Ubuntu 22.04 安装 sqlmap 1.10.10 指南》完成安装,which sqlmap 返回 /usr/local/bin/sqlmap。
  2. 如需复现本文 -c 配置文件实测,准备一个本地注入靶场(Python 标准库 http.server + sqlite3 即可搭建,监听 127.0.0.1,提供 /user?id=1 注入点)。
  3. 配置文件路径认知: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):

#分组职责代表参数
1Options运行行为总控-h/-hh/--version/-v
2Target指定目标-u/-r/-m/-g/-c/--random-pick
3RequestHTTP 请求定制--data/--cookie/--headers/--timeout/--retries/--proxy/--random-agent
4Optimization性能优化-o/--threads/--keep-alive/--null-connection/--predict-output
5Injection注入面圈定-p/--skip/--dbms/--os/--tamper/--test-filter
6Detection检测灵敏度--level/--risk/--string/--not-string/--smart
7Techniques注入技术--technique/--time-sec/--union-cols/--dns-domain
8Fingerprint指纹--extensive-fp
9Enumeration数据枚举--banner/--tables/--columns/--dump/--schema
10Brute force表/列名盲猜--common-tables/--common-columns
11User-defined function injection自定义函数注入--udf-inject
12File system access文件系统读写--file-read/--file-write/--file-dest
13Operating system access操作系统接管--os-shell/--os-pwn/--priv-esc
14Windows registry accessWindows 注册表--reg-read
15General通用行为--batch/-s/--output-dir/--flush-session/--dump-format
16Non-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 GOOGLEDORKGoogle dork 搜索结果作为目标无
-c CONFIGFILE加载 INI 配置文件无
--random-pick从批量目标中随机挑选活跃目标False

5.2 Request:HTTP 请求参数

参数说明默认值
--dataPOST 数据体无
--cookieCookie 头无
--headers附加 HTTP 头无
--user-agent / --random-agentUA 指定 / 随机 UA自带默认 UA / False
--timeout请求超时秒数30
--retries超时重试次数3
--delay每次请求间延迟秒数0
--csrf-retriesCSRF token 失败重试0
--proxyHTTP(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-aliveHTTP 长连接False
--null-connection仅取响应长度不取正文(盲注提速)False
--predict-output输出预测(逐字符收敛)False

5.4 Injection:注入面圈定

参数说明默认值
-p PARAMETER只测指定参数无
--skip跳过指定参数无
--dbms指定后端 DBMS(省指纹步骤)无
--os指定后端 OS无
--tamperpayload 改写脚本(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-colsUNION 列数探测范围无(自动)
--union-charUNION 占位列字符无(自动)
--union-fromUNION 补 FROM 表无
--dns-domainDNS 外带域名(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-delCSV 分隔符,
--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/--retries30 / 3官方默认值(defaults.py)
level/risk--level/--risk1 / 1官方默认值;首扫用保守档,确认注入后再加深
technique--techniqueBEUSTQ官方默认全开(conf 注释原文"recommended")
timeSec--time-sec5官方默认值(conf 注释 # Default: 5)
getTables--tablesTrue预案核心动作;键名不是 tables
batch--batchTrue靶场无人值守实测必需
dumpFormat--dump-formatCSV官方默认值;HTML 便于出报告
flushSession--flush-sessionFalse保留会话复用,改 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)。

八、参考链接