level 参数
简单说,--level
参数决定了 sqlmap 在检测 SQL 注入时的 「努力程度」 。
- level 1:默认的 level 等级,会测试 GET 和 POST 请求中的参数。
- level 2:除了前面提到的,还会检查 cookie 里的数据。
- level 3:user-agent 和 referer 头部也纳入检测范围。
- level 4~5:会尝试各种 payloads 和边界条件,确保不放过任何潜在的注入点。
risk 参数
与 --level
不同,--risk
参数更像是告诉 sqlmap:「我愿意承担多大的风险来进行这次测试」 。
- risk 1:安全第一。默认的风险等级,风险几乎为零。
- risk 2:除了默认的检测,还会尝试时间型盲注。
- risk 3:在风险等级 2 的基础上,再加上 OR 类型的布尔型盲注。这种方式在某些情况下可能会导致数据表的所有记录被更新,所以使用时需谨慎。
level 和 risk 参数的区别
虽然 --level
和 --risk
两个参数在某些方面有重叠,但它们各自侧重的方向是不同的。
- 方向不同:
--level
更像是广度上的拓展,而--risk
则是深度上的挖掘。 - 场景不同:如果觉得默认的 GET 和 POST 参数检测不够,想要找找其它位置的注入点时,可以考虑加
--level
等级。如果可以确定某个位置就是存在注入点,或是强烈怀疑某个地方存在注入,但目前的 payload 覆盖不到,而且愿意承担风险进行深入测试时,可以考虑提升--risk
等级。
自定义 Payloads 和参数选择
除了内置的 payloads,sqlmap 还支持用户自定义编辑和添加 payloads 。如果默认的测试方式不起作用,可以根据自己的需要,编写针对性的 payloads 来进行测试。同时,通过 -p
参数和 --skip
参数,还可以灵活地选择或排除某些参数进行测试,使检测过程更加高效和精准。使用了-p
参数时会 sqlmap 自动忽略--level
参数。