使用 Nikto 进行 Kali 漏洞扫描

Kali LinuxBeginner
立即练习

介绍

在本实验中,你将学习在 Kali Linux 环境中使用 Nikto 这一强大的开源工具进行 Web 漏洞扫描的基础知识。目标是了解如何通过运行扫描、解读结果并保存报告以供进一步分析,从而识别 Web 服务器上的潜在安全问题。通过在 LabEx 虚拟机中的逐步练习,你将获得 Nikto 命令行界面的实际操作经验。本实验专为初学者设计,引导你在受控的容器环境中完成每个流程,建立 Web 安全评估的基础技能。

这是一个引导式实验,提供了逐步指令来帮助你学习和练习。请仔细遵循指令完成每个步骤并获得动手经验。历史数据表明,这是一个中级水平的实验,完成率为 65%。它获得了学习者 94% 的好评率。

设置环境并安装 Nikto

在第一步中,你将在 Kali Linux 容器中设置工作环境,并确保 Web 漏洞扫描器 Nikto 已安装并准备就绪。本实验在 LabEx 虚拟机中进行,当你打开终端时,你将自动连接到 Kali Linux 容器的 Shell。无需手动启动容器或进入 Shell;环境已经为你配置完毕。

让我们首先了解一下设置情况。LabEx 虚拟机运行在预装了 Docker 的独立云主机上,并且已经设置了一个自动运行的 Kali Linux 容器。你的所有操作都将在该容器的终端内进行。Nikto 是一个用于扫描 Web 服务器漏洞(如过时的软件或配置错误)的工具,在继续操作之前,我们需要确保它已安装。

首先,更新 Kali Linux 容器中的软件包列表,以确保你拥有可用软件的最新信息。在终端中运行以下命令:

apt update

此命令从配置的存储库中获取最新的软件包信息。完成此操作可能需要一点时间,你会看到显示进度的输出,例如下载软件包列表。示例输出如下所示:

Get:1 http://mirrors.cloud.aliyuncs.com/kali kali-rolling InRelease [30.9 kB]
Get:2 http://mirrors.cloud.aliyuncs.com/kali kali-rolling/main amd64 Packages [18.1 MB]
...
Fetched 18.5 MB in 5s (3,700 kB/s)
Reading package lists... Done

更新完成后,如果容器中尚未安装 Nikto,请进行安装。使用以下命令进行安装:

apt install -y nikto iputils-ping

-y 标志会自动确认安装,无需提示输入。此过程可能需要片刻时间,你会看到显示安装进度的输出,例如下载和设置软件包。示例输出可能是:

Reading package lists... Done
Building dependency tree... Done
...
Setting up nikto (1:2.1.5-3.1) ...

安装完成后,通过检查版本来验证 Nikto 是否已正确安装。运行此命令:

nikto -Version

此命令会显示已安装的 Nikto 版本,确认其已准备好使用。预期输出应类似于:

Nikto 2.5.0 (LW 2.5)

安装好 Nikto 后,你就可以进入接下来的步骤,使用它来扫描 Web 服务器了。这一步确保了你的环境已正确配置,并且后续任务所需的工具已准备就绪。

运行基础 Nikto Web 扫描

现在 Nikto 已安装在你的 Kali Linux 容器中,你将学习如何运行基础的 Web 漏洞扫描。这一步建立在之前环境设置的基础上,向你介绍如何使用 Nikto 识别 Web 服务器上的潜在安全问题。由于你在打开 LabEx 虚拟机的终端时已经处于 Kali Linux 容器的 Shell 中,因此无需手动启动或进入容器。

让我们了解一下基础的 Nikto 扫描会做什么。Nikto 会扫描目标 Web 服务器是否存在常见漏洞,例如可能被利用的过时软件版本或配置错误。在本实验中,我们将使用一个公开可访问的测试服务器 testphp.vulnweb.com,该服务器专为学习和练习漏洞扫描而设计。这确保了我们的扫描是以合乎道德且安全的方式进行的。

首先,使用 Nikto 对测试服务器运行基础扫描。在终端中输入以下命令:

nikto -h testphp.vulnweb.com

-h 选项指定要扫描的主机,在本例中为 testphp.vulnweb.com。根据网络状况和目标的配置,此扫描可能需要几分钟才能完成。在扫描期间,你将在终端中看到显示进度的输出。示例输出可能如下所示:

- Nikto v2.5.0
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
+ Start Time:         2025-04-21 07:29:12 (GMT0)
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
+ /: Retrieved x-powered-by header: PHP/5.6.40-38+ubuntu20.04.1+deb.sury.org+1.
...
---------------------------------------------------------------------------
+ 1 host(s) tested

在使用 nikto 扫描 testphp.vulnweb.com 时,你可能会遇到错误消息。这是正常现象;请关注关键信息。

此输出提供了有关目标的初始信息,例如其 IP 地址、主机名和端口。它还列出了潜在问题,如缺失的安全响应头或过时的组件。如果输出看起来很详细,请不要担心;这里的重点是运行扫描并观察过程。在接下来的步骤中,我们将更仔细地分析这些结果。

如果扫描未开始或未出现输出,请确保 LabEx 虚拟机内的互联网连接处于活动状态。你可以通过运行以下命令测试与目标的连通性:

ping -c 4 testphp.vulnweb.com

此命令向目标发送几个数据包以检查其是否可达。如果你看到响应,则说明服务器可以访问;如果没有,请重试扫描或检查 LabEx 虚拟机中的网络设置。

PING testphp.vulnweb.com (44.228.249.3) 56(84) bytes of data.
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=1 ttl=55 time=21.4 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=2 ttl=55 time=21.7 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=3 ttl=55 time=21.5 ms
64 bytes from ec2-44-228-249-3.us-west-2.compute.amazonaws.com (44.228.249.3): icmp_seq=4 ttl=55 time=21.5 ms

--- testphp.vulnweb.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 21.435/21.523/21.699/0.103 ms

这一步向你介绍了如何运行基础的 Nikto 扫描,为后续步骤中更具体的扫描和分析奠定了基础。你已经执行了扫描命令,并直接在 Kali Linux 容器的终端中观察了初始输出。

使用 Nikto 的调整选项进行针对性扫描

在之前执行的基础扫描之上,你现在将学习如何使用 Nikto 的调整(Tuning)选项执行更具针对性的扫描。Nikto 允许你将扫描重点放在特定类型的漏洞上,这在你寻找特定问题或希望减少扫描时间时非常有用。

在这一步中,你将学习如何在 Kali Linux 容器环境中使用 Nikto 的调整功能来定制你的扫描。

首先,让我们了解 Nikto 中有哪些可用的调整选项。你可以使用以下命令查看可用调整选项的完整列表:

nikto -h testphp.vulnweb.com -Display V

-Display V 选项显示详细输出,包括调整信息。在输出中,你会看到用数字和字母标记的不同测试类别。

现在,让我们运行一个针对常见文件相关漏洞的针对性扫描。执行以下命令:

nikto -h testphp.vulnweb.com -Tuning 2

-Tuning 2 选项专门测试文件泄露(File Disclosure)漏洞。此扫描可能需要几分钟才能完成,你将在终端中看到类似于以下的输出:

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
+ Scanning for File Upload vulnerabilities...
+ Multiple file upload fields found on login.php
...

你还可以组合多个调整选项。例如,要同时扫描文件泄露(2)和配置错误(9)漏洞,请使用:

nikto -h testphp.vulnweb.com -Tuning 2,9

这种组合扫描将检查这两类问题,让你在不运行完整扫描的情况下,对特定漏洞类型有更全面的了解。

如果扫描未能产生输出或遇到错误,请通过以下方式测试连通性,确保互联网连接处于活动状态:

ping -c 4 testphp.vulnweb.com

这一步帮助你理解了如何使用 Nikto 的调整选项来执行更具针对性的扫描,使你能够专注于特定的安全关注点。在接下来的步骤中,我们将探索更多增强漏洞扫描能力的 Nikto 功能。

自定义输出格式并保存扫描结果

在学习了如何使用 Nikto 执行针对性扫描之后,你现在将探索如何自定义输出格式并保存扫描结果,以便进行文档记录和分析。妥善记录你的发现是安全评估的一个关键环节,Nikto 提供了多种选项来格式化和保存你的扫描结果。

在这一步中,你将学习如何直接在 Kali Linux 容器的终端中生成不同格式的报告。

让我们首先检查 Nikto 提供的不同输出格式选项。最常见的格式有:

  1. Text(默认):纯文本输出
  2. HTML:格式化的 HTML 报告
  3. CSV:逗号分隔值,用于导入电子表格
  4. XML:结构化 XML 数据,用于自动化处理

要以默认文本格式保存扫描结果,请运行:

nikto -h testphp.vulnweb.com -o /root/nikto_text_report.txt

-o 选项指定输出文件路径。扫描完成后,通过查看文件内容来验证文件是否已创建:

cat /root/nikto_text_report.txt

要生成 HTML 报告(它提供了更具可读性和结构化的格式),请使用:

nikto -h testphp.vulnweb.com -Format htm -o /root/nikto_report.html

-Format htm 选项告诉 Nikto 将输出格式化为 HTML。虽然你不能直接在终端中查看 HTML 文件,但可以检查它是否已创建:

ls -l /root/nikto_report.html

对于需要导入到其他工具或电子表格的数据,你可以生成 CSV 格式的报告:

nikto -h testphp.vulnweb.com -Format csv -o /root/nikto_report.csv

扫描完成后,检查 CSV 文件:

head /root/nikto_report.csv

这将显示 CSV 文件的头几行,展示数据的结构方式。

这些不同的输出格式服务于不同的目的:

  • 文本报告易于在终端中阅读
  • HTML 报告视觉组织良好,适合与团队分享
  • CSV 和 XML 格式非常适合导入到其他安全工具或数据库中

通过学习如何自定义输出格式,你增强了有效记录和沟通发现结果的能力。

用于深度扫描的高级 Nikto 选项

在最后一步中,你将探索一些允许进行更深入、更全面扫描的高级 Nikto 选项。这些功能可以帮助你发现隐藏的漏洞,并提供有关潜在安全问题的更多上下文。这建立在之前步骤的知识基础上,重点关注 Kali Linux 容器环境中 Nikto 的高级功能。

让我们探索 Nikto 中一些最有用高级选项:

首先,让我们使用 -evasion(规避)技术来绕过简单的入侵检测系统。这在测试安全控制措施时非常有用:

nikto -h testphp.vulnweb.com -evasion 1

-evasion 1 选项使用随机的大小写字符对 URL 进行编码。你可能会看到类似于以下的输出:

- Nikto v2.1.5
---------------------------------------------------------------------------
+ Target IP:          44.228.249.3
+ Target Hostname:    testphp.vulnweb.com
+ Target Port:        80
+ Evasion technique:  Random URI encoding (non-UTF8)
---------------------------------------------------------------------------
+ Server: nginx/1.19.0
...

接下来,让我们使用特定的端口和协议进行扫描。虽然我们一直在扫描默认的 HTTP 端口 80,但你可以指定不同的端口:

nikto -h testphp.vulnweb.com -port 443 -ssl

-port 443 选项针对 443 端口,而 -ssl 告诉 Nikto 使用 HTTPS 协议。对于这个测试服务器,这可能不会返回结果,因为它可能没有启用 HTTPS,但这演示了如何扫描安全的 Web 服务。

对于需要身份验证的站点,Nikto 提供了处理基础 HTTP 身份验证的选项:

nikto -h testphp.vulnweb.com -id admin:password

-id 选项允许你以 用户名:密码 的格式指定凭据。对于测试服务器,这些凭据不起作用,但它展示了如何配置经过身份验证的扫描。

你还可以增加扫描的详细程度以获取更详细的信息:

nikto -h testphp.vulnweb.com -Display V -o /root/nikto_verbose_report.txt

-Display V 选项提供详细输出,显示有关执行的每个测试的更多细节。使用 -o 将其保存到文件中,可以为你提供全面的扫描文档。

最后,让我们结合几个选项进行一次综合扫描:

nikto -h testphp.vulnweb.com -Tuning x -no404 -Format htm -o /root/final_report.html

在此命令中:

  • -Tuning x 测试除拒绝服务(DoS)漏洞之外的所有内容
  • -no404 通过不报告 404 错误来减少误报
  • -Format htm 以 HTML 格式保存报告
  • -o 指定输出文件

这一步向你介绍了几种高级 Nikto 选项,扩展了你的 Web 漏洞扫描能力。通过结合这些不同的技术,你可以执行彻底的安全评估,并生成根据你的特定需求定制的综合报告。

总结

在本实验中,你学习了如何在 Kali Linux 环境中使用强大的 Web 漏洞扫描器 Nikto。你从设置环境和安装 Nikto 开始,逐步掌握了日益复杂的扫描技术。

你首先通过基础扫描识别了测试服务器上的常见漏洞,然后学习了如何使用 Nikto 的调整选项进行针对性扫描,以专注于特定类型的漏洞。你探索了不同的输出格式,包括文本、HTML 和 CSV,以便有效地记录和沟通你的发现。

最后,你发现了用于深度扫描的高级选项,包括规避技术、端口和协议规范、身份验证处理以及详细输出。这些技能为进行 Web 安全评估奠定了坚实的基础,无论是为了教育目的还是专业的安全测试。

在本实验中获得的动手经验使你掌握了 Nikto 命令行界面的实际知识,并能够根据你的特定要求定制扫描。对于任何对 Web 安全和漏洞评估感兴趣的人来说,这些都是必不可少的技能。