SQLMap的–level和–risk参数详解
TOPIC SOURCE
SQLMAP详细参数详解
在渗透测试的现场,SQLMap 常被当作“万能钥匙”,但真正决定它是“精准”还是“失控”的,往往藏在两个看似不起眼的选项——--level 与 --risk。
--level 参数深度剖析
level 用数字 1‑5 标记测试的“深度”。数值越大,SQLMap 会尝试越多的 payload、越复杂的注入手法以及更多的请求位置。
- 1:仅检测 GET/POST 参数的最常见布尔与错误型 payload。
- 2:加入对 Cookie、User‑Agent、Referer 的检测。
- 3:启用时间盲注、堆叠查询以及基于 UNION 的多列尝试。
- 4:递归遍历每个可能的参数分隔符,甚至对 JSON、XML、multipart 体进行模糊注入。
- 5:开启所有可用的 tamper 脚本、自动化字符集切换以及对 WAF 的规避尝试。
--risk 参数风险评估
risk 采用 0‑3 四档标记“潜在危害”。数值越高,SQLMap 可能会发送破坏性语句(DROP、UPDATE、INSERT),甚至触发时间延迟或堆叠查询导致目标业务暂时不可用。
| risk | 典型 payload | 潜在影响 |
|---|---|---|
| 0 | 仅 SELECT | 安全审计,几乎不影响业务 |
| 1 | SELECT + 基础布尔 | 轻度负载,适合公开站点 |
| 2 | 时间盲注、堆叠查询 | 会导致响应延迟,可能触发安全报警 |
| 3 | DROP/UPDATE/INSERT、批量 UNION | 高危操作,若未做好回滚可能导致数据丢失 |
实战选取技巧
面对不同的目标,如何在“深度”和“风险”之间找到平衡?下面列出几种常见情境的取值建议:
- 目标是公开的测试环境或靶场,
--level=5 --risk=3能最大化 payload 覆盖。 - 业务关键系统仅允许白盒审计,推荐
--level=2 --risk=1,既能发现常见注入,又避免破坏。 - 对 WAF 保护不确定的站点,先以
--level=3 --risk=2观察响应,再根据报错信息逐步提升。 - 如果只想快速验证参数可注入,
--level=1 --risk=0足以产生可读的报告。
记住,level 决定“广度”,risk 决定“力度”。在实际渗透中,常见的做法是先用低风险、低深度跑一遍基线,确认目标可达后再逐层提升,既能节约时间,也能把意外破坏的概率压到最低。

参与讨论
level1风险0确实够用了,快速验证没毛病
试了下level3配risk2,WAF直接报警了🤔
这个参数说明比官方文档清楚多了
之前用level5把测试环境搞崩了,慎用啊
想问下level4对JSON注入效果怎么样?
risk3真不敢随便用,怕把数据搞丢
用level2扫公开站挺稳的,没出过问题