SQLMap的–level和–risk参数详解

7 人参与

渗透测试的现场,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安全审计,几乎不影响业务
1SELECT + 基础布尔轻度负载,适合公开站点
2时间盲注、堆叠查询会导致响应延迟,可能触发安全报警
3DROP/UPDATE/INSERT、批量 UNION高危操作,若未做好回滚可能导致数据丢失

实战选取技巧

面对不同的目标,如何在“深度”和“风险”之间找到平衡?下面列出几种常见情境的取值建议:

  • 目标是公开的测试环境或靶场,--level=5 --risk=3 能最大化 payload 覆盖。
  • 业务关键系统仅允许白盒审计,推荐 --level=2 --risk=1,既能发现常见注入,又避免破坏。
  • 对 WAF 保护不确定的站点,先以 --level=3 --risk=2 观察响应,再根据报错信息逐步提升。
  • 如果只想快速验证参数可注入,--level=1 --risk=0 足以产生可读的报告。

记住,level 决定“广度”,risk 决定“力度”。在实际渗透中,常见的做法是先用低风险、低深度跑一遍基线,确认目标可达后再逐层提升,既能节约时间,也能把意外破坏的概率压到最低。

参与讨论

7 条评论
  • 琴瑟知音

    level1风险0确实够用了,快速验证没毛病

    回复
  • 星云密布

    试了下level3配risk2,WAF直接报警了🤔

    回复
  • 天鹅湖梦

    这个参数说明比官方文档清楚多了

    回复
  • 打呼噜的考拉

    之前用level5把测试环境搞崩了,慎用啊

    回复
  • 暗星咒语

    想问下level4对JSON注入效果怎么样?

    回复
  • 静默闪电

    risk3真不敢随便用,怕把数据搞丢

    回复
  • 休止

    用level2扫公开站挺稳的,没出过问题

    回复