用途 该技能面向 SQL 注入渗透测试场景,使用 SQLMap 提供系统化的自动化 SQL 注入检测与利用方法。覆盖数据库枚举、表与列发现、数据提取、多种目标指定方式,以及对 MySQL、PostgreSQL、MSSQL、Oracle 等数据库管理系统的高级利用技术。
前置条件 需要一个带有可注入参数的 Web 应用 URL(例如 ?id=1);需要安装 SQLMap(Kali Linux 预装,或从 GitHub 下载);需要一个已确认或怀疑存在 SQL 注入的 URL 参数;可选提供 Burp Suite 捕获的 HTTP 请求文件用于 POST 型注入;并且必须拥有渗透测试活动的书面授权。
主要能力与交付物
- 数据库枚举:列出目标服务器上的所有数据库
- 表结构:列出目标数据库中的完整表名
- 列映射:给出每张表的列名与数据类型
- 数据提取:导出记录,包括用户名、密码与敏感数据
- 哈希值:获取用于离线破解的密码哈希
- 漏洞报告:确认 SQL 注入类型与严重程度
使用方式 核心工作流为:识别 SQL 注入漏洞,然后逐步枚举数据库、表、列并提取数据。基本命令示例:sqlmap -u "http://target.com/page.php?id=1" --batch。枚举数据库:--dbs;枚举表:-D database_name --tables;枚举列:-D database_name -T table_name --columns;导出数据:--dump、-C username,password --dump、--dump-all。常用选项包括 -u(目标 URL)、-r(从文件加载 HTTP 请求)、-l(解析 Burp/WebScarab 日志中的目标)、-m(批量目标文件)、-g(Google dork)、-D/-T/-C(指定数据库/表/列)、--batch(非交互模式)、--random-agent、--level(1-5)、--risk(1-3)。
支持的数据库管理系统 MySQL、PostgreSQL、Microsoft SQL Server、Oracle、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB、Informix 均为完全支持。
注入技术 支持布尔盲注(--technique=B)、时间盲注(--technique=T)、报错注入(--technique=E)、UNION 查询注入(--technique=U)、堆叠查询(--technique=S)与带外注入(--technique=Q)。
适用场景 适用于经授权的渗透测试与安全评估,例如对本地搭建的测试环境(如 testphp.vulnweb.com)进行完整数据库枚举、通过请求文件处理 POST 注入、对多目标批量扫描、以及在具备 DBA 权限时获取操作系统 shell(--os-shell、--os-cmd)、读写服务器文件(--file-read、--file-write/--file-dest)。
限制与约束
- 操作边界:目标 URL 必须存在有效可注入参数;需要与目标数据库服务器的网络连通;大型数据库导出可能耗时较长;部分 WAF/IPS 可能拦截 SQLMap 流量;时间盲注显著慢于报错注入。
- 性能方面:可用 --threads 提速(默认 1);对大表用 --start 与 --stop 限制导出范围;已知注入方式时用 --technique 指定更快的方法。
- 法律要求:仅可测试拥有明确书面授权的系统;针对未知站点的 Google dork 攻击属违法行为;需记录所有测试活动与发现;遵守约定范围内的限制。
- 被检测风险:SQLMap 会产生大量日志记录;可用 --random-agent 变换 User-Agent;用 --delay 避免触发速率限制;授权测试中可通过 --tor 经 Tor 代理以匿名化。
常见问题处理 若提示参数不可注入,可提高 --level=5 --risk=3、用 -p 明确指定参数、更换 --technique、或用 --prefix/--suffix 绕过过滤;若目标处于 WAF 之后,可使用 tamper 脚本(如 --tamper=space2comment,用 --list-tampers 查看可用脚本,常见组合 space2comment,between,randomcase)、增加 --delay、使用 --random-agent;若连接超时,可增大 --timeout、减少 --threads、增加 --retries;若时间盲注过慢,可减小 --time-sec 或改用布尔盲注;若大表无法导出,可用 --start/--stop 限制记录、仅导出指定列或 --exclude-sysdbs;若长扫描期间会话中断,可用 --output-dir 保存会话并以 --resume 恢复,或使用 --keep-alive 保持持久连接。