简介
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
参数,可以在安全性和检测效果之间取得最佳平衡。建议从低级别开始,根据结果逐步提升测试强度。
到此这篇关于sqlmap 参数--risk 与 --level 深度解析的文章就介绍到这了,更多相关sqlmap 参数--risk 与 --level内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论