使用 Nikto 进行 Web 服务器扫描

网络安全Beginner
立即练习

简介

欢迎来到「使用 Nikto 进行 Web 服务器扫描」实验。

Nikto 是一款广泛使用的开源 Web 服务器漏洞扫描器。它会对 Web 服务器进行全面的测试,涵盖超过 6,700 个潜在危险文件和程序,检查超过 1,250 个服务器的过时版本,并识别特定版本的问题。虽然 Nikto 的设计初衷并非隐蔽(它非常“吵闹”,很容易被入侵检测系统发现),但它在进行基准安全审计时速度极快且非常有效。

将 Nikto 理解为一种快速的广度优先审计工具最为贴切。它能帮助你快速识别明显的 Web 服务器问题,但不能替代仔细的人工验证。它的“吵闹”是换取这种广度的代价。

在本实验中,你将学习如何使用 Nikto 扫描本地 Web 服务器、调整扫描以专注于特定漏洞、将结果保存为结构化报告,并分析发现的问题以提升服务器安全性。

执行基础 Nikto 扫描

在这一步中,你将学习如何使用 Nikto 对目标 Web 服务器执行基础漏洞扫描。

在本实验中,环境中已经安装并启动了一个本地 Apache Web 服务器。该服务器将作为我们的目标。Nikto 通过命令行操作,其最基本的使用方法仅需 -h (host) 标志,后跟目标 IP 地址或域名。

要对本地 Web 服务器发起基础扫描,请在终端中运行以下命令:

nikto -h http://localhost

在此阶段,目标是建立一个可见弱点和错误配置的基准,而不是证明所报告的每一项内容都可被利用。

执行命令后,Nikto 将开始探测 Web 服务器。随着 Nikto 发现信息,屏幕上会出现输出内容。

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2026-10-25 10:00: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.
+ The X-Content-Type-Options header is not set.
+ No CGI Directories found (use '-C all' to force check all possible dirs)
+ /admin.txt: This might be interesting...
+ /info.php: Output from the phpinfo() function was found.
+ 8000 requests: 0 error(s) and 6 item(s) reported on remote host
+ End Time:           2026-10-25 10:00:15 (GMT0) (15 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

输出提供了大量信息。它识别了服务器软件版本 (Apache/2.4.52),指出了缺失的安全标头(如 X-Frame-Options),并高亮显示了服务器上残留的潜在敏感文件,例如 /admin.txt 和 /info.php。

忽略误报(调优)

在这一步中,你将学习如何对 Nikto 扫描进行调优。

由于 Nikto 会检查数千个潜在问题,默认扫描有时会花费很长时间并产生大量“噪音”或误报。为了使扫描更快、更具针对性,Nikto 提供了 -Tuning 标志。

这提醒我们,扫描器输出的质量取决于扫描范围。缩小测试类别通常能提高发现结果的实用性。

-Tuning 标志允许你精确指定要运行的测试类别。每个类别由一个数字或字母表示。例如:

  • 1 - 有趣的文件 / 日志中可见
  • 2 - 错误配置 / 默认文件
  • 3 - 信息泄露
  • 4 - 注入 (XSS/脚本/HTML)
  • 9 - SQL 注入

如果你只想检查错误配置 (2) 和信息泄露 (3),可以将这些数字组合起来。

运行以下命令执行调优扫描,仅查找错误配置和信息泄露:

nikto -h http://localhost -Tuning 23

你会注意到,由于跳过了数百个不相关的测试(如 SQL 注入或拒绝服务检查),此扫描比基础扫描完成得快得多。

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          127.0.0.1
+ Target Hostname:    localhost
+ Target Port:        80
+ Start Time:         2026-10-25 10:05:00 (GMT0)
---------------------------------------------------------------------------
+ Server: Apache/2.4.52 (Ubuntu)
+ /admin.txt: This might be interesting...
+ /info.php: Output from the phpinfo() function was found.
+ 1500 requests: 0 error(s) and 3 item(s) reported on remote host
+ End Time:           2026-10-25 10:05:03 (GMT0) (3 seconds)
---------------------------------------------------------------------------
+ 1 host(s) tested

通过使用 -Tuning 标志,你可以根据特定的审计需求定制 Nikto,从而节省时间并减少报告中的杂乱信息。

将输出保存到报告

在这一步中,你将学习如何将 Nikto 扫描结果保存到结构化的报告文件中。

在进行专业安全审计时,保留发现记录至关重要。直接从终端读取结果适合快速检查,但与团队共享发现结果则需要正式的文档。Nikto 支持以多种格式保存输出,包括 HTML、CSV、XML 和纯文本。

要保存报告,你需要使用两个标志:

  • -o (或 -output):指定保存报告的文件路径和名称。
  • -Format:指定报告的格式(例如 htm、csv、xml、txt)。

让我们运行一次扫描,并将输出保存为项目目录中的 HTML 文件。执行以下命令:

nikto -h http://localhost -Format htm -o /home/labex/project/report.html

扫描运行时,你仍会在终端中看到标准输出。扫描完成后,Nikto 将在你指定的路径生成 HTML 文件。

你可以通过列出当前目录的内容来验证文件是否已成功创建:

ls -l /home/labex/project/report.html
-rw-r--r-- 1 root root 4521 Oct 25 10:10 /home/labex/project/report.html

此 HTML 报告稍后可以下载并在任何标准 Web 浏览器中打开,从而以清晰的表格形式查看所有发现的漏洞。

分析 Nikto 漏洞报告

在最后一步中,你将学习如何使用命令行工具快速分析生成的报告。

虽然 HTML 报告非常适合在浏览器中查看,但你经常会发现自己处于纯终端环境中,没有图形界面。在这种情况下,你可以使用标准的 Linux 文本处理工具(如 grep)从报告中提取特定信息。

让我们搜索在上一步中生成的 HTML 报告,看看 Nikto 是否成功记录了 Apache 服务器状态信息泄露。

使用 grep 命令在报告中搜索单词 "server-status":

grep "server-status" /home/labex/project/report.html
    <td>/server-status: This reveals Apache information. Comment out appropriate line in httpd.conf or restrict access to allowed hosts.</td>

接下来,让我们检查报告是否捕获了缺失的 X-Frame-Options 安全标头。此标头对于防止点击劫持攻击至关重要。

grep "X-Frame-Options" /home/labex/project/report.html
    <td>The anti-clickjacking X-Frame-Options header is not present.</td>

通过将 Nikto 的报告功能与 Linux 命令行工具相结合,你可以快速解析大型漏洞扫描结果,提取关键发现,并开始加固你的 Web 服务器。

总结

恭喜!你已成功完成了「使用 Nikto 进行 Web 服务器扫描」实验。

在本实验中,你学习了如何:

  • 使用 Nikto 对目标 Web 服务器执行基础漏洞扫描。
  • 使用 -Tuning 标志将扫描重点放在特定类别的漏洞上,从而减少误报并缩短扫描时间。
  • 将扫描结果导出为结构化的 HTML 报告,以便进行文档记录和共享。
  • 使用 grep 等命令行工具分析生成的报告,快速识别关键安全漏洞。

这些技能为你进行 Web 基础设施的快速初步安全评估奠定了坚实的基础。