Sqlmap全参数讲解之第十二篇

admin 2025年6月14日16:05:18评论23 views字数 18171阅读60分34秒阅读模式

免责声明

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

General:常规参数

此选项一共有39个,分两次写,太长看起来也不太方便

  • -s:用于指定 SQLMap 会话日志文件的保存路径,其核心功能是记录和恢复扫描状态
    • 🔍核心功能:
      • 会话状态保存:将当前扫描进度(如已测试的Payload、检测到的漏洞等)实时写入指定文件,支持中断后恢复操作
      • 典型场景:
        • 长时间扫描(如大型网站渗透测试)意外中断时,无需重新开始
        • 多步骤攻击中保留已确认的注入点信息
      • 日志内容范围:记录所有请求/响应数据、注入点参数、Payload 执行结果及数据库指纹信息
    • 使用方法:
      • 命令语法:sqlmap -u "http://1.1.1.1/vuln?id=1" -s session.log
Sqlmap全参数讲解之第十二篇
Sqlmap全参数讲解之第十二篇
Sqlmap全参数讲解之第十二篇
      • 路径规则:
        • 默认存储位置:~/.sqlmap/output/ 目录
        • 自定义路径需确保写入权限(权限不足导致 17% 失败率
      • 会话恢复:
        • 恢复时自动跳过已完成的测试步骤,效率提升 40%~65%
        • 需与原命令参数一致(参数变更将触发 Invalid session 错误)
    • 注意事项:

项目

说明

文件安全

日志包含敏感数据(如Payload、数据库结构),需加密存储

存储空间

长时间扫描可能生成GB 级日志(建议定期清理)

兼容性

仅支持相同 SQLMap 版本恢复(跨版本失败率89%

      • ⚠️风险提示:会话日志若被第三方获取,可能暴露攻击路径导致法律风险
  • -t:用于指定 HTTP 流量日志文件的保存路径,完整记录所有原始请求和响应数据
    • 🔍流量全记录:
      • 完整保存 HTTP 请求头、Payload、响应内容及状态码,用于攻击复现或调试
      • 日志以纯文本存储,用 --- 分隔请求/响应区块,包含时间戳和目标 URL
    • 使用方法:sqlmap -u "http://1.1.1.1/vuln?id=1" -t traffic.log
Sqlmap全参数讲解之第十二篇
Sqlmap全参数讲解之第十二篇
      • 路径规则:
        • 默认存储到 ~/.sqlmap/output/ 目录
        • 自定义路径需确保写入权限
    • 💡典型场景:
      • WAF 行为分析:检测 403 响应后调整绕过策略
      • 代理流量对比:结合 --proxy 分析原始流量与代理流量差异 
      • 关键 Payload 检索:使用 grep "UNION SELECT" traffic.log 快速定位注入点 
    • 注意事项:

项目

说明

文件大小

持续扫描可生成200MB+/天的日志,需监控磁盘空间 。

安全风险

日志含敏感 Payload,必须加密存储并限制访问权限 。

法律风险

未授权测试的日志违反《网络安全法》第 27 条,可能成为法律责任证据 。

性能影响

高频请求下可能造成5%~10%的性能下降 。

      • 💡建议:调试时优先用 -t 而非 -v(后者仅控制终端输出冗余度)
  • --abort-on-empty:用于在检测到目标无数据可检索时自动中止扫描,避免无效操作
    • 🔍空结果中断机制:
      • 当 SQLMap 通过数据检索参数(如 --dump 或 --search)发现目标数据库/表无有效数据(例如空表、无匹配记录)时,立即终止扫描进程,避免资源浪费
      • 典型场景:目标返回空数据集(如 users 表无记录)时停止后续注入测试
    • 使用方法:sqlmap -u "http://1.1.1.1/vuln?id=1" --abort-on-empty --dump
      • 参数联动:
        • 需配合数据库枚举参数(如 --dump, --search, --dbs, --tables)生效
        • 若单独使用无实际效果
    • 💡典型场景:(没做出来,空库还会显示)
      • 枚举数据库时遇空库则中止:sqlmap -u "http://1.1.1.1/vuln?id=1" --abort-on-empty --dbs
        • 节省 30%~50% 扫描时间(尤其对大型目标)
        • 避免对无价值目标(如测试环境空数据库)持续攻击
    • 注意事项:

风险类型

说明

误判风险

WAF/过滤规则可能返回假空数据导致提前中止(需用--level提升检测精度)。

功能限制

仅对数据检索类操作有效(如表/列枚举),不影响漏洞检测(如布尔盲注)。

日志记录

中止时会生成 [CRITICAL] target has no data 日志提示。

      • 💡建议:结合 --flush-session 清空历史会话,避免因缓存数据干扰空状态判断
  • --answers:用于预设自动化响应以处理 SQLMap 的交互提示,适用于非交互式环境(如脚本或 CI/CD 流水线)
    • 🔍核心功能:
      • 自动化应答机制:预先配置对 SQLMap 交互式提示的响应(如跳过测试、覆盖会话文件等),无需人工干预。支持常见问题类型:
        • quit(退出确认)
        • CONTINUE(继续扫描)
        • REDO(重新测试注入点)
    • 使用方法:
      • 命令语法:sqlmap -u "http://11.1.1.1" --answers="continue=Y,quit=N" --batch
        • 参数联动要求:
          • 必须与 --batch 参数同时使用(否则仍触发交互提示)
          • 响应指令需用英文逗号分隔,格式为 问题关键词=应答值
      • 典型配置:
        • 自动跳过所有确认提示:sqlmap -u "http://1.1.1.1" --answers="extending=Y,continue=Y,quit=N" --batch
      • 响应关键词覆盖范围:

关键词

作用

示例值

extending

是否扩展扫描(如测试其他参数)

Y/N

continue

是否继续扫描

Y/N

quit

是否退出程序

Y/N

    • 注意事项:
      • 依赖限制:
        • 未配合 --batch 时,--answers 自动失效
        • 仅支持预定义关键词(无法处理动态生成的问题)
      • 安全与法律风险:
        • 自动化操作可能触发 WAF 的暴力检测规则
        • 未授权渗透测试违反《网络安全法》第 27 条
  • --base64:用于处理 Base64 编码参数的核心参数,适用于目标请求参数值被 Base64 编码的场景(如 id=MTIz 对应明文 123)
    • 🔍核心功能:
      • 自动解码检测:当目标参数值采用 Base64 编码时(例如 id=MTIzNDU=),启用 --base64后,SQLMap 会先对参数自动解码,再注入检测逻辑,确保注入测试有效
      • 绕过编码混淆:部分 WAF 或应用层防护会通过 Base64 编码隐藏参数内容,此参数可穿透编码层直接检测原始漏洞
      • 兼容性支持:支持对 GET/POST 参数、Cookie 等位置的 Base64 编码内容进行自动化测试
    • 使用场景:
      • 基础命令:sqlmap -u "http://1.1.1.1/page?data=VGhpcyBpcyBhIHRlc3Q=" --base64
      • POST 请求中的 Base64 参数:sqlmap -u "http://1.1.1.1/login" --data "token=QWxhZGRpbjpvcGVuIHNlc2FtZQ==" --base64
      • 结合其他参数增强检测:sqlmap -u "http://1.1.1.1/api?id=MTIz" --base64 --level=5 --risk=3 --tamper=base64encode
    • 注意事项:
      • 参数格式要求:仅当参数值本身是 Base64 编码时使用此参数。若整个 URL 或请求体被编码,需先手动解码再测试
      • 编码有效性验证:SQLMap 会验证参数是否符合 Base64 编码规则(如长度为 4 的倍数、字符集合法),否则跳过处理
      • 与 --tamper 脚本的区别:--base64针对输入参数解码,而 --tamper=base64encode 用于输出 Payload 编码,两者可协同使用
      • WAF 绕过限制:若目标同时使用 Base64 编码 + 复杂过滤(如符号替换),需组合多脚本
        •  sqlmap -u "http://1.1.1.1?data=SGVsbG8=" --base64 --tamper=charencode,space2comment
    • 💡技术原理:
      • 工作流程:
Sqlmap全参数讲解之第十二篇
      • 底层依赖:SQLMap 调用 Python 的 base64 库进行编解码,兼容标准 Base64 及 URL-safe 变体(+/ 或 -_)
    • 🚨 常见问题解决:
      • 报错 [WARNING] skipping invalid base64 parameter
        • 原因:参数值含非法字符(如空格、拼接符号)
        • 解决:检查参数是否完整编码,或手动预编码 Payload
        •  sqlmap -u "http://1.1.1.1/?data=$(echo -n "1' UNION SELECT user()" | base64)"
      • 注入失败但无报错:
        • 可能原因:目标过滤规则复杂或 Payload 结构不匹配
        •   sqlmap -u <URL> --base64 -v 3 --proxy=http://127.0.0.1:8080
    • 总结:--base64 是处理 Base64 编码参数的核心方案,适用于需穿透编码层的注入场景。实际使用时需确保参数值严格符合 Base64 格式,并通过组合 --tamper 脚本提升绕过能力
  • --base64-safe:用于处理 Base64 编码参数的高级参数,主要解决目标网站对请求参数进行 Base64 编码时的注入检测问题
    • 🔍核心功能:
      • 自动解码检测:当目标参数值采用 Base64 编码时(例如 id=MTIzNDU=),启用 --base64-safe 后,SQLMap 会先对参数自动解码,再注入检测逻辑,确保注入测试有效
      • 绕过编码混淆:部分 WAF 或应用层防护会通过 Base64 编码隐藏参数内容,此参数可穿透编码层直接检测原始漏洞
      • 兼容性支持:支持对 GET/POST 参数、Cookie 等位置的 Base64 编码内容进行自动化测试
    • 使用场景:
      • 基础命令:sqlmap -u "http://1.1.1.1/page?data=VGhpcyBpcyBhIHRlc3Q=" --base64-safe
      • POST 请求中的 Base64 参数:sqlmap -u "http://1.1.1.1/login" --data "token=QWxhZGRpbjpvcGVuIHNlc2FtZQ==" --base64-safe
      • 结合其他参数增强检测:sqlmap -u "http://1.1.1.1/api?id=MTIz" --base64-safe --level=5 --risk=3 --tamper=base64encode
    • 注意事项:
      • 参数格式要求:仅当参数值本身是 Base64 编码时使用此参数。若整个 URL 或请求体被编码,需先手动解码再测试
      • 编码有效性验证:SQLMap 会验证参数是否符合 Base64 编码规则(如长度为 4 的倍数、字符集合法),否则跳过处理
      • 与 --tamper 脚本的区别:--base64-safe 针对输入参数解码,而 --tamper=base64encode 用于输出 Payload 编码,两者可协同使用
      • WAF 绕过限制:若目标同时使用 Base64 编码 + 复杂过滤(如符号替换),需组合多脚本
        •  sqlmap -u "http://1.1.1.1?data=SGVsbG8=" --base64-safe --tamper=charencode,space2comment
    • 💡技术原理:
      • 工作流程:
Sqlmap全参数讲解之第十二篇
      • 底层依赖:SQLMap 调用 Python 的 base64 库进行编解码,兼容标准与 URL-safe Base64(+/ 或 -_)
    • 🚨 常见问题解决:
      • 报错 [WARNING] skipping invalid base64 parameter参数值非合法 Base64 编码,检查是否误用或存在拼接干扰(如 id=123+base64_data)
      • 注入失败:尝试显式指定编码后的 Payload 位置
        •  sqlmap -u "http://1.1.1.1?data=*" --base64-safe --prefix="'))" --suffix="-- -"
    • 总结:--base64-safe 是处理 Base64 编码参数的关键开关,适用于需穿透编码层的场景。实际使用时需确保参数值严格符合 Base64 格式,并配合 --tamper 等参数提升绕过能力。若问题持续,建议通过 -v 3 查看编解码日志
  • --batch:用于在非交互式自动化模式下运行,避免手动确认每个操作步骤
    • 🔍核心功能:
      • 自动化确认提示:启用后,SQLMap 会自动选择默认选项(通常为第一个选项),跳过所有交互式确认环节,适用于脚本化任务或批量测试
      • 默认参数设置:使用 --batch 时,SQLMap 会采用内置默认配置(如测试等级 --level=1、风险等级 --risk=1),可能降低检测深度。需手动指定参数(如 --level=5)覆盖默认值
    • 使用方法:
      • 命令语法:sqlmap -u "http://11.1.1.1"  --batch
    • 注意事项:
      • 超时场景禁用:若目标响应缓慢(如时间盲注),SQLMap 可能因超时中断并提示用户确认。此时必须移除 --batch,否则会终止测试
      • 权限与路径问题:当遇到文件写入失败(如 no write privileges)时,需手动指定可写目录(--tmp-dir参数)
      • 结果可靠性:默认配置可能遗漏复杂漏洞。**建议组合参数**提升检测深度
        • sqlmap -u "http://11.1.1.1"  --batch --level=5 --risk=3 --threads=10
  • --binary-fields:用于显式指定二进制字段的参数,主要应用于包含二进制数据(如图片、文件、加密数据等)的数据库表操作场景
    • 🔍核心功能:
      • 标识二进制字段:当目标表的字段存储二进制数据(如 BLOB、BINARY 类型)时,需通过 --binary-fields 明确告知 SQLMap 跳过常规字符串解析,避免误判或数据损坏
      • 典型场景:
        • 图片存储字段(如 avatar_image)
        • 文件内容字段(如 file_content)
        • 加密数据字段(如 encrypted_data)
      • 与数据导出操作联动:需结合 --dump 或 --search 等数据提取参数使用。未指定时,SQLMap 可能将二进制数据误识别为文本,导致乱码或注入失败
    • 典型用法:
      • 基础语法:sqlmap -u <目标URL> --binary-fields="字段1,字段2,..." [其他参数]
      • 导出含二进制字段的表: sqlmap -u "http://1.1.1.1/?id=1" -D app_db -T users --binary-fields="avatar,signature" --dump
        • 注意:SQLMap 会自动将二进制字段以十六进制或 Base64 格式导出,避免直接显示乱码
      • 绕过二进制字段的注入检测: sqlmap -u "http://1.1.1.1/upload?file_id=1" --binary-fields="file_data" --level=3
    • 注意事项:
      • 字段名匹配规则:
        • 字段名需严格区分大小写,与数据库定义一致(如 FILE_DATA ≠ file_data)
        • 支持逗号分隔的多字段(如 --binary-fields="field1,field2")
      • 数据导出格式:
        • 默认以十六进制显示(如 0x89504E47...),可通过 --hex 或脚本转换为文件
        • 若需直接保存为文件,需配合 --file-write 和自定义解码脚本
      • 性能影响:处理大型二进制字段(>10MB)可能显著降低速度,建议先通过 --columns 确认字段大小再操作
    • 💡与其他参数的协同使用:

参数组合

作用

--binary-fields + --dump

安全导出含二进制数据的表

--binary-fields + --search

在二进制字段中搜索特定模式(需指定编码)

--binary-fields + --tamper

对非二进制字段应用混淆脚本,避开 WAF 检测

      • 导出并转换头像字段为 PNG 文件:sqlmap -u "http://1.1.1.1/?id=1" -D app_db -T users --binary-fields="avatar" --dump --hex
      • 导出后使用 Python 解码:
with open('avatar.hex''r'as f:      data = bytes.fromhex(f.read())  with open('avatar.png''wb'as f:      f.write(data)
    • 📊 常见错误与解决:

错误提示

原因与解决

[WARNING] binary field 'xxx' not found

字段名拼写错误或大小写不匹配 → 用--columns确认字段名

导出数据无法解码

数据非纯二进制(如含元数据)→ 尝试--base64或检查数据库编码

注入过程卡死在二进制字段

字段过大导致超时 → 用--timeout=30延长等待或跳过该字段

    • 💎 总结:--binary-fields 是处理非文本字段的关键开关,尤其适用于文件存储系统、加密数据库等场景。使用时需严格匹配字段名,并优先通过 --columns 验证结构。若需深度操作二进制数据(如文件重建),建议结合 Python 脚本自动化解码流程
  • --check-internet:用于在评估目标前检测本地网络连通性的辅助参数,确保工具能正常访问互联网资源(如更新漏洞库或外部依赖)
    • 🔍核心功能:
      • 网络连通性验证:执行 --check-internet 后,SQLMap 会尝试连接 Google、GitHub 等公共服务器,确认当前主机是否具备互联网访问能力
      • 依赖前置检查:若需下载附加组件(如 tamper 脚本)或更新漏洞库,此参数可避免因网络问题导致操作失败
      • 自动化流程集成:适用于脚本化任务,在批量扫描前统一验证网络环境,减少人工干预
    • 典型用法:
      • 结合目标扫描(预检模式):sqlmap -u "URL" --check-internet --batch
        • 作用:先验证网络连通性,再执行注入检测,适合无人值守任务
    • 注意事项:
      • 检测机制局限性:仅测试少数固定域名(如 google.com),若目标网络屏蔽特定站点可能误报
      • 代理配置影响:若使用 --proxy 参数,需确保代理服务器本身可访问互联网,否则检测失效
      • 隔离环境中的行为:在内网隔离环境中,此参数会返回失败,但不影响对本地目标的扫描(如内网 Web 应用)
    • 💎 总结:
      • 脚本化部署:在自动化渗透脚本开头加入 --check-internet,避免后续流程因网络中断终止
      • 替代方案:若需更灵活的网络检测,可结合系统命令(如 ping 或 curl)自定义检查逻辑
      • 优先级:非必要参数,通常用于调试或复杂环境初始化,常规扫描可省略
      • :SQLMap 网络检测依赖 ICMP/UDP 协议,若主机禁止出站请求可能失败,需调整防火墙策略
  • --cleanup:用于清理 SQLMap 在目标系统中创建的临时文件和数据库痕迹,以消除渗透测试留下的证据
    • 🔍核心功能:
      • 自动删除注入残留:移除 SQLMap 生成的临时表、用户定义函数(UDF)、系统表等数据库对象,避免被目标系统检测
      • 文件系统清理:删除通过文件系统操作(如 --file-write)上传的临时脚本和执行文件(如 tmpudf.dll)
    • 命令语法:
      • 基础命令:sqlmap -u "http://1.1.1.1" --cleanup
      • 典型场景:测试后立即清理痕迹,防止管理员发现入侵行为
        •  sqlmap -u "http://1.1.1.1/?id=1" --dump-all --cleanu
    • 注意事项:
      • 功能限制:
        • 不可逆操作:清理后无法恢复数据(需提前备份扫描结果)
        • 依赖数据库权限:需原注入点具备 DROP/CREATE 权限才能生效
        • 不覆盖日志:不删除数据库或服务器的访问日志(需额外手动清理)
      • 与相关参数对比:

参数

作用

关联性

--cleanup

删除目标系统残留

核心清理功能

--purge

删除本地扫描结果(output/)

本地清理

      • 法律风险:未授权清理操作构成《网络安全法》禁止的“破坏数据完整性”行为(第 27 条)
    • 💎优化建议:
      • 权限验证:清理前用 --is-dba 确认数据库管理员权限,避免操作失败触发警报
      • 注:该参数对通过 --os-shell 创建的系统级文件无效,需手动删除
  • --crawl:用于自动爬取目标网站链接并递归测试 SQL 注入漏洞
    • 🔍核心功能:
      • 自动化爬虫扫描:从起始 URL 开始递归抓取网页链接(如 <a> 标签的 href 属性),自动识别并测试所有发现的 URL 参数(如 ?id=1)是否存在 SQL 注入漏洞
      • 深度与范围控制:
        • 配合 --crawl-exclude 可排除特定路径(如 logout.php)
    • 使用方法:
      • 基础命令:sqlmap -u "http://example.com" --crawl 3
        • 递归遍历网站链接
Sqlmap全参数讲解之第十二篇
      • 关键参数组合(排除敏感路径):sqlmap -u "http://example.com" --crawl 3 --crawl-exclude="logout|admin"
    • 注意事项:
      • 功能限制:
        • 仅支持爬取 HTML 静态链接,无法处理 JavaScript 动态生成的内容
        • 大规模爬取可能耗尽目标服务器资源,导致服务中断
      • 安全与法律风险:
        • 高流量特征:连续爬取易被 WAF 识别为恶意扫描(如 Cloudflare 的 Bot 防护)
        • 法律责任:未授权扫描违反《网络安全法》第 27 条,可能面临行政处罚
    • 💡优化建议:
      • 目标精准化:结合 --forms 参数抓取并测试表单(如登录框),提升漏洞发现率
      • 规避策略:使用 --random-agent 随机化 UA 标识,降低被 WAF 封禁概率
    • 注:该功能适用于网站结构扁平化的目标(如博客、CMS),对 SPA(单页面应用)效果有限
  • --crawl-exclude:用于在自动爬行目标网站时排除特定 URL 路径的参数,通常与 --crawl 配合使用。其核心作用是通过正则表达式过滤掉不需要爬取的页面,从而提升扫描效率并减少干扰
    • 🔍核心功能:
      • 作用场景:当使用 --crawl 参数启动自动爬行功能时(例如 sqlmap -u "http://1.1.1.1" --crawl=2),sqlmap 会递归遍历网站链接。--crawl-exclude 可指定需跳过的 URL 模式,例如:
        • 排除登录/注销页面(避免触发账户锁定)
        • 过滤静态资源(如图片、CSS 文件)
        • 跳过无关功能路径(如用户中心、后台管理)
      • 技术实现:通过正则表达式匹配 URL,符合规则的页面将被忽略。例如:
        • 排除包含 "logout" 或 "admin" 的 URL:--crawl-exclude="logout|admin"
    • 使用方法:
      • 排除敏感路径:sqlmap -u "http://1.1.1.1" --crawl=3 --crawl-exclude="login.php|user/profile"
        • 效果:跳过 login.php 及所有用户个人资料页面,避免因频繁访问敏感接口触发防护机制
      • 忽略静态资源:sqlmap -u "http://1.1.1.1" --crawl=2 --crawl-exclude=".(jpg|css|js)$"
        • 效果:通过正则表达式排除所有 .jpg、.css、.js 文件,减少无效请求
    • 注意事项:
      • 依赖 --crawl 参数:--crawl-exclude 仅在启用 --crawl 时生效,单独使用无效
      • 正则表达式语法:
        • 使用 | 分隔多个匹配条件(如 logout|admin)
        • 用 转义特殊字符(如 login.php)
      • 与其他过滤参数的区别:--scope:基于域名或 URL 模式限定扫描范围(如 --scope="(www)?.target.com")
    • 💡常见问题解决:若扫描仍包含排除的 URL,可能原因包括:
      • 正则表达式错误:检查表达式是否匹配目标 URL(例如大小写敏感问题)
      • 爬行深度过大:降低 --crawl 深度值(如从 3 改为 2),减少深层链接的干扰
    • 通过合理使用 --crawl-exclude,可显著优化 sqlmap 的扫描效率,避免对非目标路径的冗余检测
  • --csv-del:用于自定义 CSV 文件分隔符的参数,主要作用于数据导出(--dump)场景。当 SQLMap 将数据库内容导出为 CSV 格式时,默认使用逗号(,)作为字段分隔符。若数据本身包含逗号,或需适配特定系统格式(如分号分隔),可通过此参数指定替代符号
    • 🔍核心功能:
      • 作用场景:
        • 在导出数据(如 --dump)时,控制 CSV 文件的分隔符格式
        • 避免默认逗号与数据内容冲突(例如字段含逗号时会导致解析错误)
        • 适配外部系统要求(如欧洲常用分号 ; 作为分隔符)
      • 语法格式: 
         --csv-del="分隔符"
        • 分隔符类型:支持单字符或转义字符(如 t 代表制表符)
        • 常见示例
          • --csv-del=";" → 使用分号分隔字段
          • --csv-del="|" → 使用竖线分隔
    • 使用方法:
      • 导出数据时分号分隔:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --dump --csv-del=";"
        • 效果:生成的 CSV 文件以 ; 分隔字段,适用于 Excel 欧洲版或含逗号的数据
Sqlmap全参数讲解之第十二篇
      • 制表符分隔(TSV 格式):sqlmap -u "http://1.1.1.1/vuln.php?id=1" --dump --csv-del="t"
        • 效果:生成制表符分隔文件(TSV),便于直接导入数据分析工具(如 Python pandas)
    • 注意事项:
      • 依赖导出操作:--csv-del 仅在数据导出时生效(需配合 --dump 或 -D <DB> -T <TABLE> --dump 使用)
      • 编码问题:
        • 中文乱码:若导出 CSV 出现乱码,可尝试以下方案:
          • 添加 --encoding=utf-8 指定编码
          • 用文本编辑器(如 Notepad++)转换编码为 UTF-8 BOM
        • 文件命名:避免中文路径/文件名,减少编码错误风险
      • 与其他参数协作:
        • 数据范围控制:结合 -C "col1,col2" 选择导出列
        • 输出目录:使用 --output-dir 指定保存路径
    • 💡总结:
      • 适用场景:需定制 CSV 格式、避免分隔符冲突或适配第三方工具时
      • 替代方案:若需更复杂格式(如 HTML 或 SQLITE),可使用 --dump-format=HTML
      • 调试技巧:用 -v 3 查看生成的 CSV 结构,验证分隔符是否生效
  • --charset:用于指定目标数据库字符集的参数,主要解决数据检索过程中的乱码问题(尤其是非拉丁字符集场景)。其核心作用是确保 sqlmap 正确解析数据库返回的编码内容,避免中文字符、特殊符号等显示异常
    • 🔍核心功能:
      • 乱码修复:当目标数据库使用非默认字符集(如中文环境常用 GBK、GB2312)时,若不指定字符集,sqlmap 可能无法正确解析返回数据,导致中文字符显示为乱码或 ? 占位符
        • 典型场景
          • 数据库存储中文、日文、韩文等双字节字符
          • 默认字符集配置错误(如 MySQL 8.0 默认字符集变更引发兼容问题)
      • 注入负载兼容:在布尔盲注或时间盲注中,字符集影响 payload 的构造与响应解析。指定字符集可提高注入成功率
    • 使用方法:
      • 基础语法:sqlmap -u "目标URL" --charset=字符集名称
      • 常用字符集选项:

字符集

适用场景

示例命令(部分)

GBK

中文数据库环境

--charset=GBK

BIG5

繁体中文数据库

--charset=BIG5

UTF-8

国际通用编码

--charset=UTF-8

SHIFT_JIS

日文环境

--charset=SHIFT_JIS

      • 针对使用GBK编码的数据库进行注入并导出数据:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --charset=GBK --dump -D testdb -T users
        • 效果:确保 users 表中的中文用户名、密码字段正常显示,避免乱码
    • 注意事项:
      • 依赖数据检索操作:--charset 仅在数据检索时生效(需配合 --dump、--search 等参数),单独使用无效
      • 与其他参数协作:
        • 编码转换:若导出文件仍乱码,可用系统工具转换(如 Linux 下 iconv -f GBK -t UTF-8 output.txt)
        • HTTP头设置:部分场景需同步设置 --encoding=UTF-8 确保请求-响应编码一致
        • Tamper脚本:复杂过滤场景可搭配 --tamper=unmagicquotes.py 绕过转义机制
      • 常见问题排查:

问题现象

解决方案

指定字符集后仍乱码

检查数据库实际编码(SHOW VARIABLES LIKE 'character_set%');
尝试--charset=GB18030(兼容GBK扩展)

注入过程报错“非法字符”

确认目标数据库版本(如 MySQL 8.0+ 需用utf8mb4);
启用--hex参数以十六进制传输数据

    • 💡总结:
      • 优先场景:处理中文、日文等宽字符数据时必选参数
      • 替代方案:若数据库支持 Unicode(如 utf8mb4),可优先使用 --encoding=UTF-8 简化配置
      • 调试命令:配合 -v 3 查看原始响应数据,验证字符集是否生效
  • --dump-file:用于指定数据库转储内容保存路径的参数,通常与数据导出操作(如 --dump)配合使用。其核心作用是将提取的数据库表内容输出到用户自定义文件中,避免默认输出到终端,便于后续分析或存档
    • 🔍核心功能:
      • 作用场景:
        • 保存数据到本地文件:当使用 --dump 导出表数据时,默认输出到终端,而 --dump-file 可将结果直接写入指定文件
        • 批量处理与自动化:在脚本化操作中,通过文件保存结果,便于与其他工具集成(如数据分析或报告生成)
        • 避免终端截断:当数据量过大时,终端显示可能截断,保存到文件可确保完整性
      • 语法格式: sqlmap -u <目标URL> --dump -D <数据库名> -T <表名> --dump-file=<文件路径>
        • 文件路径支持:绝对路径或相对路径,需确保目录可写(如 /tmp/output.txt 或 C:dumpdata.csv)
        • 格式兼容性:生成的文件为纯文本格式,若需结构化数据(如 CSV),可结合 --csv-del 指定分隔符
    • 使用方法:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --dump-all --dump-file=full_dump.txt
Sqlmap全参数讲解之第十二篇
    • 注意事项:
      • 依赖导出操作:--dump-file 仅在启用数据导出时生效(需配合 --dump 或 --dump-all),单独使用无效
      • 文件覆盖与追加:
        • 默认行为:若文件已存在,直接覆盖(无警告提示)
        • 追加数据:需手动预处理(如用脚本合并文件),sqlmap 原生不支持追加模式
      • 权限与路径问题:

错误现象

解决方案

文件写入失败

检查目录权限(Linux 用chmod,Windows 取消只读属性)。

路径含空格或特殊字符

用引号包裹路径(如--dump-file="C:My Dumpoutput.txt")。

      • 与其他参数协作:
        • 数据过滤:结合 -C 指定列(如 -C "username,email")减少输出量
        • 格式控制:使用 --csv-del=";" 指定 CSV 分隔符,配合 --dump-file 生成结构化数据
        • 日志分离:通过 --output-dir 统一管理输出目录,避免文件散落
    • 💡替代方案:
      • 直接导出为 CSV:若需 Excel 兼容格式,使用 --dump + --csv-del 生成 CSV,无需额外转换
        •  sqlmap -u <URL> --dump -D db -T table --csv-del="," --dump-file=data.csv
      • 二进制格式导出:对大型数据库,优先用 --dump-format=SQLITE 生成 SQLite 文件,节省空间并支持复杂查询
      • 调试数据完整性:添加 -v 3 显示详细转储过程,验证文件是否完整生成
    • 总结:-dump-file 是 sqlmap 数据导出的关键辅助参数,核心价值在于将结果持久化到本地文件,尤其适合数据分析、审计报告或自动化流程。实际使用时需注意路径权限、文件覆盖机制,并灵活结合过滤与格式化参数优化输出效率
  • --dump-format:用于指定数据导出格式的参数,通常与数据导出操作(如 --dump)配合使用。其核心作用是控制从数据库提取的数据以何种结构化格式保存,便于后续分析或与其他工具集成
    • 🔍核心功能:
      • 作用场景:
        • 格式定制化:默认导出格式为 CSV,但可通过 --dump-format 指定为 JSON、XML、SQLITE 等格式,适应不同分析需求
        • 数据兼容性:例如 JSON 格式便于 Python/Pandas 解析,SQLITE 格式可直接导入数据库管理工具
        • 避免默认限制:CSV 可能因字段含逗号导致解析错误,其他格式可规避此问题
      • 语法格式: sqlmap -u <目标URL> --dump --dump-format=<格式>
        • 支持格式:CSV(默认)、XML、JSON、HTML、SQLITE、TXT
        • 依赖关系:需配合 --dump 或 --dump-all 使用,单独无效
    • 💻各格式特点与适用场景:

格式

特点

适用场景

示例命令

CSV

纯文本表格,默认逗号分隔;可结合--csv-del自定义分隔符

Excel 导入、基础数据分析

sqlmap -u <URL> --dump --dump-format=CSV --csv-del=";"

SQLITE

生成.db文件,支持 SQL 查询

数据库迁移、复杂查询

sqlmap -u <URL> --dump --dump-format=SQLITE

HTML

生成网页表格,可浏览器直接查看

报告生成、可视化展示

sqlmap -u <URL> --dump --dump-format=HTML

      • :TXT 格式为无结构纯文本,仅推荐简单日志记录
    • 使用方法:
      • 导出为 SQLITE 数据库:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --dump -D user_db -T accounts --dump-format=SQLITE
        • 效果:生成 user_db_accounts.db 文件,可直接用 SQLite 浏览器查询或导入 MySQL
      • 生成 JSON 报告:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --dump-all --dump-format=HTML --output-dir=/reports
        • 效果:所有数据库表数据以HTML 格式保存至 /reports 目录,便于自动化脚本分析
Sqlmap全参数讲解之第十二篇
    • 注意事项:
      • 路径与权限:
        • 输出文件默认保存在 output/ 目录,可通过 --output-dir 自定义路径
        • 需确保目录可写权限,否则报错 I/O error(如 Windows 只读属性或 Linux 权限不足)
      • 数据完整性:
        • 大型数据库导出建议用 SQLITE 格式节省空间,避免 CSV/JSON 的内存瓶颈
        • 添加 -v 3 参数可实时查看导出进度及文件生成路径
      • 格式转换:
        • 若需转换格式(如 CSV 转 Excel),可用工具如 pandas.read_csv() 或在线转换器
        • 中文乱码问题可搭配 --charset=UTF-8 或导出后使用 iconv 转码
    • 💡总结:
      • 优先场景
        • 需复杂查询 → SQLITE
        • 需编程处理 → JSON
        • 需人工查看 → HTML/CSV
      • 避坑指南
        • 字段含特殊字符时避免 CSV,改用 JSON 或 XML
        • 超大数据集优先 SQLITE 并分批次导出(结合 --start/--end)
  • --encoding:用于指定 HTTP 请求/响应字符编码的参数,主要解决因编码不一致导致的乱码问题或注入失败。其核心功能是确保 sqlmap 与目标服务器之间的数据传输可正确解析,尤其在处理非 ASCII 字符(如中文、日文)时至关重要
    • 🔍核心功能:
      • 编码冲突修复:
        • 乱码问题:当目标服务器响应内容使用非 UTF-8 编码(如 GBK、BIG5)时,未指定 --encoding 可能导致响应正文显示为乱码,影响注入结果解析
        • 注入失败:若请求参数含特殊字符(如中文),未正确编码可能导致服务器拒绝处理或解析错误,使注入检测失效
      • 典型应用场景:
        • 目标网站为中文、日文等双字节字符集(如 GB2312、SHIFT_JIS)
        • 服务器响应头未明确声明 Content-Type 或声明错误
        • 需手动覆盖默认编码(sqlmap 默认使用 UTF-8)
    • 使用方法:
      • 基础语法:sqlmap -u <目标URL> --encoding=<字符集名称>
      • 常用字符集选项:

字符集

适用场景

GBK

简体中文网站

BIG5

繁体中文网站

UTF-8

国际通用编码(默认)

SHIFT_JIS

日文网站

      • 修复中文乱码: sqlmap -u "http://1.1.1.1/search?kw=测试" --encoding=GBK
        • 效果:确保关键词 测试 以 GBK 编码发送,并正确解析服务器返回的中文内容
      • 处理日文表单注入: sqlmap -u "http://1.1.1.1/login" --data="user=山田&pass=123" --encoding=SHIFT_JIS
        • 效果:避免日文字符 山田 被错误编码,确保注入负载有效传递
    • 注意事项:
      • 与 --charset 的区别:
        • --encoding:控制 HTTP 传输层的编解码(请求/响应流)
        • --charset:指定 数据库内容的字符集(如存储的数据为 GBK 时需用 --charset=GBK)
        • 需协同使用场景: sqlmap -u <URL> --encoding=UTF-8 --charset=GBK
      • 编码探测与调试:
        • 自动探测:若不确定编码,先用 --batch 模式运行,观察 sqlmap 的编码猜测提示
        • 手动验证:通过 -v 6 查看原始请求/响应,对比乱码前后的十六进制值
      • 常见问题解决:

问题现象

解决方案

指定编码后仍乱码

检查响应头是否声明编码(如<meta charset=GBK>);尝试--flush-session清除缓存。

注入失败且无报错

启用--proxy=http://127.0.0.1:8080抓包,验证参数是否被正确编码。

    • 💡总结:
      • 优先场景:目标网站含非拉丁字符(中文/日文/韩文)或响应出现乱码时必选
      • 参数协同:若数据库内容与传输编码不同,需同时指定 --encoding 和 --charset
      • 调试命令:配合 -v 3 或 --proxy 实时监控数据流,确保编码生效
      • 参数对比表:

参数

作用层级

典型用例

依赖关系

--encoding

HTTP 传输编解码

解决请求/响应乱码

可独立使用

--charset

数据库内容解析

正确显示中文数据字段

需配合--dump

--csv-del

导出数据格式化

生成 Excel 兼容的 CSV 文件

需配合--dump-file

  • --eta:用于在盲注(Blind SQL Injection)测试过程中实时显示预估剩余时间。该功能主要适用于时间型盲注(Time-Based Blind Injection)场景,通过动态计算每个请求的处理时长和整体进度,为用户提供任务完成的预估时间,提升测试过程的可控性(好像没看到剩余时间预估,也可能是太慢了,实在等不起了)
    • 🔍核心功能:
      • 作用原理:
        • 在时间型盲注中,sqlmap 通过注入延迟语句(如 SLEEP(5))并测量响应时间差异来判断漏洞存在性,此过程通常耗时较长
        • --eta 会基于已完成的请求数量、平均请求耗时及剩余请求量,动态计算并输出剩余时间预估(如 [ETA: 12m 34s])
      • 适用场景:
        • 长序列盲注测试:当目标数据库响应缓慢或需枚举大量数据(如表名、列名)时,帮助用户规划测试时间
        • 自动化脚本集成:结合 --batch 参数实现无人值守测试时,提供进度监控依据
    • 使用方法:
      • 基础语法:sqlmap -u <目标URL> --eta
      • 典型示例:sqlmap -u "http://1.1.1.1/vuln.php?id=1" --technique=T --eta
        • 参数说明:--technique=T:指定使用时间型盲注技术(可省略,sqlmap 默认自动检测)
    • 注意事项:
      • 依赖盲注技术:--eta 仅在时间型盲注(--technique=T)或布尔盲注(--technique=B)中生效。若未检测到盲注漏洞,该参数无输出
      • 准确性影响因素:
        • 网络波动:网络延迟可能导致预估时间偏差
        • 目标负载:数据库服务器负载变化可能影响请求响应时间
        • 建议结合 -v 3 参数查看详细请求日志以验证实际耗时
      • 与其他参数协作:
        • 批量操作:搭配 --batch 实现全自动测试(如 sqlmap -u <URL> --eta --batch)
        • 数据枚举优化:通过 --threads 增加并发线程数缩短总耗时,但需避免触发目标防护机制
    • 💡总结:
      • 核心价值:--eta 是 优化长时盲注测试体验 的关键参数,尤其适合需枚举大型数据库或慢速目标的场景
      • 替代方案:若需更快的测试速度,可优先尝试联合查询(--technique=U)或报错注入(--technique=E)
      • 调试命令:启用 -v 3 查看实时请求详情,同步监控 --eta 预估准确性
  •  --flush session:用于强制清除当前目标会话缓存的参数,主要解决因历史会话数据干扰导致的扫描异常或误报问题。其核心作用是确保每次扫描从零开始,避免旧数据影响新测试结果
    • 🔍核心功能:
      • 清除历史缓存:默认情况下,sqlmap 会生成 .sqlite 会话文件记录扫描状态(如已测试的注入点、Payload 等)。--flush-session 会强制删除这些缓存,确保重新扫描时不受历史数据干扰
      • 典型场景:
        • 目标网站更新后需重新检测漏洞
        • 历史扫描因异常中断导致结果不准确
        • 高版本 sqlmap 因缓存兼容性无法检测注入(需回退版本时)
      • 避免误报与漏报:会话缓存可能包含过时的注入点信息,导致新扫描跳过有效测试路径。清除缓存可提升检测准确性
    • 使用方法:
      • 基础语法:sqlmap -u <目标URL> --flush-session [其他参数]
Sqlmap全参数讲解之第十二篇
      • 常用协作参数:

参数

作用

示例命令

--output-dir

指定会话文件存储目录,便于集中管理

--output-dir=/tmp/scan_logs --flush-session

--fresh-queries

忽略缓存结果,但不删除文件;与--flush-session二选一

--fresh-queries(轻量级替代方案)

-v 3

显示详细日志,验证缓存是否被清除

sqlmap -u <URL> --flush-session -v 3

    • 注意事项:
      • 文件权限问题:若 sqlmap 无权限删除会话文件(如 Windows 只读属性),需手动清理 output/ 目录
        • 解决命令:
          •  Linux/Mac:rm -rf ~/.sqlmap/output/<目标域名>/* 
          • Windows:del /F /Q C:Users<用户>.sqlmapoutput<目标域名>* 
      • 与版本兼容性:部分旧版本(如 v1.2)的缓存格式与新版本不兼容,若切换版本扫描必须使用 --flush-session
      • 性能影响:清除缓存后,sqlmap 需重新测试所有注入点,扫描时间显著增加。建议仅在必要时使用
    • 🔧典型问题解决方案:

问题现象

解决方案

扫描结果与目标实际状态不符

优先使用--flush-session+--level 3全面重扫

高版本 sqlmap 无法检测低版本成功漏洞

降级至兼容版本(如 v1.2)并强制清除缓存:--flush-session

会话文件残留导致磁盘空间不足

定期清理output/目录或使用--output-dir指定临时路径

    • 💡替代方案:
      • 轻量级替代:若仅需忽略历史结果但不删除文件,使用 --fresh-queries 更高效
      • 自动化脚本建议:在持续集成(CI)流程中,每次扫描前自动删除会话目录
        •  rm -rf ~/.sqlmap/output/$TARGET_DOMAIN 
        • sqlmap -u $URL --batch --output-dir=/ci_logs
      • 总结:--flush-session 是解决会话缓存污染问题的关键参数,适用于版本切换、目标更新或异常修复场景。日常扫描可优先尝试 --fresh-queries,若仍异常再启用强制清除模式
  • --forms:用于自动检测并测试目标页面中表单(Form)的 SQL 注入漏洞的参数。它简化了对 POST 请求的注入测试流程,特别适用于含登录框、搜索框等交互式表单的页面
    • 🔍核心功能:
      • 自动表单解析:当目标页面存在 <form> 标签时,--forms 会自动解析表单中的输入字段(如 <input>, <textarea>),并模拟提交行为进行注入检测
      • 适用场景:无需手动抓包或指定参数,快速扫描含表单的页面(如登录页、搜索页)
      • 简化 POST 注入测试:替代手动构造 --data 参数或保存请求文件(-r),直接通过 URL 触发自动化测试
    • 使用方法:
      • 基础语法:sqlmap -u <目标URL> --forms
      • 扫描登录页表单: sqlmap -u "http://1.1.1.1/login" --forms
        • 效果:自动识别 username、password 等字段并测试注入点
Sqlmap全参数讲解之第十二篇
      • 指定注入字段:若需聚焦特定字段,可结合 -p 参数
        •  sqlmap -u "http://1.1.1.1/search" --forms -p "keyword"
    • 注意事项:
      • 与 -r 和 --data 的对比:

方法

优势

局限性

--forms

全自动解析,无需预抓包

复杂表单(如动态加载)可能漏检

-r <请求文件>

支持含 Cookie/Header 的复杂请求

需手动保存请求包

--data "参数"

精确控制 POST 数据

需提前知悉字段名

      • 登录认证支持:若表单需登录后访问,需附加 --cookie 或 --auth-type 参数
        •  sqlmap -u "http://1.1.1.1/protected-page" --forms --cookie "sessionid=123abc"
      • 结果可靠性验证:启用 -v 3 查看检测详情,确认 sqlmap 是否成功识别表单字段
    • 💡总结:
      • 优先使用场景:
        • 快速筛查含表单的页面 → --forms
        • 需精细化控制字段 → -p + --forms
        • 复杂请求(含 Cookie/Header)→ -r 替代
      • 避坑指南:
        • 动态加载的表单(如 Ajax)需手动抓包使用 -r
        • 结合 --batch 实现全自动测试(无交互确认)

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

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

发表评论

匿名网友 填写信息