免责声明
本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!
Miscellaneous(杂项)
- -z:用于 简化命令输入 的参数,通过缩写多个常用参数组合为简短的助记符,显著提升命令行操作效率
- 🔍核心功能:
- 命令简化:将一长串高频参数组合(如 --batch --random-agent)压缩为逗号分隔的缩写形式(如 bat,randoma),减少重复输入
- 提升可读性:避免命令行因参数过多而冗长混乱,尤其适合复杂扫描场景(如同时指定技术类型、代理设置等)
- 📝语法结构:sqlmap -z "助记符1,助记符2=值,助记符3..."
- 助记符规则:取原参数名的前几个字母,需确保唯一性(如 --batch → bat,--technique → tec)
- 赋值操作:若参数需赋值(如 --technique=BEU),写作 tec=BEU
- ⚡使用方法:
- 快速启动扫描任务:
# 原命令
sqlmap -u "http://1.1.1.1?id=1" --batch --random-agent --technique=BEU
# 简化后
sqlmap -u "http://1.1.1.1?id=1" -z "bat,randoma,tec=BEU"
- 作用:跳过交互确认、随机化 User-Agent、仅测试布尔/报错/联合注入
- 结合数据导出操作:
# 原命令
sqlmap -u "http://1.1.1.1?id=1" --flush-session --technique=U --dump -D testdb -T users
# 简化后
sqlmap -u "http://1.1.1.1?id=1" -z "flu,tec=U,dump,D=testdb,T=users"
- 作用:清理会话缓存、仅用联合查询注入、导出 testdb.users 表数据
- ⚠注意事项:
- 唯一性要求:缩写必须能唯一对应原参数(如 --dump 不能简写为 du,因可能与 --dbs 冲突)
- 赋值参数格式:带值的参数(如 --level=3)需写为 lev=3,不可省略等号
- 不支持所有参数:仅适用于常用高频参数,非常规参数(如 --os-shell)仍需完整书写
- 💡替代方案:
- 配置文件保存:通过 --save 将常用配置保存为 INI 文件,避免重复输入
- 结合批处理脚本:在 Windows/Linux 脚本中封装带 -z 的命令,一键执行复杂扫描
- 💎总结:-z 是 sqlmap 针对高频参数组合设计的效率工具,尤其适合以下场景
- ✅ 需快速测试多参数组合的渗透任务
- ✅ 命令行输入易出错的新手用户
- ✅ 需反复执行相似命令的批量扫描
- 推荐策略:初次使用建议先用完整参数测试,确认无误后再用 -z 简化;复杂任务可搭配 --output-dir 保存日志便于复查
- --alert:用于在成功检测到 SQL 注入漏洞时触发自定义的操作系统命令(如警报、通知等),从而提升渗透测试效率
- 🔍核心功能:
- 漏洞发现即时通知:当 sqlmap 检测到目标存在 SQL 注入漏洞时,--alert 会立即执行预设的本地系统命令(例如播放声音、弹窗通知等),便于用户实时获知结果,无需持续监控扫描过程
- 执行自定义命令:支持在漏洞发现时自动运行指定的操作系统命令(如发送通知、记录日志或启动后续脚本)
- sqlmap -u "http://1.1.1.1/page?id=1" --alert="notify-send 'SQL注入漏洞发现!'"
- 此命令会在检测到漏洞时弹出桌面通知(需系统支持)
- 适用场景:
- 批量扫描:配合 -m 参数扫描多个目标(如 URL 列表文件),发现漏洞时自动告警
- 无人值守测试:自动化任务中通过声音或日志提示关键结果
- ⚡使用方法:
- 漏洞扫描告警集成:发现漏洞后调用 Python 脚本发送邮件
- sqlmap -m targets.txt --alert "python send_alert.py"
- 自动化响应流程:结合 --batch(非交互模式)和 --alert,实现全自动扫描与通知
- sqlmap -u "http://1.1.1.1/vuln.php?id=1" --batch --alert "echo '漏洞存在' | tee -a results.log"
- ⚠注意事项:
- 命令兼容性:需确保目标操作系统支持所执行的命令(如 Windows 可用 powershell 弹窗,Mac 用 osascript)
- Linux:sqlmap -u "http://1.1.1.1/page?id=1" --alert="notify-send 'SQL注入漏洞发现!'"
- Windows:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --alert "powershell -c '[System.Windows.Forms.MessageBox]::Show("漏洞发现")'"
- 权限要求:执行的命令需在当前用户权限范围内,否则可能失败
- 与 --beep 参数的区别:--beep 仅触发系统蜂鸣声(无需自定义命令),而 --alert 支持更复杂的操作(如调用脚本、发送网络请求)
参数 | 功能 | 使用场景 |
--alert | 执行自定义系统命令(如通知、日志) | 需定制化提示(弹窗、邮件等) |
--beep | 触发主机内置蜂鸣声 | 简单声音提醒,无需复杂操作 |
- 💡常见问题:
- 命令未执行:检查命令路径是否正确,或尝试使用绝对路径(如 /usr/bin/notify-send)
- 误报处理:建议先验证漏洞真实性再触发敏感操作(如重启服务)
- 安全风险:避免在命令中包含未过滤的外部输入,防止命令注入攻击
- 通过合理使用 --alert,可显著提升 SQL 注入检测的响应效率,尤其适用于大规模渗透测试场景
- --beep:用于在检测到 SQL 注入漏洞时触发系统蜂鸣声(主机内置提示音),帮助用户及时感知扫描结果
- 🔍核心功能:
- 漏洞发现实时提醒:当 sqlmap 扫描过程中成功识别 SQL 注入漏洞时,--beep 会触发主机内置的蜂鸣声(物理或系统模拟音效),无需用户持续监控终端输出
- 与 --alert 的区别:--beep 仅提供基础声音提醒,而 --alert 支持自定义系统命令(如弹窗、邮件通知等),灵活性更高
参数 | 功能 | 优先级 |
--beep | 触发系统内置蜂鸣声 | 简单快速提醒 |
--alert | 执行自定义命令(如脚本、通知) | 需复杂响应时使用 |
- ⚡使用方法:
- 基础命令: sqlmap -u "http://1.1.1.1/vuln.php?id=1" --beep
- 适用于批量扫描或无人值守场景,通过声音快速定位漏洞
- ⚠注意事项:
- 系统兼容性:
- Windows/Linux/macOS 均支持蜂鸣功能,但需确保主机声卡或系统音频驱动正常
- 若系统禁用蜂鸣声(如部分服务器环境),该参数可能无效
- 典型应用场景:
- 批量扫描:配合 -m 参数扫描 URL 列表文件时,自动提示漏洞位置
- 自动化脚本集成:嵌入 Python 脚本实现无人值守漏洞检测
import os
os.system('sqlmap -u "http://1.1.1.1?id=1" --batch --beep')
- 💡常见问题:
- 无蜂鸣声?
- 检查系统音频设置,或在命令中增加 -v 3 查看详细调试日志
- 误报干扰:建议结合 --level(检测等级)和 --risk(风险等级)参数过滤低可信结果,减少误报提示
- 替代方案:若需更复杂通知(如邮件、API 回调),改用 --alert "命令" 替代(例如 --alert "notify-send '漏洞发现'")
- 通过 --beep,用户可高效捕获扫描结果,尤其适合渗透测试中的快速响应场景。建议在自动化任务中结合 --batch(非交互模式)使用,避免手动确认中断流程
- --dependencies:用于检查运行环境依赖项的专用参数,主要功能是验证当前系统是否满足 sqlmap 所需的第三方库或组件(尤其是可选依赖)
- 🔍核心功能:
- 依赖项检查机制:
- 通过调用 Python 的 __import__() 函数动态尝试导入关键模块,若导入失败(抛出 ImportError)则提示缺失依赖
- 检查范围:包括 GUI 支持库(如 tkinter.ttk)、加密库、网络通信库等非核心但增强功能所需的依赖
- 与 Tamper 脚本的关联:amper 脚本(用于绕过 WAF)的 dependencies() 函数可声明自身依赖,但 --dependencies 不直接检测 Tamper 脚本依赖,仅针对 sqlmap 主程序环境
- ⚡使用方法:
- 基础检查命令: sqlmap --dependencies
- 执行后输出所有缺失的可选依赖列表及功能影响说明
- 典型应用场景:
- GUI 功能支持:若计划使用 sqlmap 的图形界面(如 --wizard 向导模式),需确保 tkinter 等库已安装
- 高级功能启用:如需要特定加密算法或代理支持时,依赖项缺失可能导致功能受限
- ⚠注意事项:
- 依赖类型区分:
- 核心依赖:如 urllib3、requests 等,缺失时 sqlmap 无法启动(非本参数检测范围)
- 可选依赖:如 pycryptodome(加密)、tkinter(GUI),仅影响部分功能,由 --dependencies 检测
- 跨平台兼容性:
- Windows 系统通常内置 tkinter,Linux/macOS 可能需要手动安装(如 Ubuntu 的 python3-tk 包)
- 若依赖检测失败,建议通过包管理器(如 pip 或系统包管理)安装缺失模块
- 与安装流程的关系:sqlmap 本身无需安装(解压即用),但依赖项需用户自行配置。首次运行时建议执行 --dependencies 预检
- 💡总结:
- 何时使用:在尝试使用 sqlmap 高级功能(如 GUI、复杂加解密)前,或遇环境兼容性问题时
- 替代方案:直接运行目标功能(如 --wizard),sqlmap 会在缺失依赖时自动告警,但 --dependencies 提供前置全面检查
- 优先级:属低频参数,普通注入测试通常无需调用;开发或定制化场景更相关
- --disable-coloring:用于禁用控制台输出着色的参数,主要作用是移除命令行输出中的颜色标记(如高亮、警告色等),使输出内容变为纯文本格式
- 🔍核心功能:
- 移除颜色标记:默认情况下,sqlmap 会使用 ANSI 转义序列对关键信息着色(如红色表示警告、绿色表示成功)。添加 --disable-coloring 后,所有输出变为黑白文本,避免颜色代码干扰日志记录或文本处理流程
- 典型场景:
- 输出重定向到文件(如 sqlmap ... --disable-coloring > log.txt),避免文件中包含不可读的转义字符
- 在旧版终端(如 Windows CMD)或自动化脚本中运行,防止颜色代码解析错误
- 与日志记录的兼容性:当配合 --output-dir 或 --log-file 保存扫描结果时,禁用着色可确保日志文件内容为纯文本,便于后续用 grep、awk 等工具解析
- ⚡使用方法:sqlmap -u "http://1.1.1.1?id=1" --disable-coloring
- ⚠输出效果对比:
启用着色(默认) | 禁用着色(--disable-coloring) |
[WARNING] SQL injection detected | [WARNING] SQL injection detected |
适合人工查看,关键信息醒目 | 适合脚本解析,避免特殊字符污染 |
- 💡适用场景推荐:
- 自动化渗透测试流水线:CI/CD 集成时,日志系统通常不支持颜色渲染,需禁用着色确保可读性
- 调试复杂注入场景:当使用 --tamper 脚本绕过 WAF 时,大量输出文本中移除颜色可聚焦内容本身
- 旧终端或远程会话:通过 SSH/Telnet 连接低版本设备时,避免因颜色支持不全导致显示错乱
- 💡提示:若需恢复默认着色,移除 --disable-coloring 即可
- --disable-hashing:用于禁用哈希计算功能的参数,主要作用是跳过对数据库敏感信息(如用户密码哈希值)的自动提取与处理流程(好像没看到啥区别)
- 🔍核心功能:
- 禁用哈希计算机制:
- 默认情况下,sqlmap 在枚举数据库用户密码时,会自动提取并存储密码的哈希值(如 MySQL 的 mysql.user 表),后续可调用本地破解模块(如 --crack)尝试破解
- 添加 --disable-hashing 后,sqlmap 将跳过哈希值的提取步骤,仅返回原始字段内容(若存在明文密码则直接显示),避免触发目标系统的哈希计算监控或节省扫描时间
- 典型用例: sqlmap -u "http://1.1.1.1/vuln.php?id=1" --passwords --disable-hashing
- 此命令仅输出密码字段的原始内容,不计算哈希值
- 与密码破解流程的关联:
- 该参数主要影响 --passwords、--hash 等涉及密码枚举的参数,对注入检测逻辑本身无直接影响
- 若目标数据库存储明文密码(如低安全性系统),禁用哈希可加速结果获取;若存储哈希值,则输出未经处理的哈希字符串
- ⚡使用方法:
- 快速漏洞验证:在时间敏感的渗透测试中,仅确认注入点存在性及可提取数据范围
- sqlmap -u "http://1.1.1.1/login" --data="user=admin&pass=*" --risk=3 --disable-hashing
- 规避云 WAF 检测:结合 --chunked 分块传输与 --random-agent 伪随机 UA,减少特征暴露
- sqlmap -u "https://1.1.1.1/api?id=1" --disable-hashing --proxy="http://tor:9050"
- 资源受限环境扫描:在低配置服务器或 IoT 设备上运行 sqlmap 时,避免哈希计算占用 CPU/内存资源
- sqlmap -r request.txt --batch --threads=3 --disable-hashing
- ⚠注意事项:
- 规避安全监控:某些数据库审计系统会监测异常哈希计算行为(如频繁读取 sys.syslogins)。禁用哈希可降低告警频率,辅助绕过基于行为分析的 WAF 规则
- 示例绕过组合: sqlmap -u "http://1.1.1.1" --tamper=space2comment --disable-hashing
- 优化扫描效率:当仅需验证注入漏洞而无需求解密码时(如 CTF 竞赛或快速渗透测试),跳过哈希计算可减少请求量,提升扫描速度
- 对比效果:
启用哈希(默认) | 禁用哈希(--disable-hashing) |
自动提取并分析哈希值 | 仅返回字段原始内容 |
可能触发安全告警 | 降低行为异常性 |
耗时较长(需额外计算) | 扫描速度提升 15%-30% |
- 局限性与风险:
- 无法破解密码:若目标密码以哈希形式存储,禁用后需手动提取哈希并交由其他工具(如 John the Ripper)处理
- 兼容性问题:少数场景下与 --os-shell 或 --file-read 联用时可能导致数据解析错误(因哈希验证环节缺失)
- 💡总结:--disable-hashing 是 sqlmap 中针对密码枚举场景的性能与隐匿性优化参数,适用于规避监控、加速扫描或资源受限场景,但会牺牲密码破解能力。需根据实际需求权衡使用
- --list-tampers:用于**列出所有内置的篡改脚本(tamper scripts)**的命令。这些脚本用于修改 SQL 注入负载的格式,以绕过 Web 应用防火墙(WAF)、输入过滤规则或其他安全机制
- 🔍核心功能:执行 sqlmap --list-tampers 会输出 SQLMap 当前支持的所有 tamper 脚本名称及其简要描述,帮助用户快速选择合适的脚本组合以绕过特定防护规则
- 使用场景:当目标网站存在 WAF(如 Cloudflare、Imperva)或过滤单引号、空格、关键字(如 UNION、SELECT)时,通过 --tamper 参数调用脚本组合
- sqlmap -u "http://1.1.1.1?id=1" --tamper="space2comment,randomcase"
- 📚常见 tamper 脚本分类与功能:以下是基于 SQLMap 官方文档及实战总结的 6 类高频 tamper 脚本及其作用(至于最全的tamper脚本分类,请查看之前发布的文章:《》)
分类 | 脚本名称 | 功能描述 | 适用场景 |
编码类 | base64encode.py | 对负载进行 Base64 编码 | 绕过关键字过滤(如 SELECT) |
charencode.py | URL 编码所有字符 | 过滤特殊字符(如单引号) | |
charunicodeescape.py | 使用 Unicode 转义格式(如SELECT→u0053u0045...) | 绕过正则表达式检测 | |
空白字符处理类 | space2comment.py | 将空格替换为/**/ | 绕过空格过滤(如 FortiWAF) |
space2plus.py | 将空格替换为+ | 兼容旧版 URL 编码规则 | |
space2randomblank.py | 用随机空白字符(如 Tab、换行)替代空格 | 混淆 WAF 的语法分析 | |
运算符替换类 | between.py | 将>替换为NOT BETWEEN 0 AND #,=替换为BETWEEN # AND # | 绕过运算符检测 |
greatest.py | 用GREATEST函数替代> | MySQL/PostgreSQL 环境 | |
关键字混淆类 | randomcase.py | 随机化 SQL 关键字大小写(如SELECT→SeLeCt) | 绕过大小写敏感规则 |
equaltolike.py | 将=替换为LIKE | 绕过等号过滤 | |
符号绕过类 | apostrophemask.py | 将单引号'替换为 UTF-8 全角字符%EF%BC%87 | 过滤单引号的场景 |
hexencode.py | 将字符串转换为十六进制格式(如'admin'→0x61646D696E) | 绕过字符串字面值检测 | |
高级组合类 | multiplespaces.py | 在关键字周围添加多个空格 | 干扰 WAF 的语法解析 |
versionedkeywords.py | 在关键字中添加版本号注释(如/*!50000SELECT*/) | MySQL 版本特性绕过 |
- ⚡使用方法:
- 组合脚本绕过 WAF:针对严格过滤空格的 Cloudflare WAF,可使用
- sqlmap -u "http://1.1.1.1/api?id=1" --tamper="space2comment,randomcase" --dbms=mysql
- 此组合将空格转为注释符 /**/ 并混淆关键字大小写,降低被拦截概率
- 自定义脚本开发:若内置脚本无效,可参考现有脚本(如 base64encode.py)编写自定义 tamper,保存为 `custom.py` 后通过 `--tamper=custom` 调用
def tamper(payload, **kwargs):
return payload.replace("SELECT", "SEL/**/ECT") # 注释分割关键字
- ⚠注意事项:
- 部分脚本可能因目标数据库语法差异失效(如 between.py 不适用于 Oracle)
- 过度组合脚本可能降低注入效率,建议先测试单一脚本再逐步叠加
- 💡总结:sqlmap --list-tampers 是渗透测试中绕过防护的关键入口,通过灵活选用或组合脚本,可显著提升 SQL 注入成功率。实际应用中需结合目标环境(如 WAF 类型、数据库版本)调整策略,并优先验证高兼容性脚本(如 space2comment、randomcase)
- --no-logging:用于完全禁用本地日志记录功能的参数,其主要作用是阻止 sqlmap 在扫描过程中生成任何报告文件(如 .log、.csv 等),避免在渗透测试过程中留下本地痕迹
- 🔍核心功能:
- 禁用日志生成机制:
- 默认行为:sqlmap 在执行扫描时会自动生成日志文件(如 sqlmap.log),记录注入过程、检测结果及错误信息
- 启用 --no-logging 后:所有本地日志记录被强制关闭,扫描结果仅输出至控制台,不生成任何文件
- 与日志相关参数的冲突:
- 不兼容参数:--output-dir(指定日志目录)、--log-file(自定义日志文件)等与日志相关的参数会被忽略
- 独立性:该参数仅影响本地文件记录,与控制台输出(如 -v 调试信息)无关,需搭配 --disable-coloring 实现纯文本控制台输出
- ⚡使用方法:
- 基础命令: sqlmap -u "http://1.1.1.1/vuln.php?id=1" --no-logging
- 隐蔽性渗透测试:在红队行动或取证敏感场景中,避免在操作主机磁盘留下扫描证据,降低溯源风险
- 组合隐匿策略: sqlmap -u "https://1.1.1.1/api" --no-logging --proxy="socks5://127.0.0.1:9050" --tor
- 资源受限环境:在嵌入式设备或低存储空间环境中运行时,避免日志文件占用磁盘资源
- 轻量化扫描示例: sqlmap -r request.txt --batch --no-logging --threads=2
- 自动化脚本集成:与 CI/CD 流水线结合时,若日志已通过其他工具(如 ELK 栈)集中收集,禁用冗余日志可提升效率
- 脚本示例:
import os
os.system('sqlmap -u "http://1.1.1.1" --no-logging --batch')
- ⚠注意事项:
- 技术局限性:
- 无法回溯分析:若扫描过程中断,缺乏日志文件将难以定位问题原因(如注入失败的具体阶段)
- 调试困难:需依赖 -v 3 以上输出级别实时观察过程,但控制台历史可能被覆盖
- 安全风险:
- 操作无追溯:在团队协作中,缺乏日志可能导致操作记录丢失,违反审计合规要求
- 替代方案:需合规场景建议改用 --output-dir 指定加密目录存储日志
- 误用风险:若同时启用 --no-logging 和 --disable-coloring,所有输出均为纯文本,人工监控复杂度显著增加
- 💎典型应用对比:
场景 | 启用日志(默认) | 禁用日志(--no-logging) |
本地文件痕迹 | 生成.log/.csv文件 | 无任何文件生成 |
渗透隐蔽性 | 易被取证工具发现 | 操作无本地记录 |
资源占用 | 磁盘空间持续增长 | 零磁盘写入 |
故障诊断支持 | 支持日志回溯分析 | 仅依赖实时控制台输出 |
- 💡总结:--no-logging 是 sqlmap 中针对操作隐匿性与资源优化的关键参数,适用于敏感渗透、资源受限或自动化集成场景,但需权衡诊断能力与合规风险
- --no-truncate:用于禁用查询结果截断的参数,主要作用是在输出数据库内容时显示完整数据(尤其是大文本字段),而非默认的截断简化形式
- 🔍核心功能:
- 禁用结果截断机制:默认情况下,sqlmap 为提升可读性会对长文本字段(如 TEXT、VARCHAR(MAX))进行截断,例如仅显示前100字符后附加 [...]。添加 --no-truncate 后,sqlmap 会输出字段的完整内容,适用于需要精确复制或分析大文本的场景
- 技术实现:
- 通过关闭 SQL 查询结果的 CAST 转换逻辑,避免自动截断(与 --no-cast 部分关联)
- 直接调用数据库原生 API 获取未处理的数据流,保留原始格式
- ⚡使用方法:
- 导出完整敏感数据:当需获取用户密码哈希、个人描述或日志内容时,避免因截断丢失关键信息
- 分析大文本字段注入:在测试存储型 XSS 或日志注入漏洞时,完整输出有助于定位恶意代码
- sqlmap -u "http://1.1.1.1/log_viewer?date=2023-01-01" --sql-query="SELECT * FROM error_logs" --no-truncate
- 数据迁移与备份验证:需确保导出数据完整性时(如从注入点备份表),避免截断导致数据失真
- ⚠注意事项:
- 输出可读性下降:长文本(如超过 10KB)可能导致终端输出混乱,建议搭配 --output-dir 保存到文件
- sqlmap -u "http://1.1.1.1" --dump-all --no-truncate --output-dir=/tmp/scan_results
[1 ] retrieved:
bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit[...]'
[1 ] retrieved:
bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore...(全文显示)'
- 性能影响:完整数据传输可能增加网络负载与内存占用,在高延迟环境中显著降低扫描速度
- 与其它参数的交互:
- 冲突参数:--no-truncate 与 --no-cast 部分功能重叠,但前者更侧重输出格式,后者影响数据类型转换逻辑
- 兼容性:对二进制字段(如图片、PDF)无效,需使用 --file-read 单独提取
- 💡总结建议:
- 适用场景:需完整分析大文本字段、备份数据或调试注入结果时启用
- 替代方案:若仅需避免数据类型转换问题,优先使用 --no-cast;若需平衡可读性与完整性,可结合 --limit 分批导出数据
- 性能权衡:在低带宽或高安全监控环境中慎用,避免触发流量告警
- --offline:用于减少与目标服务器交互次数的参数,通过最小化网络请求来降低检测风险或节省资源(没做出来)
- 🔍核心功能:
- 减少实时交互:
- 默认情况下,SQLMap 会向目标发送大量探测请求以验证注入点并提取数据。添加 --offline 后,SQLMap 仅依赖本地缓存或已有会话数据进行分析,跳过主动发送测试请求的步骤
- 适用于已通过前期扫描确认注入点,后续需离线分析数据的场景(如日志分析、数据脱敏处理)
- 降低风险与资源消耗:
- 减少请求频率可规避 WAF/IPS 的频繁检测机制,避免触发安全告警或 IP 封锁
- 在资源受限环境(如低带宽网络或 IoT 设备)中,避免重复请求可节省计算资源
- 🎯适用场景:
- 隐蔽性操作:当目标系统存在严格的安全监控时,配合 --random-agent(随机 UA)和 --proxy(代理)使用,降低攻击特征暴露风险
- 示例命令: sqlmap -r saved_request.txt --offline --random-agent --proxy="socks5://127.0.0.1:9050"
- 离线数据分析:对已保存的 HTTP 请求日志(如 Burp Suite 导出的 .txt 文件)进行深度注入分析,无需重新连接目标服务器
- 示例命令: sqlmap -l burp_log.txt --offline --batch
- 批量任务处理:结合 -m(批量目标文件)扫描多个目标时,减少并行请求对本地网络的负载压力
- ⚡使用方法:
- 基于日志的离线扫描: sqlmap -l /path/to/access.log --offline --batch --dbs
- 解析 Web 访问日志,枚举数据库名而不发送新请求
- 隐蔽式批量检测: sqlmap -m target_list.txt --offline --smart --delay 10
- 对文件中的多个 URL 进行智能扫描,延迟 10 秒模拟人工操作
- ⚠注意事项:
- 依赖前置数据:
- --offline 必须配合有效数据源(如 -r 请求文件、-l 日志文件)使用,否则无法执行检测
- 若缓存数据不完整(如缺少关键响应头),可能导致漏报或分析失败
- 功能限制:
- 不支持实时漏洞利用:如 --os-shell(系统命令执行)、--file-read(文件读取)需实时交互,无法离线完成
- 无法覆盖动态注入点:若目标参数值随时间变化(如 Token 刷新),离线分析可能失效
- 与其他参数冲突:与 --fresh-queries(忽略缓存强制刷新)互斥,同时使用会导致参数失效
- 💡总结:--offline 是 SQLMap 中提升隐蔽性与资源效率的辅助参数,适用于需最小化网络交互的场景。其效果高度依赖前置数据的完整性与准确性,需结合日志文件或缓存请求使用。在渗透测试中,建议先通过在线扫描确认注入点,再切换离线模式进行深度分析以规避风险
- --purge:用于安全清除本地缓存和历史记录的核心参数,通过彻底删除 sqlmap 运行过程中生成的所有临时文件和会话数据,确保隐私安全及避免历史数据干扰后续测试
- 🔍核心功能:
- 彻底清理敏感数据:删除 ~/.sqlmap/output/ 目录下的所有缓存文件,包括扫描结果、日志、会话记录及临时文件
- 适用场景:
- 避免历史缓存干扰新测试(如目标网站已修复漏洞需重新验证)
- 保护隐私,防止他人通过缓存文件获取测试目标或注入痕迹
- 安全删除机制:采用多次覆盖写入随机数据 + 文件截断 + 物理删除的分步操作,防止数据恢复
- ⚡使用方法:
- 基础命令:sqlmap --purge
- 效果:自动清除 sqlmap 数据目录(默认 ~/.sqlmap/)下的全部历史文件,无二次确认
- 测试前初始化环境:
- 清除旧缓存:sqlmap --purge
- 开始新扫描:sqlmap -u "http://target.com/page?id=1" --dbs
- 避免残留会话数据影响新注入点检测准确性
- 解决缓存导致的错误:若 sqlmap 报错 Unable to parse session file,执行 --purge 可重置状态
- ⚠注意事项:
- 不可逆操作:执行后无法恢复数据,需提前备份重要结果(如 --output-dir 自定义的输出文件)
- 与相关参数对比:
参数 | 用途 | 区别 |
--purge | 彻底删除所有缓存 | 完全清理,无保留 |
--flush-session | 仅清除当前目标会话 | 保留其他目标数据,部分清理 |
--cleanup | 删除输出文件(不包含会话记录) | 范围较小,不涉及临时文件 |
- 系统兼容性:
- Windows:路径为 C:Users<用户>.sqlmap,需确保 sqlmap 有权限删除
- Linux/macOS:默认路径 ~/.sqlmap/,终端直接执行即可
- 💡总结:
- 何时使用:
- 需隔离不同测试环境(如切换目标或渗透场景) → --purge
- 缓存导致扫描异常或结果矛盾时 → 优先执行
- 结束测试后防止数据泄露 → 强制清理
- 操作规范:
- 定期清理:建议在关键测试节点(如漏洞复测前)执行
- --results-file:用于指定扫描结果存储路径的参数,主要用于在批量扫描多个目标时将结果汇总保存为 CSV 格式文件
- 🔍核心功能:
- 参数作用:--results-file=<文件路径> 可将 SQLMap 对多个目标的扫描结果(如漏洞类型、数据库类型、注入点等)以结构化格式(CSV)输出到指定文件。适用于自动化批量渗透测试场景
- ⚡使用方法: sqlmap -m targets.txt --results-file=scan_results.csv --batch
- ⚠注意事项:
- 依赖批量扫描模式:--results-file 仅在同时扫描多个目标(通过 -m 或 -l 参数)时生效。单目标扫描需改用 --output-dir 指定目录保存日志
- 输出格式限制:目前仅支持 CSV 格式,不可自定义字段或格式
- 替代方案:
- 单目标日志保存:使用 --log-file=scan.log 将终端输出保存为文本文件
- 完整报告:结合 --output-dir=reports/ 生成详细扫描报告(含请求/响应数据)
- 💡常用关联参数速查:
参数 | 作用 | 适用场景 |
-m <文件> | 指定目标 URL 列表文件 | 批量扫描 |
--batch | 自动确认所有提示 | 非交互式任务 |
--log-file=<路径> | 保存终端输出日志 | 单目标详细记录 |
--output-dir=<目录> | 存储完整报告文件 | 审计存档 |
- ❓ 常见问题:
- Q:为什么使用 --results-file 后未生成文件?
- A:需确保同时启用批量扫描参数(如 -m),且目标文件路径有写入权限
- Q:能否导出 JSON 或 XML 格式的结果?
- A:SQLMap 原生不支持,可通过第三方脚本转换 CSV 输出,或调用 API 集成工具(如 Zap、Burp Suite)
- --shell:--shell 是 sqlmap 工具提供的交互式命令行环境,允许用户在不重复调用主程序的前提下,连续执行多条 sqlmap 命令
- 🔍核心功能:
- 交互式操作:启动后进入独立的 sqlmap shell> 提示符,用户可逐行输入命令(如 -u "http://1.1.1.1?id=1"),无需每次键入 sqlmap.py
- 会话保持:支持命令历史记录、变量存储(如目标URL、参数),适合需多次调试的复杂注入场景
- 简化流程:避免反复加载 Python 解释器,提升测试效率,尤其适合批量操作或教学演示
- ⚡使用方法:
- 多步骤渗透测试:例如:先扫描注入点 → 列出数据库 → 拖取表数据,全过程可在同一 shell 中完成
sqlmap -u URL --batch
--dbs
-D dvwa --tables
users --dump -T
- 调试与参数复用:若首次扫描需附加 Cookie(--cookie="PHPSESSID=xxx"),后续命令自动继承该配置
- 新手学习辅助:结合 --wizard(向导模式)学习参数组合,再通过 --shell 实践
- ⚖与普通模式的对比:
特性 | --shell交互模式 | 普通命令行模式 |
命令输入 | 在sqlmap shell>中逐行输入 | 每次需以sqlmap.py [选项]开头 |
会话状态 | 保留变量和配置(如目标URL、Cookie) | 每次执行后重置 |
适用场景 | 复杂多步测试、调试 | 单次快速扫描 |
学习成本 | 需熟悉 sqlmap 内部命令结构 | 直接使用标准参数 |
- ⚠注意事项:
- 依赖基础命令:交互式命令仍需遵循 sqlmap 标准语法(如 -u 指定目标),仅省略主程序名
- 权限限制:交互 shell 本身不提升权限,执行高危操作(如 --os-shell)需数据库具备高权限
- 退出方式:输入 exit 或 quit 返回系统命令行
- 💡总结:sqlmap --shell 本质是 sqlmap 的“命令中枢”,通过持续会话简化复杂测试流程,适合渗透测试中需反复调整参数的场景。对于单次扫描或简单注入检测,直接使用标准命令行更高效。建议结合 --wizard 模式入门,逐步过渡到交互 shell 以掌握高级用法
- --tmp-dir:用于指定存储临时文件的本地目录。这一功能在特定场景下尤为重要,例如需要控制临时文件存储位置以优化性能或绕过系统限制时
- 🔍核心功能:
- 自定义临时目录:默认情况下,sqlmap 会将临时文件(如缓存、会话数据、中间文件)存储在系统默认的临时路径(如 /tmp 或 C:WindowsTemp)。使用 --tmp-dir 可覆盖此路径,将其指向用户自定义的位置
- 适用场景:
- 磁盘空间管理:当系统临时目录空间不足时,可指向更大容量的磁盘分区
- 权限控制:避免因系统临时目录权限限制导致文件写入失败
- 安全隔离:将敏感临时文件(如会话数据)存储到加密或受控目录
- ⚡使用方法:
- Linux示例 :sqlmap --tmp-dir=/path/to/custom_dir
- Windows示例:sqlmap --tmp-dir=D:sqlmap_temp
- 路径格式:
- Linux/Unix:需使用绝对路径(如 /home/user/tmp)
- Windows:支持盘符路径(如 E:temp)或网络路径(需权限)
- 依赖条件:目标目录需提前创建且 sqlmap 进程有读写权限,否则可能报错
- 🛠与其他参数的协作:
- 文件操作:当使用 --file-read(读取服务器文件)或 --file-write(写入文件到目标)时,临时目录用于缓存中间数据
- OS交互:执行 --os-shell 或 --os-pwn 时,临时目录存储上传的脚本或反弹 Shell 组件
- 会话管理:配合 --dump(导出数据)或 --flush-session(清空会话)时,临时文件可能包含未加密的数据库内容,需注意安全
- ⚠注意事项:
- 路径有效性:若路径含空格或特殊字符(如 Program Files),Linux 需用引号包裹("/path/with space"),Windows 可直接使用短路径(如 PROGRA~1)
- 性能影响:若临时目录位于低速存储(如网络盘),可能降低操作速度
- 安全风险:临时文件可能包含敏感信息(如数据库凭据),建议任务完成后手动清理目录
- 💡总结:--tmp-dir 是 sqlmap 中用于灵活管理临时存储位置的关键参数,尤其适用于磁盘空间优化、权限规避或安全加固场景。实际使用时需确保路径可写且及时清理,避免敏感数据泄露。若需结合文件操作或系统命令执行功能,此参数的重要性将进一步凸显
- --unstable:用于优化不稳定网络连接环境下的注入测试参数。当目标服务器网络延迟高、丢包率高或连接频繁中断时,此参数可显著提升测试成功率
- 🔍核心功能:
- 网络适应性调整:
- 自动降低请求频率,延长超时等待时间,避免因网络波动导致请求失败
- 调整重试机制:对未响应的请求自动重发,减少误判漏报(例如,避免将网络超时误判为无注入漏洞)
- 典型场景:测试跨国目标、移动网络环境或存在防火墙干扰的服务器
- 与关键参数协作:常配合 --time-sec(设置超时时间)、 --proxy使用
- sqlmap -u "http://1.1.1.1?id=1" --unstable --time-sec=10
- 结合 --proxy 通过代理测试时,缓解代理链路不稳定的影响
- ⚡使用方法:
- 针对高延迟目标,启用不稳定模式并延长超时:sqlmap -u "https://1.1.1.1/login" --data="user=admin&pass=123" --unstable --time-sec=15 --batch
- 效果:在东南亚到北美的跨国测试中,成功率从 40% 提升至 85%
- --time-sec=15:将每次请求超时上限设为 15 秒
- --batch:自动确认交互提示,避免网络中断导致进程挂起
- 📊 与其他网络优化参数对比:
- 最佳实践:对不稳定目标优先启用 --unstable,若仍失败再叠加 --proxy 或调整 --time-sec
参数 | 作用 | 适用场景 | 与--unstable协作 |
--timeout | 单次请求超时时间(秒) | 常规网络延迟 | 可叠加使用(例:--timeout=30) |
--retries | 请求失败重试次数 | 短暂丢包 | 被--unstable自动优化覆盖 |
--random-agent | 随机化 HTTP 头 | 绕过基础 WAF 封禁 | 独立使用,减少触发安全策略 |
- ⚠注意事项:
- 性能权衡:
- 降低请求频率会延长扫描时间,尤其在大规模测试(如 --level 5)时更明显
- 部分需快速响应的注入技术(如时间盲注)可能因延迟调整降低检测精度
- 不替代其他优化措施:
- 若目标存在 WAF/IPs 拦截,需配合 --tamper(篡改脚本)绕过,而非仅依赖 --unstable
- 网络完全中断时(如目标宕机),此参数无效
- 💡总结:--unstable 是 sqlmap 应对恶劣网络条件的实用参数,通过牺牲部分速度换取稳定性。在渗透测试实战中,建议:
- 对跨境目标或已知网络波动环境默认启用
- 配合 --time-sec 和 --batch 减少人工干预
- 若遇 WAF 拦截,需联合 --tamper 脚本(如 space2comment)综合突破
- --update:用于检查并更新到最新版本的命令
- 🔍核心功能:
- 自动检测更新:执行命令后,sqlmap 会连接其官方 GitHub 仓库,检测当前版本是否落后于最新版本。若检测到更新,会自动下载并覆盖旧版本文件
- 适用环境:
- Kali Linux:通过 apt 更新(需 root 权限): sudo apt update && sudo apt install --only-upgrade sqlmap
- 其他系统(Windows/Linux):直接使用 --update 命令或手动替换文件(需 Python 环境)
- ⚡使用方法: sqlmap --update
- ⚠注意事项:
- 权限要求:更新过程需写入权限,若安装目录受保护(如 /usr/share/sqlmap),需以管理员身份运行(Linux 用 sudo,Windows 用管理员终端)
- 更新失败场景:
- 网络限制:若无法访问 GitHub,需配置代理(如 --proxy="http://127.0.0.1:8080")
- 文件冲突:旧版本文件被占用时可能失败,关闭其他 sqlmap 进程后重试即可
- 版本验证:更新后务必检查版本是否生效
- sqlmap --version
- 🔄与其他更新方式对比:
更新方式 | 适用场景 | 优势 | 局限性 |
sqlmap --update | 已安装旧版且网络通畅 | 自动化覆盖,无需手动操作 | 依赖 GitHub 访问权限 |
apt(Kali Linux) | Kali 系统用户 | 集成系统包管理,稳定性高 | 仅限 Debian 系 Linux |
手动覆盖安装 | 无法联网或需定制安装路径 | 灵活控制版本和文件位置 | 需手动下载并替换文件 |
- 💡总结:
- 推荐操作:直接使用 sqlmap --update 保持工具最新,尤其在渗透测试前确保漏洞检测能力最新
- 特殊场景:
- 若更新失败,可尝试手动下载 GitHub 源码 覆盖旧版
- Windows 用户更新后若报错,检查 Python 环境变量是否包含 sqlmap 路径
- 注:更新不会影响已存储的会话文件(如 session.sqlite),但建议备份关键数据以防意外
- --wizard:是 sqlmap 工具中为初学者设计的交互式向导模式,通过逐步引导用户输入关键参数,简化 SQL 注入检测流程
- 🔍核心功能:
- 简化操作流程:
- 通过问答式交互,自动生成基础扫描命令,无需用户记忆复杂参数
- 引导用户输入必要信息(如目标 URL、请求方法、Cookie 等),减少配置错误
- 自动配置参数:根据用户输入自动启用推荐选项(如 --batch 自动确认提示、--level 默认设为 1)
- 学习辅助工具:适合 SQL 注入新手理解扫描逻辑,后续可过渡到手动命令模式
- 📝使用流程详解:
- 启动命令后,向导会按顺序提示以下配置(以典型场景为例):sqlmap --wizard
- 目标 URL 输入:
- 提示:Please enter full target URL (-u)
- 示例:http://example.com/news?id=1
- 注:若需 POST 请求,后续会提示输入请求体数据
- 请求方法选择:自动检测 GET/POST,或手动指定(如 POST 需提供 --data 参数)
- 请求头与 Cookie 配置:提示是否添加 HTTP 头(如 User-Agent)或 Cookie(如登录态 PHPSESSID=xxx)
- 表单参数处理:若目标为表单提交页面,提示选择待测试的注入点参数(如 username、password)
- 扫描等级与风险设置:默认等级(--level)为 1(基础检测),风险(--risk)为 1(低干扰)。可手动调高以增强检测力度
- 自动执行扫描:生成完整命令并立即执行,输出漏洞检测结果(如数据库类型、可注入参数)
- ⚠注意事项:
- 适用场景限制:
- 推荐场景:快速检测基础注入点、初学者练习
- 不适用场景:
- 需绕过 WAF 的复杂注入(需手动启用 --tamper 脚本)
- 高并发或定制化任务(如 --threads 多线程控制)
- 功能覆盖不全:不支持部分高级参数(如 --os-shell 系统命令执行、--file-read 文件读取),需手动补充
- 性能影响:默认配置可能遗漏深度漏洞(如时间盲注),建议对关键目标手动调高检测等级
- 💡总结:
- 初学者:优先使用向导模式熟悉 SQL 注入检测流程,再逐步学习手动命令
- 进阶用户:仅作快速筛查工具,复杂任务直接使用命令行参数(如 sqlmap -u <URL> --batch --dbs)
- 渗透测试:扫描完成后保存会话(--save),便于后续深入利用漏洞
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...