Sqlmap全参数讲解之终章

admin 2025年6月23日23:41:49评论12 views字数 17360阅读57分52秒阅读模式

免责声明

本文只做学术研究使用,不可对真实未授权网站使用,如若非法他用,与平台和本文作者无关,需自行负责!

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全参数讲解之终章
      • 结合数据导出操作:
   # 原命令      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 冲突)
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
      • 赋值参数格式:带值的参数(如 --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注入漏洞发现!'"
Sqlmap全参数讲解之终章
        • Windows:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --alert "powershell -c '[System.Windows.Forms.MessageBox]::Show("漏洞发现")'"
Sqlmap全参数讲解之终章
      • 权限要求:执行的命令需在当前用户权限范围内,否则可能失败
      • 与 --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
        • 执行后输出所有缺失的可选依赖列表及功能影响说明
Sqlmap全参数讲解之终章
      • 典型应用场景:
        • 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
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
    • 输出效果对比:

启用着色(默认)

禁用着色(--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
        • 此命令仅输出密码字段的原始内容,不计算哈希值
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
      • 与密码破解流程的关联:
        • 该参数主要影响 --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 脚本名称及其简要描述,帮助用户快速选择合适的脚本组合以绕过特定防护规则
Sqlmap全参数讲解之终章
      • 使用场景:当目标网站存在 WAF(如 Cloudflare、Imperva)或过滤单引号、空格、关键字(如 UNION、SELECT)时,通过 --tamper 参数调用脚本组合
        •  sqlmap -u "http://1.1.1.1?id=1" --tamper="space2comment,randomcase"
    • 📚常见 tamper 脚本分类与功能:以下是基于 SQLMap 官方文档及实战总结的 6 类高频 tamper 脚本及其作用(至于最全的tamper脚本分类,请查看之前发布的文章:《Sqlmap之tamper脚本》)

分类

脚本名称

功能描述

适用场景

编码类

base64encode.py

对负载进行 Base64 编码

绕过关键字过滤(如 SELECT)

charencode.py

URL 编码所有字符

过滤特殊字符(如单引号)

charunicodeescape.py

使用 Unicode 转义格式(如SELECTu0053u0045...)

绕过正则表达式检测

空白字符处理类

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 关键字大小写(如SELECTSeLeCt)

绕过大小写敏感规则

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全参数讲解之终章
Sqlmap全参数讲解之终章
      • 隐蔽性渗透测试:在红队行动或取证敏感场景中,避免在操作主机磁盘留下扫描证据,降低溯源风险
        • 组合隐匿策略: 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
# 默认截断输出(bio字段被截断)[INFO] retrieved: 1bio: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit[...]'# 使用 --no-truncate 后完整输出[INFO] retrieved: 1bio: '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全参数讲解之终章
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
    • 使用方法:
      • 基于日志的离线扫描: sqlmap -l /path/to/access.log --offline --batch --dbs
        • 解析 Web 访问日志,枚举数据库名而不发送新请求
      • 隐蔽式批量检测: sqlmap -m target_list.txt --offline --smart --delay 10
        • 对文件中的多个 URL 进行智能扫描,延迟 10 秒模拟人工操作
    • 注意事项:
      • 依赖前置数据:
        • --offline 必须配合有效数据源(如 -r 请求文件、-l 日志文件)使用,否则无法执行检测
Sqlmap全参数讲解之终章
        • 若缓存数据不完整(如缺少关键响应头),可能导致漏报或分析失败
      • 功能限制:
        • 不支持实时漏洞利用:如 --os-shell(系统命令执行)、--file-read(文件读取)需实时交互,无法离线完成
        • 无法覆盖动态注入点:若目标参数值随时间变化(如 Token 刷新),离线分析可能失效
      • 与其他参数冲突:与 --fresh-queries(忽略缓存强制刷新)互斥,同时使用会导致参数失效
    • 💡总结:--offline 是 SQLMap 中提升隐蔽性与资源效率的辅助参数,适用于需最小化网络交互的场景。其效果高度依赖前置数据的完整性与准确性,需结合日志文件或缓存请求使用。在渗透测试中,建议先通过在线扫描确认注入点,再切换离线模式进行深度分析以规避风险
  • --purge:用于安全清除本地缓存和历史记录的核心参数,通过彻底删除 sqlmap 运行过程中生成的所有临时文件和会话数据,确保隐私安全及避免历史数据干扰后续测试
    • 🔍核心功能:
      • 彻底清理敏感数据:删除 ~/.sqlmap/output/ 目录下的所有缓存文件,包括扫描结果、日志、会话记录及临时文件
      • 适用场景:
        • 避免历史缓存干扰新测试(如目标网站已修复漏洞需重新验证)
        • 保护隐私,防止他人通过缓存文件获取测试目标或注入痕迹
      • 安全删除机制:采用多次覆盖写入随机数据 + 文件截断 + 物理删除的分步操作,防止数据恢复
    • 使用方法:
      • 基础命令:sqlmap --purge
        • 效果:自动清除 sqlmap 数据目录(默认 ~/.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
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
    • 注意事项:
      • 依赖批量扫描模式:--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 --batchsqlmap>--dbssqlmap> -D dvwa --tablessqlmap> -T users --dump
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
      • 调试与参数复用:若首次扫描需附加 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 
Sqlmap全参数讲解之终章
      • 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(低干扰)。可手动调高以增强检测力度
      • 自动执行扫描:生成完整命令并立即执行,输出漏洞检测结果(如数据库类型、可注入参数)
Sqlmap全参数讲解之终章
Sqlmap全参数讲解之终章
    • 注意事项:
      • 适用场景限制:
        • 推荐场景:快速检测基础注入点、初学者练习
        • 不适用场景:
          • 需绕过 WAF 的复杂注入(需手动启用 --tamper 脚本)
          • 高并发或定制化任务(如 --threads 多线程控制)
      • 功能覆盖不全:不支持部分高级参数(如 --os-shell 系统命令执行、--file-read 文件读取),需手动补充
      • 性能影响:默认配置可能遗漏深度漏洞(如时间盲注),建议对关键目标手动调高检测等级
    • 💡总结:
      • 初学者:优先使用向导模式熟悉 SQL 注入检测流程,再逐步学习手动命令
      • 进阶用户:仅作快速筛查工具,复杂任务直接使用命令行参数(如 sqlmap -u <URL> --batch --dbs)
      • 渗透测试:扫描完成后保存会话(--save),便于后续深入利用漏洞

原文始发于微信公众号(一个努力的学渣):Sqlmap全参数讲解之终章

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月23日23:41:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Sqlmap全参数讲解之终章https://cn-sec.com/archives/4189029.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息