在 Nikto 中设置请求超时

Kali LinuxBeginner
立即练习

引言

Nikto 是一个流行的开源 Web 服务器扫描器,它对 Web 服务器进行全面的测试,检查超过 6700 个潜在危险文件/程序,检查超过 1250 个服务器的过时版本,以及超过 270 个服务器的版本特定问题。

在扫描 Web 服务器时,尤其是在慢速或不可靠的网络上,或者针对负载很重的服务器,请求可能需要很长时间才能完成。默认情况下,Nikto 等待 10 秒以获得响应。如果服务器比这慢,Nikto 可能会报告超时错误并无法正确完成扫描。

在本实验中,你将学习如何使用 Nikto 的 -timeout 选项来控制请求超时时间。这将允许你调整 Nikto 的行为,以成功扫描慢速或无响应的 Web 服务器。

识别慢速或无响应的 Web 服务器

在本步骤中,你将学习如何识别 Web 服务器是否慢速。在调整扫描工具中的超时设置之前,首先测量服务器的典型响应时间至关重要。一种简单的方法是使用 curl 命令。

我们在后台启动了一个有意设置为慢速的 Web 服务器;它会等待 5 秒钟才发送响应。让我们使用 curl 来测量从它那里获得响应所需的时间。-w 标志允许我们格式化输出,而 %{time_total} 是一个变量,它保存了事务的总时间。

在你的终端中执行以下命令,以测量在端口 8000 上运行的本地服务器的响应时间:

curl -o /dev/null -s -w 'Total time: %{time_total}\n' http://localhost:8000

你将看到类似以下的输出。由于我们在服务器中添加了人为延迟,时间会略高于 5 秒。

Total time: 5.00...

这证实了服务器是慢速的,响应时间超过了几秒钟。此信息对于在 Nikto 中设置适当的超时至关重要。

使用 -timeout 选项设置短秒数超时

在本步骤中,你将了解 Nikto 的 -timeout 选项。此选项允许你指定 Nikto 在放弃并将其标记为超时之前,等待单个请求完成的秒数。默认值为 10 秒。

为了理解 Nikto 在超时配置不当时的行为,我们将故意为我们的慢速服务器设置一个过短的值。由于我们知道服务器大约需要 5 秒才能响应,我们将超时设置为 2 秒。这将导致扫描因超时错误而失败,我们将在下一步中观察到这一点。

首先,让我们使用 Nikto 的帮助菜单来确认 -timeout 选项的存在和描述。你可以将 nikto -Help 的输出通过管道传递给 grep 来查找特定选项。

nikto -Help | grep timeout

输出将显示 -timeout 选项及其描述:

-timeout <secs>     Timeout for requests (default 10 seconds)

这确认了如何使用该选项。在下一步中,我们将在实际扫描中应用它。

运行扫描并观察潜在的超时错误

在本步骤中,你将使用我们确定的短超时值运行 Nikto 扫描。这将演示当超时值不足以满足目标服务器时会发生什么。

执行以下命令,以 2 秒的超时时间扫描本地服务器。-h 标志指定主机,-p 标志指定端口。

nikto -h localhost -p 8000 -timeout 2

随着扫描的进行,你将在控制台中看到多个错误消息。Nikto 会尝试发出请求,但由于服务器需要 5 秒才能响应,每次都会超出 2 秒的超时限制。

输出将充斥着类似以下的错误:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: No banner retrieved
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ ERROR: Connection timed out
+ ERROR: Connection timed out
... (many more errors) ...

重复出现的 ERROR: Connection timed out 消息清楚地表明超时值太低。扫描结果不可靠,并且很可能跳过了许多测试。

增加超时值以获得更可靠的扫描

在本步骤中,你将通过设置一个合适的超时值来纠正上一步中的问题。为了确保扫描的可靠性,超时时间必须长于服务器最长的预期响应时间。

从第一步的 curl 测试中,我们知道服务器大约需要 5 秒才能响应。为了安全起见,我们应该增加一点缓冲。让我们将超时设置为 7 秒。这为服务器处理请求并发送响应提供了足够的时间。

再次运行 Nikto 扫描,但这次将超时设置为 7 秒:

nikto -h localhost -p 8000 -timeout 7

这次,你应该会看到不同的结果。扫描将正常进行,不会出现“Connection timed out”错误。Nikto 现在将能够与服务器正常通信并执行其测试。

输出将更像一次正常的、成功的扫描:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        8000
+ Start Time:         ...
---------------------------------------------------------------------------
+ Server: Python/3.10.6 http.server/0.6
+ The anti-clickjacking X-Frame-Options header is not present.
+ The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ No CGI directories found (use '-C all' to force check all possible dirs)
+ "robots.txt" not found.
...

请注意没有超时错误,并且出现了服务器 banner。这表明扫描现在正在可靠地运行。

为目标网络找到最佳超时值

在本步骤中,我们将讨论寻找最佳超时值的策略。虽然我们在受控环境中使用了已知的延迟,但在实际场景中,你不会知道确切的响应时间。

找到最佳超时值需要权衡:

  • 过短: 会导致超时错误和不可靠的扫描(如第三步所示)。
  • 过长: 如果服务器实际上很快,可能会使扫描不必要地变慢。例如,为通常响应时间为 1 秒的服务器设置 30 秒的超时,意味着每次实际失败的请求你都需要等待 30 秒,从而减慢整体扫描速度。

一个好的策略是:

  1. 使用 pingcurl 进行基线测量,以了解一般的延迟。
  2. 从比你的基线测量值长几秒的超时值开始。
  3. 如果仍然看到超时错误,请逐步增加该值,直到扫描顺利进行。

对于我们的服务器,7 秒的超时值效果很好。让我们再进行一次最终扫描,使用稍长一些的 10 秒超时值(Nikto 的默认值),并引入 -maxtime 选项,该选项限制了扫描的总持续时间。这有助于确保扫描不会在非常大的网站上运行数小时。

nikto -h localhost -p 8000 -timeout 10 -maxtime 60s

此命令告诉 Nikto 为每个请求最多等待 10 秒,如果整个扫描时间超过 60 秒,则中止扫描。这种组合使你能够同时控制单个请求的计时和总扫描时长。

总结

在本实验中,你学习了如何在 Nikto 中有效管理请求超时,这是一项执行可靠的 Web 漏洞扫描的关键技能。

你首先使用 curl 命令测量响应时间,从而识别出响应缓慢的 Web 服务器。然后,你探索了 Nikto 的 -timeout 选项,最初将其设置为一个过低的值,这导致了连接错误。随后,你增加了超时时间到一个合适的值,使得扫描能够成功完成。

最后,你学习了通过平衡扫描的可靠性和效率来寻找最佳超时值的策略,并了解了用于控制总扫描时长的相关 -maxtime 选项。正确配置这些设置可以确保你的 Nikto 扫描既彻底又及时。