Options:选项
- -h:显示基础的帮助信息
- -hh:显示详细的帮助信息
- --version:显示程序的版本号
- -v: 显示详细的注入过程0-6个等级(默认值为1)
- 0:仅显示致命错误(如 `[CRITICAL] connection error`)
- 1:默认模式,显示基本信息(如注入类型、数据库版本)
- 2:显示HTTP请求类型(GET/POST)及检测到的参数
- 3:显示注入Payload、重定向跳转路径
- 4:显示HTTP请求头(Headers)及会话Cookie
- 5:显示完整的HTTP请求和响应内容(包括原始数据)
- 6:显示Python堆栈跟踪(用于开发调试)
Target:目标
-
必须提供这些选项中的至少一个来定义目标 - -u URL/--URL=URL目标URL:需要测试的目标地址
- 举例:python sqlmap.py -u "
http://192.168.137.11/sqli-labs/Less-1/?id=1"
- -g '谷歌语法':sqlmap可以测试注入Google的搜索结果中的GET参数(只获取前100个结果)
- 需要安装依赖:requests google:pip3 install requests google
- 因为google属于外网,所以需要代理
- 完整命令:python sqlmap.py -g "inurl:.php?id=1" --proxy="http://127.0.0.1:9999" --random-agent --delay 5
- -d:直接连接数据库,适用于绕过 Web 应用层直接与数据库交互的场景
- 需要安装pymysql:pip install pymysql
- 使用:sqlmap -d "DBMS://USER:PASSWORD@HOST:PORT/DATABASE" [参数,如枚举数据库]
- sqlmap -d "mysql://root:[email protected]:3306/dba" --dbs
-
参数:
- DBMS:数据库类型(如 mysql、mssql)。
- USER/PASSWORD:数据库账号密码。
- HOST:PORT:数据库服务器地址与端口。
- DATABASE:目标数据库名
- -l :可以直接把Burp proxy或者WebScarab proxy中的日志直接倒出来交给sqlmap来一个一个检测是否有注入
- 需要保存为 .txt 或 .xml文件
-
-
- -m:可以将多个url填入文件,对文件中的多个URL进行测试
- -r :可以将http请求包放入一个文本中,然后从一个文本文件中对http请求的一个参数进行测试,参数可以通过*号来固定要测试的位置,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等)
-
-
- -c :从配置文件加载运行参数,简化复杂命令的输入流程,适用于需要复用多参数组合的场景(配置文件中的参数优先级低于命令行)
- 文件路径:默认名为 sqlmap.conf,支持任意路径,建议使用绝对路径避免加载失败(如 ~/.sqlmaprc)
- 语法规则:
- 每行一个参数,格式为 参数名=值
- 忽略空行和以 # 开头的注释行
- 注意事项:
- 命令行参数 > 配置文件参数(若冲突,以命令行输入为准)
- 例如:命令行指定 --level=5 会覆盖配置文件中的 level=3
- 确保当前用户对配置文件和输出目录有读写权限
- 优势:
- 简化复杂命令,提升渗透测试效率(比如把常用的高频参数写入文件中,下次直接指定文件即可,不需要每次都输入命令)
- 支持团队标准化配置,减少人为错误
- 将高频参数(如 --tamper、--proxy)固化到配置文件
- 结合 --update 定期同步最新漏洞检测规则
Optimization:优化
- -o:用于一键开启默认性能优化的核心参数,通过自动启用多项底层优化技术(如长连接、空连接、并发线程等)显著提升扫描效率
-
核心功能:
- 自动化性能调优:
- 等效命令组合:-o 相当于同时启用以下三个优化参数:
- --keep-alive:复用 HTTP 长连接,减少 TCP 握手开销
- --null-connection:仅获取响应头大小(不下载响应体),节约带宽(尤其适用于盲注场景)
- --threads=3:默认启用 3 个并发线程(可手动调整)
- 适用场景:大规模目标扫描、高延迟网络环境或需快速完成初步探测时
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
典型用法:
-
基础优化扫描:sqlmap -u "http://192.168.137.1/?id=1" -o - 作用:一键启用默认优化组合,适用于快速漏洞探测
-
联合其他参数深度优化:sqlmap -u "http://192.168.137.1/data" -o --threads=8 --delay=1
- --threads=8:手动提升并发数至 8(突破默认 3 线程限制)
- --delay=1:每请求间隔 1 秒,避免触发 WAF 速率限制
-
文件读取场景优化:sqlmap -r request.txt -o --batch
- 作用:对 Burp Suite 捕获的请求文件启用优化,--batch 自动确认所有提示
- 注意事项:
- 技术限制与兼容性:
- 空连接限制:若目标服务器不支持 HEAD 请求或返回异常(如 400 错误),需关闭 --null-connection(改用 --text-only)
- 长连接冲突:与 --proxy 代理参数冲突(代理可能不支持连接复用)
- 风险规避建议:
- 线程数控制:避免设置过高(如 --threads=10),可能触发目标 IP 封禁
- 替代方案:
- 高敏感环境:用 --safe-url=/health 定期访问无害页面维持会话
- 严格 WAF:结合 --random-agent 伪装浏览器降低检测概率
- 优先通过 -v 3 查看优化后的请求细节
- 若遇性能瓶颈,可手动调整子参数(如关闭 --null-connection)
- 实战场景对比:
|
|
|
|
|
|
|
|
|
|
|
|
- --predict-output:用于通过预测常见查询结果来优化扫描效率的核心参数,尤其适用于大规模目标扫描或需快速完成初步探测的场景
- 核心功能:
- 预测机制:
- 技术原理:--predict-output 通过比对目标响应与内置统计表(common-outputs.txt),提前预测常见查询结果(如数据库版本、用户名、表名等),从而跳过重复测试步骤
- 优化效果:减少无效请求次数,显著提升盲注(布尔/时间盲注)场景的扫描速度,尤其在目标返回结果高度可预测时效率提升30%以上
- 依赖条件:
- 统计表路径:默认位于 /usr/share/sqlmap/txt/common-outputs.txt,包含预定义的常见输出值(如 @@version、user() 等)
- 兼容性限制:与 --threads 参数互斥(因预测需顺序执行请求),且仅对特定注入技术(盲注)有效
- 典型用法:
- 基础命令:sqlmap -u "
http://192.168.137.1/?id=1" --predict-output
- 作用:启用预测输出模式,自动跳过已知结果检测,适用于布尔盲注或时间盲注场景
- 联合其他优化参数:若需进一步提速,可结合 --null-connection(仅获取响应头大小)
- sqlmap -u "
http://192.168.137.1/login.php" --data="user=admin" --predict-output --null-connection - 效果:
- 预测输出减少有效载荷测试次数
- 空连接避免下载响应体,节省带宽
- 自定义统计表:若目标使用非标准输出(如自定义错误消息),可编辑统计表增强预测准确性
- sqlmap -u "http://192.168.137.1/api" --predict-output --common-outputs=/path/custom-outputs.txt
- 注意事项:
- 适用场景限制:
- 有效场景:目标返回结果高度规律化(如固定错误格式、标准数据库函数输出)
- 无效场景:目标响应随机性强或需复杂运算(如加密参数、动态令牌),预测可能失效甚至导致漏报
- 性能与风险平衡:
- 误报风险:若统计表未覆盖目标特征,可能跳过真实漏洞检测(建议首次扫描时不启用)
- 替代方案:
|
|
|
|
|
|
|
|
|
|
|
|
- 优先启用条件:目标响应高度可预测 + 盲注技术为主 + 无需并发扫描时
- 操作流程:
- 首次扫描禁用预测(--predict-output),通过 -v 3 分析目标响应模式
- 若响应符合常见模式,二次扫描启用预测并验证结果一致性
- 高频扫描场景下,将目标特征添加到自定义统计表持续优化
- --keep-alive:用于启用 HTTP 持久连接(HTTP Keep-Alive) 的性能优化参数,通过复用 TCP 连接减少重复握手开销,显著提升扫描效率
- 核心功能:
- HTTP Keep-Alive 机制:
- 技术原理:
- 默认 HTTP 连接为短连接(Connection: close),每次请求需重新建立 TCP 三次握手,消耗额外时间和资源
- 启用 --keep-alive 后,请求头添加 Connection: keep-alive,复用同一 TCP 连接发送多个 HTTP 请求,避免重复握手
- 优化效果:
- 减少网络延迟,提升扫描速度 30%~50%(尤其在高延迟网络或大规模目标扫描中)
- 降低系统资源占用(CPU/内存)
- 与 TCP Keepalive 的区别:
- HTTP Keep-Alive:应用层(第七层)协议,由 sqlmap 控制,复用连接传输多个 HTTP 报文
- TCP Keepalive:传输层(第四层)保活机制,由操作系统内核实现,用于检测连接存活状态(默认超时 2 小时)
- ⚠️ 两者功能独立,sqlmap 的 --keep-alive 仅实现 HTTP 层的连接复用
- 典型用法:
- 基础命令:sqlmap -u "
http://192.168.137.1/?id=1" --keep-alive
- 作用:对目标 URL 启用持久连接,自动添加 Connection: keep-alive 请求头
- 联合其他优化参数:
- 减少响应体下载(盲注场景): sqlmap -u "http://192.168.137.1/login.php" --data="user=admin" --keep-alive --null-connection
- --null-connection:不下载响应体,仅通过响应头大小判断注入结果,节省带宽
- 提升并发效率:sqlmap -u "http://192.168.137.1/login.php" --keep-alive --threads=5
- --threads:设置并发线程数(默认 1,最大 10),需避免过高导致目标服务器过载
- 一键开启所有优化:sqlmap -u "http://192.168.137.1/login.php" -o
- -o 参数自动启用 --keep-alive、--null-connection 和 --threads=3,适合快速扫描
- 注意事项:
- 兼容性问题:
- 代理冲突:若使用 --proxy 指定代理(如 Burp Suite),部分代理可能不支持持久连接,需关闭 --keep-alive
- 服务端限制:目标服务器需支持 HTTP/1.1 协议,否则返回 400 Bad Request
- 性能与风险平衡:
- 长连接风险:高频复用连接易被 WAF 识别为异常行为(如请求速率过快),建议配合 --delay 设置请求间隔
- 替代方案:
- 严格 WAF 环境:启用 --random-agent 伪装浏览器 UA
- 需维持会话:使用 --safe-url=/health 定期访问无害页面刷新连接
- 日志验证:通过 -v 3 查看实际请求头,确认 Connection: keep-alive 生效
- 核心价值:--keep-alive 通过复用 TCP 连接显著降低扫描延迟,尤其适合需连续发送大量请求的场景(如布尔盲注、大规模枚举)
- 最佳实践:
- 首次扫描建议启用 -o 自动优化
- 高敏感环境需搭配 --delay 和 --random-agent 规避风控
- 通过 -v 3 验证请求头,确保参数生效
- 进阶提示:研究目标服务器对 Keep-Alive 的支持性(如响应头含 Keep-Alive: timeout=5, max=100),动态调整超时策略
- 实战场景建议:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- --null-connection:用于优化布尔盲注和时间盲注扫描性能的关键参数,通过仅获取 HTTP 响应头大小(不下载响应体)来大幅减少带宽消耗
- 核心原理:
- 空连接机制:发送特殊 HTTP 请求(如 HEAD 或带 Range 头的请求),使服务器返回响应头信息但不返回响应体内容。通过对比不同注入条件下的响应头大小(如 Content-Length)判断注入结果
- 优化效果:
- 节省带宽:响应体体积越大,节省效果越显著(如页面含大量图片或脚本时)
- 提升速度:减少数据传输时间,尤其在高延迟网络环境中效果明显
- 适用场景:
- 布尔盲注(Boolean-based Blind):通过响应差异(真/假条件)判断注入结果
- 时间盲注(Time-based Blind):依赖响应时间差异,但 --null-connection 仅优化响应头获取,仍需完整请求测试时间延迟
- 严格带宽限制环境:如移动网络或低速 VPN 连接
- ⚠️限制:
- 仅适用于盲注场景(非报错注入或联合查询注入)
- 需目标服务器支持 HEAD 请求或 Range 头处理,否则可能返回 400 Bad Request
- 典型用法:
- 基础命令:sqlmap -u "
http://192.168.137.1/?id=1" --null-connection
- 作用:启用空连接模式,所有请求仅获取响应头信息
- 联合其他优化参数:
- 减少连接开销(长连接复用): sqlmap -u "http://192.168.137.1/login.php" --null-connection --keep-alive
- 一键优化组合(推荐):sqlmap -u "
http://192.168.137.1/api" -o
- 等效同时启用 --null-connection + --keep-alive + --threads=3
- 自定义处理逻辑:若目标服务器不支持默认空连接方式,可尝试以下方案
- 强制 HEAD 请求(需服务器支持):sqlmap -u "
http://192.168.137.1" --method=HEAD --null-connection - 回退到部分响应体下载(牺牲部分性能):sqlmap -u "
http://192.168.137.1" --text-only
- 仅下载文本内容(过滤图片/脚本)
- 注意事项:
- 兼容性问题:
- 服务器限制:部分服务器(如 Nginx 严格模式)可能拒绝非常规 Range 请求,需关闭参数或切换技术
- WAF 干扰:空连接可能被 WAF 标记为异常行为,需配合 --random-agent 和 --delay=2 降低风险
- 误判风险:
- 动态内容干扰:若响应头 Content-Length 因动态广告/脚本而变化,可能导致盲注结果错误。可通过以下方式缓解:sqlmap -u "
http://192.168.137.1" --null-connection --safe-url="/static-page"#定期访问稳定页面校准基准值
- 性能对比:
|
|
|
|
|
|
|
|
|
|
|
|
- 优先使用场景:布尔盲注 + 大响应体目标 + 带宽敏感环境
- 避坑指南:
- 首次扫描时通过 -v 3 验证空连接是否生效(检查日志中的 Content-Length)
- 若服务器返回 400 错误,改用 --text-only 或关闭参数
- 避免与 --html-file 等需完整响应体的参数联用
- 进阶技巧:结合 --eval 脚本动态校准响应基准值(如提取稳定页面的固定头信息)
- --threads:用于控制并发请求线程数的核心性能优化参数,通过增加并行请求数量显著提升扫描效率,尤其在批量目标或高延迟网络环境中效果显著
- 核心功能:
- 技术原理:通过创建多个线程同时发送探测请求,利用多核 CPU 并行处理能力,减少总扫描时间
- 默认值:默认线程数为 1(单线程),最大可设置为 10(需修改源码解除限制)
- 性能对比(实测场景):
|
|
|
|
|
|
|
|
|
|
|
|
- 适用场景:
- 批量扫描:配合 -m 参数处理多个目标(如 -m urls.txt --threads=5)
- 盲注优化:联合 --null-connection 减少响应体下载,加速布尔盲注
- 高配置环境:多核服务器或低负载目标环境
- 典型用法:
- 基础命令:sqlmap -u "
http://192.168.137.1/?id=1" --threads=5
- 作用:设置 5个线程并发扫描
- 联合其他参数优化:
- 避免触发WAF:配合延时与随机UA降低风控
- sqlmap -u "
http://192.168.137.1/data" --threads=8 --delay=1 --random-agent
- 空连接节省带宽:仅获取响应头大小
- sqlmap -u "
http://192.168.137.1/login.php" --threads=6 --null-connection
- 一键性能组合:sqlmap -u "
http://192.168.137.1/api" -o
- 等效同时启用 --null-connection + --keep-alive + --threads=3
- 注意事项:
- 服务器过载风险:
- 问题:线程数过高可能导致目标服务器崩溃或触发IP封禁
- 建议:
- 首次扫描从低线程开始(如 --threads=3),逐步增加
- 监控目标响应状态(如返回5xx错误时降低线程数)
- 技术限制与冲突:
- 与预测输出互斥:--predict-output 需顺序处理请求,不可与 --threads 联用
- 代理兼容性:部分代理服务器(如Burp)可能不支持高并发,需测试验证
- 性能平衡建议:
|
|
|
|
|
|
|
|
|
|
|
|
- 线程设置原则:
- 起步值:默认1 → 低风险目标可设为 CPU核心数×2(如4核设8线程)
- 上限控制:勿超过10(源码限制),敏感环境建议≤5
- 进阶提示:
- 修改 sqlmap.conf 中 max_threads=20 可解除10线程限制(需重新编译)
- 结合 --eval 动态调整线程数(如根据响应时间自动降频)
原文始发于微信公众号(一个努力的学渣):Sqlmap全参数讲解之第一篇
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论