用途
本技能用于在获得授权的 Web 应用渗透测试中,使用 sqlmap 检测并利用 SQL 注入漏洞,通过提取后端数据库内容来验证漏洞并展示其影响。适用于以下场景:
- 获得授权的 Web 应用渗透测试项目
- 手工测试发现参数、请求头或 Cookie 中可能存在 SQL 注入点时
- 验证 Burp Suite 或 OWASP ZAP 等自动化扫描器报告的 SQL 注入发现
- 需要通过提取后端数据库数据来演示 SQL 注入影响时
- 涉及 SQL 注入利用的 CTF 挑战
前置条件
- 授权:针对目标签署的书面渗透测试协议(交战规则)
- sqlmap:可通过 pip install sqlmap 或 Kali Linux 上的 apt install sqlmap 安装
- Python 3.6+:sqlmap 所需的运行时
- Burp Suite(可选):用于捕获和重放 HTTP 请求
- 目标访问:与目标 Web 应用之间的网络连通性
- 带代理的浏览器:Firefox 配合 FoxyProxy 用于拦截请求
主要能力与工作流
步骤 1:识别潜在注入点
手工浏览应用,识别与数据库交互的参数,使用 Burp Suite 捕获请求。关注 URL、POST 正文、Cookie 和请求头中的参数。可先手工测试基本 SQL 注入迹象,例如在参数后添加单引号,观察是否返回 SQL 错误信息。
步骤 2:运行 sqlmap 基础检测扫描
针对可疑注入点启动 sqlmap,确认漏洞并识别数据库类型。支持 GET 参数测试、POST 请求测试(通过 -r 读取 Burp 保存的请求文件)、指定参数测试以及基于 Cookie 的注入测试。
步骤 3:枚举数据库结构
确认注入后,枚举数据库、表和列。可使用 --dbs 列出所有数据库,使用 -D 指定数据库后配合 --tables 列出表,再配合 -T 指定表后使用 --columns 列出列。
步骤 4:从目标表提取数据
导出敏感表内容以演示影响。可指定列进行导出,使用 --start 和 --stop 限制行数避免过度提取,并可尝试使用 --passwords 自动破解密码哈希。
步骤 5:测试高级利用向量
评估完整影响,测试操作系统级访问和文件操作。可检查当前数据库用户和权限(--current-user、--current-db、--is-dba),在具备 DBA 权限时尝试读取服务器文件(--file-read),在 MySQL 具备 FILE 权限时尝试执行操作系统命令(--os-cmd)。
步骤 6:使用 tamper 脚本绕过 WAF/过滤器
当 Web 应用防火墙或输入过滤器拦截基本载荷时,使用 tamper 脚本。可使用 space2comment、between、randomcase 等常见脚本,针对特定 WAF(如 ModSecurity)可使用 modsecurityversioned、modsecurityzeroversioned。使用 --list-tampers 可列出所有可用脚本。
步骤 7:生成报告并清理
记录发现并清理痕迹。sqlmap 默认将结果存储在 ~/.local/share/sqlmap/output/ 目录,可使用 --output-dir 指定输出目录导出结果,使用 --purge 清理 sqlmap 会话数据。
关键概念
- Union-based SQLi:使用 UNION SELECT 将攻击者查询结果附加到原始查询输出中
- Blind Boolean SQLi:通过观察应用返回的真/假响应逐位推断数据
- Blind Time-based SQLi:利用数据库 sleep 函数(如 SLEEP(5))根据响应延迟推断数据
- Error-based SQLi:通过 HTTP 响应中返回的详细数据库错误信息提取数据
- Stacked Queries:使用分号分隔执行多条 SQL 语句,用于 INSERT/UPDATE/DELETE 操作
- Out-of-band SQLi:通过数据库服务器发起的 DNS 或 HTTP 请求外带数据
- Tamper Scripts:修改载荷以绕过 WAF 和输入过滤的 sqlmap 插件
- Second-order SQLi:注入的载荷被存储,稍后在不同查询上下文中执行
工具与系统
- sqlmap:自动化 SQL 注入检测与利用框架
- Burp Suite Professional:用于拦截、修改和重放请求的 HTTP 代理
- OWASP ZAP:Burp 的免费替代品,用于 Web 应用扫描和代理
- Havij:带 GUI 的自动化 SQL 注入工具(Windows)
- jSQL Injection:基于 Java 的 GUI SQL 注入测试工具
- DBeaver/DataGrip:用于验证提取数据结构的数据库客户端
常见场景
- 电商产品页 SQL 注入:产品详情页的 id 参数直接用于 SQL 查询,使用 sqlmap 提取完整客户数据库以演示严重业务影响
- 登录表单绕过:登录表单将用户输入拼接到认证查询中,利用注入绕过认证并枚举数据库中所有用户凭据
- 受 WAF 保护的搜索功能:搜索功能存在 SQL 注入但受 WAF 保护,使用 space2comment 和 between 等 tamper 脚本编码载荷绕过过滤规则
- 基于 Cookie 的盲注:会话 Cookie 值在服务端用于数据库查询,使用基于时间的盲注技术逐字符提取数据
输出格式
技能提供了 SQL 注入发现的报告模板,包含漏洞类型、严重性(如 CVSS 9.8)、位置、数据库类型、影响、OWASP 分类、证据、枚举的数据库、暴露的敏感数据以及修复建议。修复建议包括:对所有数据库交互使用参数化查询(预编译语句)、使用允许列表进行输入验证、为应用用户应用最小权限数据库权限、部署 Web 应用防火墙作为纵深防御、启用数据库查询日志和监控以发现异常模式。
限制
本技能仅限在获得书面授权的渗透测试中使用。资料未提供其他限制说明。