在 Nmap 中结合操作系统和服务检测

NmapBeginner
立即练习

介绍

在本实验中,我们将学习如何在 Nmap 中结合操作系统和服务检测,以收集有关目标机器的全面信息。我们将使用 Nmap 的 -O-sV 选项来识别在目标 IP 地址(如 192.168.1.1)上运行的操作系统和服务版本。

本实验包括运行组合扫描、指定目标端口、增加详细程度、将结果保存到文件以及在 Xfce 终端中分析输出的步骤。我们还将把组合扫描结果与单独扫描结果进行比较,以了解这种方法的好处。请记住,仅扫描您自己拥有或有权扫描的网络。

使用 nmap -O -sV 192.168.1.1 运行组合扫描

在这一步中,我们将使用 Nmap 执行一次组合扫描,以识别目标机器上运行的操作系统和服务版本。这是一种收集有关网络及其设备信息的强大技术。

Nmap 是一个多功能的网络扫描工具。此步骤中使用的选项如下:

  • -O:启用操作系统检测。Nmap 通过分析目标机器的网络响应来尝试确定其操作系统。
  • -sV:启用服务版本检测。Nmap 探测开放端口以确定应用程序名称和版本号。
  • 192.168.1.1:这是目标 IP 地址。将其替换为你要扫描的机器的实际 IP 地址。如果你没有特定目标,可以使用你自己机器的 IP 地址或像 scanme.nmap.org 这样的测试 IP。不过,对于本实验,我们假设 192.168.1.1 是你网络上的有效目标。如果不是,你需要替换为有效的 IP 地址。

在运行扫描之前,重要的是要明白未经授权扫描网络是非法的。仅扫描你自己拥有或已获得明确授权可扫描的网络。

现在,让我们执行组合扫描。打开你的 Xfce 终端。

  1. 执行以下命令:
sudo nmap -O -sV 192.168.1.1

你可能会被提示输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将显示 Nmap 在探测目标机器时的进度。它将尝试识别操作系统以及在开放端口上运行的服务版本。

示例输出(实际输出将因目标机器而异):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for 192.168.1.1
Host is up (0.0012s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu) OpenSSL 1.1.1)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

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

此输出表明 Nmap 将目标识别为运行 Linux 操作系统,并检测到了 SSH、HTTP 和 HTTPS 服务的版本。

使用 nmap -O -sV -p 22,80 127.0.0.1 扫描特定端口

在这一步中,我们将重点使用 Nmap 扫描特定端口。当你想将扫描范围缩小到最有可能运行有趣服务的端口时,这会很有用。

此步骤中使用的选项如下:

  • -O:启用操作系统检测。
  • -sV:启用服务版本检测。
  • -p 22,80:指定要扫描的端口。在这种情况下,我们正在扫描端口 22(SSH)和端口 80(HTTP)。你可以指定单个端口、端口范围(例如 1-100)或用逗号分隔的端口列表。
  • 127.0.0.1:这是回环地址,指的是你自己的机器。

扫描特定端口可以显著减少扫描时间,并更轻松地识别目标机器上运行的服务。

现在,让我们执行扫描。打开你的 Xfce 终端。

  1. 执行以下命令:
sudo nmap -O -sV -p 22,80 127.0.0.1

你可能会被提示输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将显示 Nmap 在探测本地机器上的端口 22 和 80 时的进度。它将尝试识别操作系统以及在这些端口上运行的服务版本。

示例输出(实际输出将因你的系统配置而异):

Starting Nmap 7.80 ( https://nmap.org )
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000047s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 0 hops

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

此输出表明 Nmap 在端口 22 上识别出了 OpenSSH,在端口 80 上识别出了 Apache httpd。操作系统检测还提供了有关 Linux 内核版本的信息。

使用 nmap -v -O -sV 192.168.1.1 添加详细程度

在这一步中,我们将为 Nmap 扫描添加详细输出。详细输出会提供有关扫描过程的更多详细信息,这有助于故障排查或理解 Nmap 的工作方式。

此步骤中使用的选项如下:

  • -v:启用详细模式。此选项会增加扫描期间显示的信息量。你可以使用 -vv 以获得更多详细信息。
  • -O:启用操作系统检测。
  • -sV:启用服务版本检测。
  • 192.168.1.1:这是目标 IP 地址。与第一步一样,将其替换为你要扫描的机器的实际 IP 地址。如果不是,你需要替换为有效的 IP 地址。

详细模式有助于确切了解 Nmap 正在执行的操作,包括它发送的探测请求和接收到的响应。

现在,让我们执行带有详细输出的扫描。打开你的 Xfce 终端。

  1. 执行以下命令:
sudo nmap -v -O -sV 192.168.1.1

你可能会被提示输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将比之前的扫描更详细。你将看到有关扫描不同阶段的信息,例如主机发现、端口扫描和服务版本检测。

示例输出(实际输出将因目标机器和网络条件而异):

Starting Nmap 7.80 ( https://nmap.org )
NSE: Loaded 151 scripts for scanning.
Initiating Ping Scan at 14:35
Scanning 192.168.1.1 [4 ports]
Completed Ping Scan at 14:35, 0.00s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 14:35
Completed Parallel DNS resolution of 1 host. at 14:35, 0.00s elapsed
Initiating SYN Stealth Scan at 14:35
Scanning 192.168.1.1 [1000 ports]
Discovered open port 22/tcp on 192.168.1.1
Discovered open port 80/tcp on 192.168.1.1
Discovered open port 443/tcp on 192.168.1.1
Completed SYN Stealth Scan at 14:35, 0.12s elapsed (1000 total ports)
Initiating Service scan at 14:35
Scanning 3 services on 192.168.1.1
Completed Service scan at 14:35, 6.23s elapsed (3 services total)
Initiating OS detection (try #1) against 192.168.1.1
... (更多输出) ...
Nmap scan report for 192.168.1.1
Host is up (0.00088s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (protocol 2.0)
80/tcp  open  http     Apache httpd 2.4.29 ((Ubuntu))
443/tcp open  ssl/http Apache httpd 2.4.29 ((Ubuntu) OpenSSL 1.1.1)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 1 hop

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

注意有关扫描阶段的其他信息,例如“Initiating Ping Scan”和“Initiating Service scan”。这有助于理解扫描过程并识别任何潜在问题。

使用 nmap -O -sV -oN os_service.txt 127.0.0.1 保存合并后的结果

在这一步中,我们将把 Nmap 扫描的结果保存到一个文件中。这对于后续分析或将结果分享给他人很有用。

此步骤中使用的选项如下:

  • -O:启用操作系统检测。
  • -sV:启用服务版本检测。
  • -oN os_service.txt:指定输出文件和格式。-oN 指定普通输出,即人类可读的格式。输出将保存到你当前目录(~/project)下的 os_service.txt 文件中。
  • 127.0.0.1:这是回环地址,指的是你自己的机器。

将输出保存到文件中,你可以稍后查看结果而无需重新运行扫描。这也便于比较不同扫描的结果。

现在,让我们执行扫描并保存结果。打开你的 Xfce 终端。

  1. 执行以下命令:
sudo nmap -O -sV -oN os_service.txt 127.0.0.1

你可能会被提示输入密码。由于 labex 用户具有无密码的 sudo 权限,只需按 Enter 即可。

输出将像往常一样显示在屏幕上,但它也会保存到你 ~/project 目录下的 os_service.txt 文件中。

  1. 要验证文件是否已创建并包含扫描结果,使用 cat 命令:
cat os_service.txt

这将在终端中显示 os_service.txt 文件的内容。你应该会看到 Nmap 扫描结果,包括开放端口、服务和操作系统信息。

示例输出(实际输出将因你的系统配置而异):

## Nmap 7.80 scan initiated Mon Aug  8 14:42:30 2022
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000047s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 0 hops

## Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds

你也可以使用 ls -l 命令检查文件大小和修改日期:

ls -l os_service.txt

这将显示文件的权限、大小和最后修改时间。

在 Xfce 终端中分析操作系统和服务输出

在这一步中,我们将分析上一步保存的 Nmap 扫描输出(os_service.txt)。我们将重点理解 Nmap 提供的有关目标操作系统和正在运行的服务的信息。

os_service.txt 文件包含扫描结果的人类可读报告。让我们来查看关键部分:

  1. 开放端口:此部分列出目标机器上开放的端口。开放端口表明有服务正在该端口监听连接。
  2. 服务:对于每个开放端口,Nmap 会尝试识别正在运行的服务。此信息显示在“SERVICE”列中。
  3. 版本:Nmap 还会尝试确定服务的版本。此信息显示在“VERSION”列中。了解服务版本对于识别潜在漏洞至关重要。
  4. 操作系统详细信息:Nmap 会尝试识别目标机器上运行的操作系统。此信息显示在“OS details”部分。

现在,让我们在 Xfce 终端中分析输出。

  1. 使用 cat 命令打开 os_service.txt 文件:
cat os_service.txt

查看输出。你应该会看到类似于以下内容(实际输出将因你的系统配置而异):

## Nmap 7.80 scan initiated Mon Aug  8 14:42:30 2022
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000047s latency).
Not shown: 998 closed ports
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (protocol 2.0)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

OS details: Linux 3.2 - 4.9
Network Distance: 0 hops

## Nmap done: 1 IP address (1 host up) scanned in 5.23 seconds
  1. 分析输出
    • 端口 22/tcp:此端口开放并运行 SSH 服务(OpenSSH 8.2p1 Ubuntu 4ubuntu0.4)。SSH 用于对机器进行安全的远程访问。
    • 端口 80/tcp:此端口开放并运行 HTTP 服务(Apache httpd 2.4.41 ((Ubuntu)))。HTTP 用于提供网页服务。
    • 操作系统详细信息:Nmap 已识别操作系统为 Linux(Linux 3.2 - 4.9)。

通过分析此输出,你可以深入了解目标机器的配置和潜在漏洞。例如,了解服务版本可让你搜索与这些版本相关的已知漏洞。

此步骤演示了如何解释 Nmap 扫描的输出以识别开放端口、正在运行的服务和操作系统。此信息对于安全评估和渗透测试至关重要。

在 Xfce 终端中与单独扫描结果进行比较

在这一步中,我们将把综合扫描结果(os_service.txt)与你通过单独运行操作系统检测和服务版本检测扫描所得到的结果进行比较。这将帮助你理解使用综合扫描的好处以及它们如何节省时间。

为了有效地做到这一点,我们将通过使用 grepos_service.txt 文件中提取相关信息来模拟单独扫描。这样就无需重新运行扫描,从而节省时间和资源。

  1. 模拟操作系统检测扫描

我们可以通过在 os_service.txt 文件中搜索“操作系统详细信息”部分来模拟操作系统检测扫描。

执行以下命令:

grep "OS details" os_service.txt

这将显示包含操作系统详细信息的行,类似于:

操作系统详细信息:Linux 3.2 - 4.9
  1. 模拟服务版本检测扫描

我们可以通过搜索包含服务和版本信息的行来模拟服务版本检测扫描。

执行以下命令:

grep -E "[0-9]+/tcp open" os_service.txt

此命令使用 grep -E 来启用扩展正则表达式。模式 [0-9]+/tcp open 搜索以数字(代表端口号)开头,后跟“/tcp open”的行。这将提取包含服务和版本信息的行,类似于:

22/tcp 开放  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4(协议 2.0)
80/tcp 开放  http    Apache httpd 2.4.41((Ubuntu))
  1. 比较结果

现在,将 grep 命令的输出与 os_service.txt 中的完整输出进行比较。你会注意到综合扫描在一次扫描中提供了所有相同的信息。

综合扫描(nmap -O -sV)效率更高,因为它在一次扫描中同时执行操作系统检测和服务版本检测。这减少了总体扫描时间和网络流量。

总之,此步骤演示了如何将 Nmap 综合扫描的结果与单独扫描的结果进行比较。通过使用综合扫描,你可以在节省时间和资源的同时,仍然获得有关目标的全面信息。

总结

在这个实验中,我们使用 Nmap 执行了操作系统和服务版本的综合检测。关键要点是一起使用 -O-sV 标志来识别目标机器上运行的操作系统和服务版本。这能让你更全面地了解目标的配置。

我们还学习了如何指定目标 IP 地址、使用 -v 标志增加详细程度,以及使用 -oN 选项将扫描结果保存到文件中。此外,我们练习了在 Xfce 终端中分析输出,并将结果与单独扫描进行比较,以了解综合扫描的有效性。