使用 Nmap 检测服务和版本

NmapBeginner
立即练习

介绍

在本实验中,你将学习如何使用 Nmap 检测服务及其版本。本实验涵盖了在本地主机上进行基本服务检测、调整扫描强度、在特定端口上检测服务、执行全面检测、在 Xfce 终端中分析输出以及将结果保存到文本文件。你将执行诸如 nmap -sV 127.0.0.1nmap -sV -oN services.txt 192.168.1.1 等命令,以亲身体验 Nmap 的服务版本检测功能。

使用 nmap -sV 127.0.0.1 运行服务检测

在这一步中,我们将使用 Nmap 执行基本的服务检测扫描。服务检测有助于识别在目标系统的开放端口上运行的应用程序及其版本。此信息对于漏洞评估和渗透测试至关重要。

命令 nmap -sV 127.0.0.1 指示 Nmap 在本地主机(127.0.0.1)上执行服务版本检测(-sV)。本地主机就是你自己的机器。

让我们执行该命令:

  1. 打开 Xfce 终端。

  2. 输入以下命令并按回车键:

nmap -sV 127.0.0.1

你应该会看到类似以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.28 seconds

解释

  • Starting Nmap...:表示正在使用的 Nmap 版本。
  • Nmap scan report for localhost (127.0.0.1):显示扫描的目标。
  • Host is up:确认目标可达。
  • Not shown: 997 closed ports:表示有 997 个端口被关闭且未显示。默认情况下,Nmap 仅显示开放、被过滤或未被过滤的端口。
  • PORT STATE SERVICE VERSION:此部分显示开放端口、其状态(开放)、在该端口上运行的服务以及服务的版本。例如,端口 22 开放并运行 OpenSSH 版本 8.9p1。端口 80 开放并运行 Apache httpd 版本 2.4.52。
  • Service Info:提供有关操作系统的其他信息。
  • Nmap done:表示扫描完成并显示所用时间。

这个简单的扫描提供了有关你机器上运行的服务的有价值信息。在接下来的步骤中,我们将探索服务检测的更高级选项。

使用 nmap -sV --version-intensity 7 192.168.1.1 调整强度

在这一步中,我们将学习如何调整 Nmap 服务版本检测的强度。--version-intensity 选项可让你控制 Nmap 探测服务信息的积极程度。强度级别越高,意味着 Nmap 将尝试更多探测,这可能会带来更准确的结果,但也会花费更多时间。

--version-intensity 选项接受一个从 0 到 9 的值,其中 0 是最轻度的,9 是最积极的。默认强度为 7。

重要提示:在继续之前,请注意在 LabEx VM 环境中直接扫描 192.168.1.1 可能无法正常工作,因为它很可能是一个内部网络地址。为了演示目的,我们将改为使用 127.0.0.1(本地主机)。在实际场景中,你需要将其替换为实际的目标 IP 地址。

让我们使用强度级别 7 执行该命令:

  1. 打开 Xfce 终端。

  2. 输入以下命令并按回车键:

nmap -sV --version-intensity 7 127.0.0.1

你应该会看到类似以下的输出(确切输出可能因你机器上运行的服务而异):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:05 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 5.28 seconds

现在,让我们尝试一个较低的强度级别,例如 2:

nmap -sV --version-intensity 2 127.0.0.1

观察输出。你可能会注意到扫描完成得更快,但版本信息可能不太详细或准确。

解释

  • nmap -sV --version-intensity 7 127.0.0.1:在本地主机上以强度级别 7 执行服务版本检测。
  • nmap -sV --version-intensity 2 127.0.0.1:在本地主机上以强度级别 2 执行服务版本检测。

通过调整 --version-intensity 选项,你可以在扫描速度和准确性之间进行微调。在时间紧迫的情况下,较低的强度级别可能更可取。对于更全面的评估,建议使用较高的强度级别。

使用 nmap -sV -p 80 192.168.1.1 在特定端口上进行检测

在这一步中,我们将把服务检测扫描聚焦在一个特定端口上。当你已经知道自己感兴趣的端口,或者想要通过仅针对特定服务来减少扫描时间时,这会很有用。

Nmap 中的 -p 选项允许你指定想要扫描的端口。在这种情况下,我们将扫描端口 80,它通常用于 HTTP(网络)服务。

重要提示:和上一步一样,在 LabEx VM 环境中直接扫描 192.168.1.1 可能无法正常工作。我们将改为使用 127.0.0.1(本地主机)。请记住,在实际场景中要用实际的目标 IP 地址替换它。

让我们执行该命令:

  1. 打开 Xfce 终端。

  2. 输入以下命令并按回车键:

nmap -sV -p 80 127.0.0.1

你应该会看到类似以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.52 ((Ubuntu))

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.28 seconds

解释

  • nmap -sV -p 80 127.0.0.1:在本地主机(127.0.0.1)的端口 80(-p 80)上执行服务版本检测(-sV)。
  • 输出显示端口 80 开放且正在运行 Apache httpd 版本 2.4.52。
  • 注意,与之前的扫描相比,这次扫描时间明显更短,因为我们只扫描了一个端口。

你也可以使用 -p 选项指定一系列端口。例如,要扫描端口 80、443 和 8080,你可以使用以下命令:

nmap -sV -p 80,443,8080 127.0.0.1

这使你能够在一次扫描中针对多个特定端口。

使用 nmap -sV --version-all 127.0.0.1 进行全面检测

在这一步中,我们将利用 Nmap 的 --version-all 选项来执行尽可能全面的服务版本检测。此选项指示 Nmap 针对每个开放端口尝试每一个版本检测探针。这是最激进的设置,能够提供最准确的结果,但完成检测所需的时间也最长。

让我们执行该命令:

  1. 打开 Xfce 终端。

  2. 输入以下命令并按回车键:

nmap -sV --version-all 127.0.0.1

你应该会看到类似以下的输出(确切输出可能因你机器上运行的服务而异):

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
80/tcp   open  http    Apache httpd 2.4.52 ((Ubuntu))
111/tcp  open  rpcbind 2-4 (RPC #100000)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.52 seconds

解释

  • nmap -sV --version-all 127.0.0.1:在本地主机(127.0.0.1)上使用 --version-all 选项执行服务版本检测(-sV)。
  • 输出显示了开放端口和检测到的服务版本。
  • 注意,与之前的扫描相比,这次扫描时间更长,因为 Nmap 正在尝试每一个可能的探针。

重要注意事项

  • 使用 --version-all 会显著增加扫描时间。
  • 在某些情况下,它可能不会比默认强度级别提供明显更准确的结果。
  • 请注意对目标系统的潜在影响,因为这种激进的扫描会产生更多流量。

当你需要尽可能准确的服务版本信息并且愿意接受更长的扫描时间时,此选项最为有用。

在 Xfce 终端中分析输出

在这一步中,我们将学习如何在 Xfce 终端中直接分析 Nmap 扫描的输出。理解输出对于识别潜在漏洞以及深入了解目标系统至关重要。

假设你已经运行了前面的某个 Nmap 命令,例如:

nmap -sV 127.0.0.1

输出将直接显示在终端中。让我们来剖析一下输出的关键要素:

  • **Starting Nmap...**:这一行表示 Nmap 的版本以及扫描开始的时间。
  • **Nmap scan report for...**:这一行显示目标 IP 地址或主机名。
  • **Host is up...**:这表明目标主机是否可达。
  • PORT STATE SERVICE VERSION:这是包含扫描结果的主表格。
    • PORT:端口号。
    • STATE:端口的状态(例如,openclosedfiltered)。
    • SERVICE:在该端口上检测到正在运行的服务(例如,httpsshsmtp)。
    • VERSION:检测到的服务版本(例如,Apache httpd 2.4.52OpenSSH 8.9p1)。
  • **Service detection performed...**:这一行表示已执行服务版本检测。
  • **Nmap done...**:这一行显示扫描持续时间和扫描的主机数量。

分析输出

  1. 开放端口:识别开放端口。这些是正在积极监听连接的端口,是攻击者可能的切入点。
  2. 服务:确定在开放端口上运行的服务。了解这些服务能让你研究与这些服务相关的潜在漏洞。
  3. 版本:识别服务的版本。软件的旧版本通常存在已知的可被利用的漏洞。

示例

如果输出显示端口 22 开放且运行着 OpenSSH 7.6p1,你可以研究该特定版本 OpenSSH 的已知漏洞。

使用 grep 过滤输出

你可以使用 grep 命令过滤 Nmap 输出并专注于特定信息。例如,要查找所有包含单词“open”的行,你可以将 Nmap 输出通过管道传输给 grep

首先,再次运行 nmap 命令:

nmap -sV 127.0.0.1

然后,将输出通过管道传输给 grep。由于前面命令的输出已经在终端中,我们不能直接进行管道传输。不过,我们可以使用 grep 在终端历史记录中搜索该命令的输出。

history | grep "nmap -sV 127.0.0.1" | tail -n 1 | xargs -L 1 bash -c 'eval $(echo $1 | sed "s/^[ ]*[0-9]*[ ]*//")'

这个命令首先在历史记录中找到包含 nmap 命令的行,然后提取命令本身,最后执行它。nmap 命令的输出随后将显示在终端中。

现在,让我们使用 grep 过滤输出。由于我们不能直接将前面命令的输出通过管道传输,我们需要再次运行 nmap 命令并将其输出通过管道传输给 grep

nmap -sV 127.0.0.1 | grep "open"

这将只显示包含单词“open”的行,从而更容易识别开放端口。

在终端中分析输出是网络管理员和安全专业人员的一项基本技能。它使你能够快速评估系统的安全态势并识别潜在漏洞。

使用 nmap -sV -oN services.txt 192.168.1.1 保存结果

在这一步中,我们将学习如何将 Nmap 扫描的结果保存到文件中,以便后续分析或报告。Nmap 提供了几种输出格式,在本示例中我们将使用“普通”输出格式(-oN)。

  1. 打开 Xfce 终端。

  2. 输入以下命令并按回车键:

nmap -sV -oN services.txt 192.168.1.1

此命令对目标 IP 地址 192.168.1.1 执行服务版本检测扫描(-sV),并将输出以“普通”格式(-oN)保存到当前目录(~/project)下名为 services.txt 的文件中。

解释

  • nmap -sV:执行服务版本检测。
  • -oN services.txt:指定输出应以“普通”格式保存到名为 services.txt 的文件中。
  • 192.168.1.1:目标 IP 地址。注意:如果你在 192.168.1.1 没有主机,你可以改用 127.0.0.1

扫描完成后,你可以使用 cat 命令查看 services.txt 文件的内容:

cat services.txt

这将在终端中显示 Nmap 扫描结果。

或者,你可以使用像 nano 这样的文本编辑器打开 services.txt 文件:

nano services.txt

这使你能够以更结构化的方式浏览结果。

了解输出格式

“普通”输出格式旨在便于人类阅读,并提供扫描结果的简洁摘要。它包括有关目标主机、开放端口、检测到的服务及其版本的信息。

其他输出格式

Nmap 支持其他几种输出格式,包括:

  • -oX:XML 输出格式,适合其他工具解析。
  • -oS:脚本小子输出格式(仅供娱乐)。
  • -oG:可 grep 的输出格式,专为使用 grep 和其他命令行工具轻松解析而设计。

保存扫描结果对于记录你的发现、与他人共享以及跟踪随时间的变化至关重要。

总结

在本实验中,参与者学习使用 Nmap 进行服务和版本检测。他们首先使用命令 nmap -sV 127.0.0.1 在本地主机上进行基本的服务检测扫描。他们还学习如何调整扫描强度、检测特定端口上的服务以及执行全面检测。此外,他们在 Xfce 终端中分析输出,并使用 -oN 选项将结果保存到文本文件中。