解读标准 Nikto 扫描结果

Kali LinuxBeginner
立即练习

引言

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

理解如何阅读和解释 Nikto 扫描结果,是网络安全领域任何人的基本技能,无论是渗透测试人员还是系统管理员。其输出起初可能看起来晦涩难懂,但它被结构化地设计,以便提供关于 Web 服务器配置和潜在安全弱点的宝贵见解。

在本实验中,你将学习如何解析标准的 Nikto 扫描报告。为了节省时间并专注于解读,我们为你提供了一个预先生成的扫描结果文件。你将分析此文件,以识别目标信息,区分不同的发现项,理解漏洞引用,并审查最终摘要。

定位目标信息摘要部分

在此步骤中,你将检查 Nikto 报告的开头,以识别有关被扫描目标的基本信息。此部分至关重要,因为它确认了测试内容以及检测到的基本服务器软件。

一个名为 nikto_scan_results.txt 的示例报告文件已在你的 ~/project 目录中创建。使用 cat 命令在终端中显示其内容。

cat ~/project/nikto_scan_results.txt

查看输出的前几行。这个初始块提供了目标的摘要。

- Nikto v2.1.6
---------------------------------------------------------------------------
+ Target IP:          172.17.0.2
+ Target Hostname:    labex-server
+ Target Port:        80
+ Start Time:         2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)

这些行的含义如下:

  • Target IP: 被扫描服务器的 IP 地址。
  • Target Hostname: 服务器的主机名。
  • Target Port: Web 服务运行的 TCP 端口(通常 HTTP 为 80,HTTPS 为 443)。
  • Server: HTTP Server 头部报告的服务器软件及其版本。在此示例中,它是运行在 Ubuntu 上的 Apache 版本 2.4.52。

识别信息性发现项和 OSVDB 引用

在此步骤中,你将学习识别信息性发现项,这些项以 + 符号标记。它们不总是直接的漏洞,但提供了关于服务器配置的有用上下文。

Nikto 中的许多发现项都与 OSVDB (Open Source Vulnerability Database) ID 相关联。尽管 OSVDB 项目已不再活跃,但这些 ID 仍然可以用于历史参考和查找特定问题的详细信息。

让我们使用 grep 命令过滤报告,仅显示代表发现项的行。在 Nikto 的输出中,这些行以 + 开头。

grep "^\+" ~/project/nikto_scan_results.txt

你将看到扫描中所有发现项的列表。

+ Target IP:          172.17.0.2
+ Target Hostname:    labex-server
+ Target Port:        80
+ Start Time:         2023-10-27 10:30:00 (GMT0)
+ Server: Apache/2.4.52 (Ubuntu)
+ 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.
+ Uncommon header 'x-powered-by' found, with contents: PHP/8.1.2
+ Allowed HTTP Methods: GET, HEAD, POST, OPTIONS
+ OSVDB-3233: /icons/README: The Apache web server is configured to return a valid response to a request for /icons/README.
+ /index.php: PHP is installed.
+ /admin/: Directory indexing found.
+ OSVDB-3233: /cgi-bin/: directory indexing found.
+ OSVDB-3268: /cgi-bin/test.cgi: This might be interesting...
+ 8123 requests: 0 error(s) and 11 item(s) reported on remote host
+ End Time:           2023-10-27 10:38:20 (GMT0) (500 seconds)
+ 1 host(s) tested

请注意 + OSVDB-3233: /icons/README: ... 这一行。这表示一个信息性发现项(ID 3233),与 Apache 服务器上常见的 /icons/ 目录中一个公开可访问的 README 文件有关。

区分低风险和高风险漏洞

在此步骤中,你将学习区分代表低风险的发现项和可能更令人担忧的发现项。Nikto 不会分配严重性级别;分析师需要根据上下文来解读结果。

低风险发现项 通常与未实现的最佳安全实践相关。例如:
+ The anti-clickjacking X-Frame-Options header is not present.
这是一个缺失的安全头部。虽然拥有它是一种良好的实践,但其本身通常不会直接导致安全漏洞。

高风险发现项 通常指向信息泄露或可能被利用的错误配置。例如:
+ /admin/: Directory indexing found.
这更严重。目录索引允许攻击者查看 /admin/ 目录中的所有文件和子目录,可能暴露敏感文件、应用程序结构或备份文件。

让我们使用 grep 命令从报告中分离出这个高风险发现项。

grep "Directory indexing" ~/project/nikto_scan_results.txt

此命令将显示所有发现目录索引的实例。

+ /admin/: Directory indexing found.
+ OSVDB-3233: /cgi-bin/: directory indexing found.

看到这些结果应该促使分析师立即调查这些目录,以确定是否暴露了任何敏感信息。

理解 CGI 目录发现项的含义

在此步骤中,你将重点关注与 CGI 目录相关的发现项。CGI (Common Gateway Interface) 是一种标准协议,允许 Web 服务器执行外部程序,例如脚本。这些目录是攻击者的常见目标,因为它们通常包含可能存在漏洞的可执行文件。

Nikto 会专门检查常见的 CGI 目录,例如 /cgi-bin/。发现此类目录及其内部的脚本是一件重要的事情。

让我们使用 grep 命令查找报告中所有提及 /cgi-bin/ 的行。

grep "/cgi-bin/" ~/project/nikto_scan_results.txt

输出显示了与此目录相关的两个发现项。

+ OSVDB-3233: /cgi-bin/: directory indexing found.
+ OSVDB-3268: /cgi-bin/test.cgi: This might be interesting...

第一行确认 /cgi-bin/ 目录本身启用了目录索引,这是一个高风险发现项,正如上一步所讨论的。第二行表明 Nikto 发现了一个 test.cgi 脚本。测试脚本通常是开发人员遗留下来的,有时可能存在漏洞或泄露服务器环境的信息。分析师会将此标记出来进行手动调查。

查看扫描结束时的摘要统计信息

在此最后一步中,你将检查 Nikto 报告末尾的摘要部分。此部分提供了扫描执行和范围的快速概览。

为了方便查看文件的最后几行,你可以使用 tail 命令。让我们查看报告的最后 10 行。

tail -n 10 ~/project/nikto_scan_results.txt

这将显示报告的结尾,其中包含摘要统计信息。

+ /admin/: Directory indexing found.
+ OSVDB-3233: /cgi-bin/: directory indexing found.
+ OSVDB-3268: /cgi-bin/test.cgi: This might be interesting...
+ 8123 requests: 0 error(s) and 11 item(s) reported on remote host
+ End Time:           2023-10-27 10:38:20 (GMT0) (500 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

以下是关键摘要行的细分:

  • 8123 requests: 0 error(s) and 11 item(s) reported...: 这告诉你 Nikto 向服务器发送了 8,123 个 HTTP 请求,没有遇到错误,并发现了 11 个感兴趣的项。
  • End Time: 这显示了扫描完成的时间戳和总持续时间。
  • 1 host(s) tested: 这确认扫描是针对单个目标运行的。

此摘要有助于了解扫描的规模并获得发现项的高级计数。

摘要

在此实验中,你学习了解读标准 Nikto 扫描报告的基本技能。你实践了一种系统的方法来分析输出,从基本目标信息开始,然后深入到更详细的发现项。

你学会了:

  • 识别目标服务器的 IP、端口和软件 banner。
  • 识别信息性发现项以及 OSVDB 引用的重要性。
  • 区分低风险发现项(如缺少标头)和高风险发现项(如目录索引)。
  • 理解 CGI 目录发现的重要性。
  • 查看扫描结束时的摘要以获得高层概览。

这种结构化分析过程是将原始扫描器输出转化为用于保护 Web 应用程序的可操作情报的关键。