使用 Nikto 运行基础 Web 服务器扫描

Kali LinuxBeginner
立即练习

引言

Nikto 是一个开源的 Web 服务器扫描器,它会对 Web 服务器进行全面的测试,检查超过 6700 个潜在危险文件/程序,检查超过 1250 个服务器的过时版本,以及超过 270 个服务器的版本特定问题。它还会检查服务器配置项,例如多个索引文件和 HTTP 服务器选项的存在。

在本实验中,你将学习使用 Nikto 进行基本扫描的基础知识。我们将从设置一个简单的本地 Web 服务器作为目标开始,然后使用 Nikto 对其进行扫描并分析结果。

确定目标 IP 地址或主机名

在此步骤中,我们将确定并确认目标 Web 服务器的地址。在运行任何扫描之前,你必须知道目标的 IP 地址或主机名。在本实验中,设置脚本已经启动了一个在你的本地机器上运行的简单 Web 服务器。

在网络上下文中,你自己的机器可以被称为主机名 localhost 或 IP 地址 127.0.0.1。这个特殊的地址是一个“环回”(loopback)地址,意味着它总是指向本地机器。

让我们验证一下我们的 Web 服务器是否正在运行并且可以访问。我们可以使用 curl 命令向本地服务器发送请求。服务器运行在端口 8000 上。

在你的终端中执行以下命令:

curl http://localhost:8000

你应该会看到我们简单网页的 HTML 内容,这证实了服务器是活动的,并且已准备好进行扫描。

<h1>Welcome to the Test Server</h1>

现在我们已经确认了目标是 localhost:8000,可以继续下一步了。

使用 -h 标志构建基本扫描命令

在此步骤中,我们将学习如何构建一个基本的 Nikto 扫描命令。Nikto 有许多选项,但最基本的一个是指定目标主机。

-h-host 标志用于告知 Nikto 要扫描哪个服务器。为了熟悉这个和其他选项,你可以查看 Nikto 的帮助菜单。

运行以下命令显示帮助信息:

nikto -Help

输出内容会很长,列出了所有可用的选项。滚动浏览它,或者使用终端的搜索功能来查找 -h 选项。你将看到一个类似的描述:

...
-h, -host       目标主机/IP/SSL 名称
...

由于我们的服务器没有运行在标准的 HTTP 端口(80)上,我们还需要指定端口号。我们可以使用 -p-port 标志来完成此操作。

基于此,扫描我们本地服务器在端口 8000 上的命令将是 nikto -h localhost -p 8000。我们将在下一步执行此命令。

对目标服务器执行扫描

在此步骤中,你将使用我们构建的命令执行 Nikto 扫描。这将启动扫描过程,Nikto 会向目标服务器发送一系列请求,以探测潜在问题。

现在,对你的本地 Web 服务器运行扫描。

nikto -h localhost -p 8000

执行命令后,Nikto 将开始扫描。它首先会显示一些关于目标的基本信息,然后开始运行其测试。该过程可能需要几分钟才能完成。你将实时看到结果直接打印到你的终端。

观察扫描过程中的实时输出

在此步骤中,我们将检查 Nikto 扫描生成的输出。扫描运行时,Nikto 会报告其发现。每个发现通常都以加号(+)为前缀。

上一步的输出应该与以下内容类似。请注意,版本号和时间会有所不同。

- Nikto v2.5.0
---------------------------------------------------------------------------
+ 目标 IP:          127.0.0.1
+ 目标主机名:    localhost
+ 目标端口:        8000
+ 开始时间:         2023-10-27 10:30:00 (GMT0)
---------------------------------------------------------------------------
+ 服务器: SimpleHTTP/0.6 Python/3.10.12
+ 未设置防点击劫持 X-Frame-Options 标头。
+ 未定义 X-XSS-Protection 标头。此标头可以提示用户代理防范某些形式的 XSS
+ 未设置 X-Content-Type-Options 标头。这可能允许用户代理以不同于 MIME 类型的方式渲染网站内容
+ 未找到 CGI 目录(使用 '-C all' 强制检查所有可能的目录)
+ 允许的 HTTP 方法: GET, HEAD, OPTIONS
+ OSVDB-3233: /: HTTP TRACE 方法已激活,表明主机易受 XST 攻击
...
+ 已测试 1 个主机

花点时间阅读输出内容。你可以看到 Nikto 识别了服务器软件,检查了重要的安全标头(如 X-Frame-Options),列出了允许的 HTTP 方法,并报告了潜在的漏洞。这些信息对于理解服务器的安全状况至关重要。

识别服务器 Banner 和版本信息

在此步骤中,我们将重点关注 Nikto 提供的一个最重要信息:服务器 Banner。服务器 Banner 是 Web 服务器在其响应标头中发送的一个文本字符串,通常用于标识服务器软件及其版本。

攻击者利用这些信息来查找与特定软件版本相关的已知漏洞。在你上一步的扫描结果中,你应该会看到一行以 + Server: 开头的。

+ Server: SimpleHTTP/0.6 Python/3.10.12

这一行告诉我们,Web 服务器是 SimpleHTTP/0.6,运行在 Python/3.10.12 上。

为了练习从较大的输出中分离特定信息,你可以重新运行扫描并使用 grep 命令过滤结果,只显示包含“Server”的行。

执行以下命令:

nikto -h localhost -p 8000 | grep Server

此命令将 Nikto 的输出通过管道传递给 grep,然后 grep 会过滤并仅显示包含“Server”一词的行。这是一种解析大型日志文件或命令输出的非常有用的技术。你的输出应该是识别服务器的单行。

+ Server: SimpleHTTP/0.6 Python/3.10.12

总结

在此实验中,你已成功使用 Nikto 执行了基本的 Web 服务器扫描。你学会了如何识别目标,使用 -h-p 标志构建基本的扫描命令并执行它。你还练习了观察实时输出,并使用 grep 等工具分离特定信息,例如服务器 Banner。

这仅仅是 Nikto 功能的开始。它拥有大量的选项,可用于更具针对性和深入的扫描,包括 SSL 检查、漏洞数据库查询以及各种输出格式。你现在已经掌握了探索这些高级功能并提升你的 Web 安全测试技能的基础知识。