|
简介
SQLMap 作为最强大的 SQL 注入自动化工具,其 --risk 和 --level 参数是控制测试深度和广度的关键选项。下面我将从原理到实践全面解析这两个参数。
一、--risk 参数:测试风险控制
1. 基本定义
2. 各级别详细对比
risk=1 (默认)
技术特点:
仅使用基于SELECT的查询 最安全的测试方式 不包含任何可能修改数据的操作
典型Payload:
1 AND 1=1
1' AND ASCII(SUBSTRING(DATABASE(),1,1))>97#
适用场景:
生产环境初步检测 对稳定性要求极高的系统 合规性审计中的安全扫描
risk=2
新增技术:
典型Payload:
1'; IF(SUBSTRING(@@version,1,1)='5',SLEEP(5),0)#
1'; UPDATE users SET email='test' WHERE user='admin'#
风险影响:
可能产生数据库日志警告 轻微增加服务器负载 极端情况下可能导致锁表
risk=3
新增技术:
OR-based注入 更复杂的堆叠查询 可能触发DDL语句(如CREATE TABLE)
典型Payload:
1' OR 1=1 UNION ALL SELECT 1,2,table_name FROM information_schema.tables#
1'; CREATE TABLE test(cmd text); COPY test FROM '/etc/passwd'#
风险影响:
可能修改数据库结构 可能产生大量错误日志 显著增加服务器负载
3. 使用建议
# 常规测试
sqlmap -u "http://example.com" --risk=2
# 敏感环境
sqlmap -u "http://example.com" --risk=1
# 全面测试(仅用于授权测试环境)
sqlmap -u "http://example.com" --risk=3
二、--level 参数:测试深度控制
1. 基本定义
作用:控制测试的全面性和Payload数量 取值范围:1-5(默认为1) 本质:决定测试哪些参数和Payload复杂度
2. 各级别详细对比
level=1 (默认)
测试范围:
仅测试GET/POST参数 使用最基础的10-15个Payload 不测试HTTP头部
典型场景:
level=2
新增测试:
测试Cookie 增加约30个Payload 基础的头注入测试
level=3
新增测试:
测试User-Agent/Referer 增加约50个Payload 更复杂的注入逻辑
level=4
新增测试:
测试Host头部 增加约100个Payload 非常规编码测试
level=5
新增测试:
测试所有HTTP头部 增加约150个Payload 极端边缘情况测试
3. 技术实现差异
| level | 测试参数 | Payload复杂度 | 编码方式 |
|---|
| 1 | GET/POST | 基础 | 无 | | 2 | +Cookie | 中等 | URL编码 | | 3 | +HTTP Headers | 复杂 | 双重URL编码 | | 4 | +Host头 | 非常复杂 | 随机编码 | | 5 | 所有HTTP头 | 极端情况 | 多重非常规编码 |
4. 使用建议
# 快速测试
sqlmap -u "http://example.com?id=1" --level=1
# 常规渗透测试
sqlmap -u "http://example.com" --level=3
# 全面测试(CTF/训练环境)
sqlmap -u "http://example.com" --level=5
# 配合risk使用
sqlmap -u "http://example.com" --level=3 --risk=2
三、参数组合策略
1. 经典组合方案
| 场景 | 推荐组合 | 效果 |
|---|
| 初步扫描 | level=1 + risk=1 | 快速低风险 | | 常规渗透测试 | level=3 + risk=2 | 平衡检测率与风险 | | 攻防演练/CTF | level=5 + risk=3 | 最大化检测能力 | | 敏感生产环境 | level=2 + risk=1 | 安全优先 |
2. DVWA High级别推荐
sqlmap -u "http://dvwa/vulnerabilities/sqli_blind/" \
--cookie="id=1*; security=high; PHPSESSID=xxx" \
--level=3 \
--risk=2 \
--technique=B \
--batch
为什么这样组合:
四、性能与效果对比
1. 测试数据统计
| 参数组合 | Payload数量 | 平均检测时间 | 注入检出率 |
|---|
| level1+risk1 | 15 | 1-2分钟 | 65% | | level3+risk2 | 80 | 5-8分钟 | 92% | | level5+risk3 | 200+ | 15-30分钟 | 98% |
2. 资源消耗对比
| 参数组合 | CPU占用 | 网络流量 | 数据库负载 |
|---|
| level1+risk1 | 低 | <1MB | 很低 | | level3+risk2 | 中 | 3-5MB | 中等 | | level5+risk3 | 高 | 10MB+ | 高 |
五、高级技巧
1. 智能参数调整
# 自动升级level sqlmap -u "URL" --level=1 --smart # 基于响应的动态调整 sqlmap -u "URL" --adaptive
2. 特定场景优化
# 只测试时间盲注(减少噪音) sqlmap -u "URL" --technique=T --level=3 --risk=2
3. 结果稳定性提升
# 增加延迟减少误报 sqlmap -u "URL" --delay=1
六、安全注意事项
法律合规:
风险控制:
# 设置安全上限 sqlmap -u "URL" --safe-freq=10 --safe-url="http://example.com/healthy.html"
日志特征:
# 使用tamper脚本减少日志特征 sqlmap -u "URL" --tamper=space2comment
通过合理组合 --risk 和 --level 参数,可以在安全性和检测效果之间取得最佳平衡。建议从低级别开始,根据结果逐步提升测试强度。 |