使用 Nikto 进行 Kali 漏洞扫描

Kali LinuxKali LinuxBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

介绍

在这个实验中,你将学习使用 Nikto 进行 Web 漏洞扫描的要点。Nikto 是一款强大的开源工具,我们将会在 Kali Linux 环境中使用它。目标是了解如何通过运行扫描、解读结果以及保存报告来识别 Web 服务器上潜在的安全问题,以便进行进一步的分析。通过 LabEx VM 中的逐步练习,你将获得 Nikto 命令行界面的实践经验。这个实验是为初学者设计的,它将在一个受控的容器环境中指导你完成每个过程,从而建立 Web 安全评估的基础技能。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL kali(("Kali")) -.-> kali/KaliGroup(["Kali"]) kali/KaliGroup -.-> kali/term_ops("Kali Terminal") kali/KaliGroup -.-> kali/file_ctrl("File Management") kali/KaliGroup -.-> kali/pkg_ops("Package Management") kali/KaliGroup -.-> kali/web_ctrl("Web Services") kali/KaliGroup -.-> kali/vuln_scan("Vulnerability Scanning") kali/KaliGroup -.-> kali/nikto_ops("Nikto Scanner") subgraph Lab Skills kali/term_ops -.-> lab-552301{{"使用 Nikto 进行 Kali 漏洞扫描"}} kali/file_ctrl -.-> lab-552301{{"使用 Nikto 进行 Kali 漏洞扫描"}} kali/pkg_ops -.-> lab-552301{{"使用 Nikto 进行 Kali 漏洞扫描"}} kali/web_ctrl -.-> lab-552301{{"使用 Nikto 进行 Kali 漏洞扫描"}} kali/vuln_scan -.-> lab-552301{{"使用 Nikto 进行 Kali 漏洞扫描"}} kali/nikto_ops -.-> lab-552301{{"使用 Nikto 进行 Kali 漏洞扫描"}} end

设置环境并安装 Nikto

在第一步中,你将在 Kali Linux 容器中设置你的工作环境,并确保 Web 漏洞扫描器 Nikto 已安装并可以使用。这个实验在 LabEx VM 中进行,当你打开终端时,你将自动连接到 Kali Linux 容器的 shell。无需手动启动容器或进入 shell;环境已经为你配置好了。

让我们从了解设置开始。LabEx VM 运行在一个独立的云主机上,预装了 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 VM 中打开终端时已经进入了 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

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

如果扫描没有启动或没有出现输出,请确保你的互联网连接在 LabEx VM 中处于活动状态。你可以通过运行以下命令来测试与目标的连接:

ping -c 4 testphp.vulnweb.com

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

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 选项专门测试文件泄露漏洞。这个扫描可能需要几分钟才能完成,你将在终端中看到类似于以下的输出:

- 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. 文本(默认):纯文本输出
  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 技术来绕过简单的入侵检测系统(Intrusion Detection System, IDS)。这在测试安全控制时非常有用:

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 选项允许你以 username:password 格式指定凭据。对于测试服务器,这些凭据将不起作用,但它展示了如何配置经过身份验证的扫描。

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

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 环境中使用 Nikto,一个强大的 Web 漏洞扫描器。你首先设置环境并安装 Nikto,然后逐步学习越来越复杂的扫描技术。

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

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

在这个实验中获得的实践经验使你掌握了 Nikto 命令行界面的实用知识,以及根据你的特定要求自定义扫描的能力。对于任何对 Web 安全和漏洞评估感兴趣的人来说,这些都是必不可少的技能。