使用 Nmap 执行 UDP 扫描

NmapNmapBeginner
立即练习

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

简介

在本实验中,你将学习如何使用 Nmap 执行 UDP 扫描。你将首先使用 -sU 选项对目标 IP 地址执行基本的 UDP 扫描。然后,你将扫描特定的 UDP 端口,组合 UDP 和 TCP 扫描,并添加版本检测。最后,你将在 Xfce 终端中查看 UDP 扫描结果,并在 Xfce 文本编辑器中比较输出。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/tcp_connect_scan("Basic TCP Connect Scan") nmap/NmapGroup -.-> nmap/output_formats("Output Formats") nmap/NmapGroup -.-> nmap/save_output("Save Output to File") nmap/NmapGroup -.-> nmap/port_scanning("Port Scanning Methods") nmap/NmapGroup -.-> nmap/scan_types("Scan Types and Techniques") nmap/NmapGroup -.-> nmap/target_specification("Target Specification") nmap/NmapGroup -.-> nmap/udp_scanning("UDP Scanning Techniques") nmap/NmapGroup -.-> nmap/os_version_detection("OS and Version Detection") nmap/NmapGroup -.-> nmap/service_detection("Service Detection") subgraph Lab Skills nmap/tcp_connect_scan -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/output_formats -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/save_output -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/port_scanning -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/scan_types -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/target_specification -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/udp_scanning -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/os_version_detection -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} nmap/service_detection -.-> lab-530179{{"使用 Nmap 执行 UDP 扫描"}} end

使用 nmap -sU 192.168.1.1 运行 UDP 扫描

在本步骤中,我们将使用 Nmap 执行基本的 UDP 扫描。UDP(用户数据报协议)是一种无连接协议,这意味着与 TCP 不同,在发送数据之前无需进行握手来建立连接。这使得 UDP 扫描与 TCP 扫描有所不同。Nmap 的 -sU 选项用于启动 UDP 扫描。

在开始之前,需要了解 UDP 扫描可能不如 TCP 扫描可靠。由于 UDP 是无连接的,即使端口开放,Nmap 也可能无法始终从该端口收到响应。防火墙和网络状况也会影响 UDP 扫描的准确性。

让我们使用以下命令扫描目标 IP 地址 192.168.1.1

sudo nmap -sU 192.168.1.1

此命令告诉 Nmap 对 IP 地址 192.168.1.1 执行 UDP 扫描(-sU)。你需要使用 sudo,因为 UDP 扫描通常需要提升权限才能发送原始数据包。

运行该命令后,你将看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:00 UTC
Nmap scan report for 192.168.1.1
Host is up (0.0010s latency).
Not shown: 997 closed udp ports
PORT      STATE         SERVICE
137/udp   open|filtered netbios-ns
138/udp   open|filtered netbios-dgm
5353/udp  open|filtered zeroconf

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

输出解释

  • Starting Nmap...:显示 Nmap 版本和扫描开始时间。
  • Nmap scan report for 192.168.1.1:指示目标 IP 地址。
  • Host is up:确认目标主机可达。
  • Not shown: 997 closed udp ports:表示 Nmap 未显示 997 个关闭的 UDP 端口。默认情况下,Nmap 仅显示开放、开放 | 过滤或过滤的端口。
  • PORT STATE SERVICE:列出端口号、其状态以及在该端口上运行的服务(如果已知)。
    • open:表示 Nmap 从该端口收到了响应,表明有服务在该端口监听。
    • open|filtered:表示该端口要么开放要么被过滤。Nmap 无法确定其处于哪种状态。这通常意味着防火墙正在阻止 Nmap 的探测。
    • filtered:表示防火墙正在阻止 Nmap 的探测,并且 Nmap 无法确定该端口是开放还是关闭。
  • Nmap done:显示扫描完成时间和扫描的 IP 地址数量。

重要注意事项

  • 192.168.1.1 替换为你要扫描的目标的实际 IP 地址。
  • UDP 扫描的结果可能因网络状况和防火墙配置而异。
  • 未经许可扫描网络是非法且不道德的。仅扫描你自己拥有或已获得明确许可进行扫描的网络。

使用 nmap -sU -p 53,123 127.0.0.1 扫描 UDP 端口

在本步骤中,我们将把 UDP 扫描聚焦在特定端口上。当你想要检查目标机器上是否运行着特定服务,而又不想扫描所有 UDP 端口(这可能很耗时)时,这会很有用。我们将扫描本地主机(127.0.0.1)上的 53 号端口(DNS)和 123 号端口(NTP)。

Nmap 中的 -p 选项允许你指定想要扫描的端口。你可以提供单个端口、端口范围(例如 1 - 100)或用逗号分隔的端口列表(例如 21,22,80)。

要扫描 127.0.0.1 上的 UDP 端口 53 和 123,请使用以下命令:

sudo nmap -sU -p 53,123 127.0.0.1

此命令告诉 Nmap 对 IP 地址 127.0.0.1(本地主机)的 53 和 123 号端口(-p 53,123)执行 UDP 扫描(-sU)。同样,UDP 扫描通常需要使用 sudo

运行该命令后,你可能会看到类似于以下的输出:

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.000047s latency).

PORT    STATE         SERVICE
53/udp  open|filtered domain
123/udp closed        ntp

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

输出解释

  • Nmap scan report for localhost (127.0.0.1):表示目标是本地主机。
  • PORT STATE SERVICE:列出端口号、其状态以及在该端口上运行的服务(如果已知)。
    • 53/udp open|filtered domain:53 号端口(DNS)要么开放要么被过滤。这意味着由于潜在的防火墙规则或网络状况,Nmap 无法确定该端口是否开放。
    • 123/udp closed ntp:123 号端口(NTP)是关闭的。这意味着没有服务在该端口监听。

关键要点

  • -p 选项允许你针对特定端口,使扫描更高效。
  • 输出提供了每个扫描端口的状态信息(开放、关闭、被过滤等)。
  • 了解与常见端口(如用于 DNS 的 53 和用于 NTP 的 123)相关的服务有助于你解释扫描结果。

使用 nmap -sU -sT 192.168.1.1 组合 UDP 和 TCP 扫描

在本步骤中,我们将在单个 Nmap 命令中组合 UDP 和 TCP 扫描。这使我们能够更全面地了解目标机器上运行的服务,因为有些服务使用 UDP,而有些服务使用 TCP。

Nmap 的 -sT 选项执行 TCP 连接扫描。这是 TCP 扫描的最基本形式,Nmap 会尝试与目标端口建立完整的 TCP 连接。它通常很可靠,但很容易被检测到。

要对 192.168.1.1 执行 UDP 扫描和 TCP 连接扫描,请使用以下命令:

sudo nmap -sU -sT 192.168.1.1

此命令告诉 Nmap 对 IP 地址 192.168.1.1 执行 UDP 扫描(-sU)和 TCP 连接扫描(-sT)。通常需要使用 sudo,特别是对于扫描的 UDP 部分。

运行该命令后,你将看到包含 UDP 和 TCP 扫描结果的输出。输出可能如下所示:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:10 UTC
Nmap scan report for 192.168.1.1
Host is up (0.0010s latency).
Not shown: 997 closed udp ports
PORT      STATE         SERVICE
137/udp   open|filtered netbios-ns
138/udp   open|filtered netbios-dgm
5353/udp  open|filtered zeroconf
PORT      STATE    SERVICE
22/tcp    open     ssh
80/tcp    open     http

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

输出解释

  • 输出与之前的扫描类似,但现在它包括 UDP 和 TCP 端口的结果。
  • 第一部分显示 UDP 扫描结果,包括端口及其状态(开放、关闭、被过滤等)。
  • 第二部分显示 TCP 扫描结果,同样包括端口及其状态。
  • 请注意,同一 IP 地址在不同协议(UDP 和 TCP)上可以运行不同的服务。

组合 UDP 和 TCP 扫描的好处

  • 更全面的结果:你可以更完整地了解目标上运行的服务。
  • 识别不同的服务类型:你可以识别使用 UDP 的服务(例如 DNS、NTP)和使用 TCP 的服务(例如 HTTP、SSH)。

重要注意事项
组合扫描类型可能会增加扫描时间。如果你需要更快的结果,可以考虑针对特定端口进行扫描。

使用 nmap -sUV 192.168.1.1 添加版本检测

在本步骤中,我们将在 UDP 扫描中添加版本检测。版本检测使 Nmap 能够尝试确定在开放端口上运行的应用程序名称和版本号。这可以提供有关潜在漏洞的有价值信息。

Nmap 中的 -sV 选项启用版本检测。当与用于 UDP 扫描的 -sU 结合使用时,它变为 -sUV。Nmap 将向开放的 UDP 端口发送探测,以尝试识别服务及其版本。

要对 192.168.1.1 执行带有版本检测的 UDP 扫描,请使用以下命令:

sudo nmap -sUV 192.168.1.1

此命令告诉 Nmap 对 IP 地址 192.168.1.1 执行 UDP 扫描(-sU)和版本检测(-sV)。组合选项是 -sUV。和以前一样,UDP 扫描通常需要使用 sudo

运行该命令后,你可能会看到类似于以下的输出:

Starting Nmap 7.80 ( https://nmap.org ) at 2023-10-27 10:15 UTC
Nmap scan report for 192.168.1.1
Host is up (0.00088s latency).
Not shown: 997 closed udp ports
PORT      STATE         SERVICE VERSION
137/udp   open|filtered netbios-ns
138/udp   open|filtered netbios-dgm
5353/udp  open|filtered zeroconf  Apple Bonjour
Service Info: OS: Apple embedded

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

输出解释

  • 输出现在包括一个 VERSION 列,它显示检测到的服务版本(如果可用)。
  • 5353/udp open|filtered zeroconf Apple Bonjour:Nmap 将在端口 5353 上运行的服务识别为 Apple Bonjour。
  • Service Info: OS: Apple embedded:Nmap 还会尝试根据服务信息确定操作系统。

关键要点

  • -sV 选项(或与 UDP 扫描结合使用时的 -sUV)启用版本检测。
  • 版本检测有助于识别在开放端口上运行的特定应用程序和版本。
  • 此信息可用于评估潜在漏洞并规划进一步行动。

重要注意事项

  • 版本检测可能比简单的端口扫描耗时更长,因为 Nmap 需要向每个开放端口发送额外的探测。
  • 版本检测的准确性取决于服务和可用的 Nmap 签名。有时,Nmap 可能无法准确识别服务或其版本。

在 Xfce 终端中查看 UDP 结果

在本步骤中,我们将专注于在 Xfce 终端中直接查看和分析 UDP 扫描结果。虽然 Nmap 会直接将输出提供给终端,但有时将输出保存到文件中以便于查看和分析会很有帮助。我们将使用终端命令来过滤和查看扫描中特定于 UDP 的部分。

首先,让我们运行一次 UDP 扫描并将输出保存到文件中。这将使我们能够更轻松地处理结果。我们将使用 -oN 选项以“正常”格式保存输出。

sudo nmap -sUV 192.168.1.1 -oN udp_scan_results.txt

此命令对 192.168.1.1 执行带有版本检测的 UDP 扫描,并将输出保存到当前目录(~/project)中名为 udp_scan_results.txt 的文件中。

现在我们已将结果保存到文件中,便可以使用终端命令来查看和过滤特定于 UDP 的信息。

要查看文件的全部内容,可以使用 cat 命令:

cat udp_scan_results.txt

这将在终端中显示整个 Nmap 扫描报告。不过,我们主要感兴趣的是 UDP 结果。我们可以使用 grep 命令来过滤输出,只显示包含“udp”的行。

grep "udp" udp_scan_results.txt

此命令将在 udp_scan_results.txt 文件中搜索包含字符串“udp”的行,并在终端中显示这些行。输出将向你展示开放或被过滤的 UDP 端口,以及 Nmap 能够检测到的任何版本信息。

示例输出:

137/udp   open|filtered netbios-ns
138/udp   open|filtered netbios-dgm
5353/udp  open|filtered zeroconf  Apple Bonjour

你还可以使用 less 命令逐页查看文件:

less udp_scan_results.txt

less 中,你可以通过输入 /udp 并按 Enter 键来搜索“udp”。按 n 键跳转到下一个匹配项。按 q 键退出 less

通过使用这些简单的终端命令,你可以有效地查看和分析 Nmap 生成的 UDP 扫描结果。这使你能够快速识别开放的 UDP 端口以及任何相关的服务信息。

在 Xfce 文本编辑器中比较输出

在本步骤中,我们将使用 Xfce 文本编辑器来比较不同 Nmap 扫描的输出。这对于识别开放端口、服务或版本随时间的变化,或者比较不同选项扫描的结果很有用。

首先,假设你已经执行了两次 Nmap 扫描,并将输出保存到了不同的文件中。例如,你可能运行了一次基本的 UDP 扫描和一次带有版本检测的 UDP 扫描,分别将结果保存到了 udp_scan_basic.txtudp_scan_version.txt 中。如果你没有这些文件,可以使用以下命令创建它们:

sudo nmap -sU 192.168.1.1 -oN udp_scan_basic.txt
sudo nmap -sUV 192.168.1.1 -oN udp_scan_version.txt

现在,我们将使用 xfce4-terminal 命令打开 Xfce 文本编辑器(mousepad)并加载这两个文件进行比较。

mousepad udp_scan_basic.txt udp_scan_version.txt

此命令将打开两个 mousepad 实例,每个实例显示一个 Nmap 输出文件。

比较输出

  1. 检查基本扫描输出(udp_scan_basic.txt:此文件将包含基本 UDP 扫描的结果,显示开放或被过滤的 UDP 端口。
  2. 检查版本检测扫描输出(udp_scan_version.txt:此文件将包含带有版本检测的 UDP 扫描的结果。除了开放或被过滤的 UDP 端口外,它还可能显示检测到的服务版本。
  3. 并排比较:通过在单独的窗口中打开这两个文件,你可以轻松地并排比较结果。查找开放端口、端口状态(开放、被过滤、关闭)和服务信息方面的差异。

示例比较

  • udp_scan_basic.txt 可能显示
    137/udp   open|filtered netbios-ns
    138/udp   open|filtered netbios-dgm
    5353/udp  open|filtered zeroconf
  • udp_scan_version.txt 可能显示
    137/udp   open|filtered netbios-ns
    138/udp   open|filtered netbios-dgm
    5353/udp  open|filtered zeroconf  Apple Bonjour
    Service Info: OS: Apple embedded

在这个示例中,版本检测扫描能够将在端口 5353 上运行的服务识别为“Apple Bonjour”并提供操作系统信息,而基本扫描中没有这些信息。

通过在 Xfce 文本编辑器中比较输出,你可以更好地理解扫描之间的差异以及不同 Nmap 选项提供的额外信息。这对于识别潜在漏洞和规划进一步行动可能很有价值。

总结

在本实验中,参与者学习了如何使用 Nmap 执行 UDP 扫描。他们首先使用 -sU 选项对 IP 192.168.1.1 进行基本的 UDP 扫描,了解到 UDP 是无连接的,并且扫描可能不如 TCP 扫描可靠。他们还扫描了特定的 UDP 端口,组合了 UDP 和 TCP 扫描,添加了版本检测,并在 Xfce 终端和文本编辑器中查看和比较了结果。