引言
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: HTTPServer头部报告的服务器软件及其版本。在此示例中,它是运行在 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 应用程序的可操作情报的关键。


