增加sqlmap的“--risk”选项有什么后果?

信息安全 sql注入 sqlmap
2021-08-30 20:31:26

我使用 sqlmap 来测试我公司的服务。

我尝试增加其--level选项的值,但我没有找到对增加--risk值的测试的清晰描述。

那么,风险级别 2 和 3 测试的作用是什么,运行它们的风险是什么?

2个回答

- 等级

默认情况下,sqlmap 将测试所有指定的 GET 和 POST 参数,但是在某些情况下,您可能想要测试其他入口点,例如 HTTP 标头。可以使用特定选项指定它,但最直接的技术是使用 --level 选项。sqlmap 中有 5 个级别可用(默认为 1 级)。Level 2 添加 HTTP Cookie header 测试,level 3 添加 HTTP User-Agent/Referer header。我无法向您提供有关更高级别的更多信息,因为sqlmap wiki上没有关于它们的更多信息。

- 风险

关于风险。有3个风险值。维基写道:

默认值为 1,这对于大多数 SQL 注入点来说是无害的。风险值 2 将基于大量查询时间的 SQL 注入测试添加到默认级别,值 3 还添加了基于 OR 的 SQL 注入测试。

--risk 在 OscarAkaElvis 的回答中得到了正确解释。

但是,--level不仅添加了更多的注入点,例如 cookie 和其他标头,而且还为每个注入点执行了更多的测试如果您只想对 1 个参数执行所有可能的测试,您仍然需要级别 5。这些值定义为:

  • 1:总是(<100 个请求)
  • 2:再努力一点(100-200 个请求)
  • 3:良好的请求数量(200-500 个请求)
  • 4:广泛的测试(500-1000个请求)
  • 5:你有足够的时间(>1000 个请求)

如果你想测试一个特定的参数,而不需要 sqlmap 向各个方向随机喷射废话并成倍增加请求数,你可以使用-p. 例如,要在级别 5 上测试id参数,您可以使用:GET /admin?id=7&op=fetch

sqlmap -p id --level 5 -u 'https://example.com/admin?id=7&op=fetch'

对此进行测试,sqlmap 1.5.2 仅使用基本联合测试(1-10 列,它会提示)实际执行的每个级别的请求数为:

  • --level 1 --risk 1: 53请求
  • --level 2 --risk 1: 342请求
  • --level 3 --risk 1:1080请求
  • --level 4 --risk 1:2060请求
  • --level 5 --risk 1:3280请求

当增加到 时--risk 3,测试的数量会进一步增加:

  • --level 1 --risk 3: 112请求
  • --level 2 --risk 3: 646请求
  • --level 3 --risk 3:2160请求
  • --level 4 --risk 3:4320请求
  • --level 5 --risk 3:7850请求

最后,虽然 OscarAkaElvis 正确地引用了文档说:

风险值 2 将基于查询时间的大量 SQL 注入的测试添加到默认级别

风险级别 1 也已经进行了基于时间的 SQL 注入。您无需为此增加风险级别。较高的风险级别只会使用更慢的查询,例如,如果它们工作并阻止 Web 服务器,这可能会使系统停机更长时间。

您可以通过在此目录中的文件中使用 ctrl+f 来准确查看它对不同--level和值的作用: https://github.com/sqlmapproject/sqlmap/tree/master/data/xml/payloads 例如通过搜索,您的浏览器将找到该风险级别的所有查询。--risk
<risk>1