【THM】Nmap Live Host Discovery(Nmap存活主机发现)-学习
本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/nmap01
本文相关内容:了解如何使用Nmap通过ARP扫描、ICMP扫描和TCP/UDP ping扫描来发现活动主机。
介绍
当我们想要定位一个网络时,我们希望找到一个有效的工具来帮助我们处理重复性任务并回答以下问题:
-
网络中有哪些系统启动了?
-
这些系统上运行着哪些服务?
我们依赖的工具是Nmap,本文将主要关注于第一个问题,即Nmap 在端口扫描之前如何进行存活主机发现的步骤。这个阶段至关重要,因为尝试对离线系统进行端口扫描只会浪费时间并且会在目标网络上产生不必要的痕迹。
我们会介绍Nmap 用于发现活动主机的不同方法:
-
ARP 扫描:此扫描使用 ARP 请求来发现活动主机
-
ICMP 扫描:此扫描使用 ICMP 请求来识别活动主机
-
TCP/UDP ping 扫描:此扫描会将数据包发送到 TCP 端口和 UDP 端口以确定活动主机。
我们还介绍了两种扫描器,arp-scan 和 masscan,并解释了它们如何与 Nmap 的主机发现部分功能相重叠。
关于Nmap:
Nmap 由网络安全专家和开源程序员 Gordon Lyon (Fyodor) 创建,于 1997 年发布。Nmap 是 Network Mapper 的缩写,是在 GPL 许可下发布的免费开源软件,是用于映射网络、识别活动主机和发现正在运行的服务的行业标准工具。 Nmap 的脚本引擎可以进一步扩展其功能,从指纹识别服务到漏洞利用都有所涉及。
Nmap 扫描通常会执行下图所示的步骤,尽管许多步骤是可选的并且取决于你所提供的命令行参数。
子网
在开始学习之前,我们先回顾一下关于网段和子网的术语解释:网段是使用共享介质连接的一组计算机,这些共享介质可以是以太网交换机或 WiFi 接入点;在 IP 网络中,子网通常相当于连接在一起并配置为使用同一路由器的一个或多个网段。网段指的是物理连接,子网指的是逻辑连接。
在下面的网络图中,我们有四个网段或子网,一般来说,你的系统将连接到这些网段/子网之一。这些子网有自己的 IP 地址范围,并通过路由器连接到更广泛的网络,根据每个网络的具体情况,可能会有防火墙强制执行安全策略。
上图显示了两种类型的子网:
-
带/16的子网,表示子网掩码可以写成255.255.0.0 ,这个子网可以有大约 65,000 台主机。
-
带/24的子网,表示子网掩码可以写成255.255.255.0 ,这个子网可以有大约 250 台主机。
作为主动侦察的一部分,我们希望发现有关一组主机或子网的更多信息。
假设你连接到与目标系统所在的子网,你可以期望你的扫描器依赖 ARP(地址解析协议)查询来发现活动主机。ARP 查询旨在获取硬件地址(MAC 地址),以便通过链路层进行通信; 但是,我们也可以使用这个协议来推断目标主机是否在线。如果你在网络 A 中,则只能使用 ARP 来发现该子网 (10.1.100.0/24) 内的设备。
假设你连接到的子网与目标系统所在的子网不同,在这种情况下,你的扫描器所生成的所有数据包都将通过默认网关(路由器)路由到另一个子网上的目标系统上;
但是,ARP 查询并不会被路由,所以ARP查询无法穿过子网路由器(ARP 是链路层协议,ARP 数据包会绑定到对应的子网)。
答题
发送包含以下内容的数据包:
- From computer1
- To computer1 (表示它正在广播)
- Packet Type: “ARP Request”
- Data: computer6 (我们使用的是ARP Request,目的是获取到computer6 的MAC地址)
发送包含以下内容的数据包:
- From computer4
- To computer4 (表示它正在广播)
- Packet Type: “ARP Request”
- Data: computer6 (我们使用的是ARP Request,目的是获取到computer6 的MAC地址)
枚举目标
我们在第一节中提到了可用于扫描的不同技术。在我们详细解释每个扫描技术并将其用于实时目标之前,我们需要明确指定要扫描的目标,一般来说,你可以提供一个列表、范围或子网当做要扫描的目标。关于目标格式的例子有:
-
list(列表): MACHINE_IP scanme.nmap.org example.com 将扫描 3 个 IP 地址。
-
range(范围):10.11.12.15-20 将扫描 6 个 IP 地址:10.11.12.15、10.11.12.16、…和 10.11.12.20。
-
subnet(子网):MACHINE_IP/30 (30位子网掩码:255.255.255.252)将扫描 4 个 IP 地址。
你还可以提供一个文件作为目标列表的输入:nmap -iL list_of_hosts.txt
如果要检查 Nmap 将扫描的主机列表,可以使用 nmap -sL TARGETS
,此选项会为你提供Nmap将要扫描的主机的详细列表并且无需真正去扫描它们;并且,在使用此选项时 Nmap还会尝试对所有目标进行反向 DNS 解析以获取它们的域名。目标的域名可能会向渗透测试者透露各种信息(如果你不希望 Nmap 连接到 DNS 服务器,可以添加 -n选项)。
答题
发现 Live Host
让我们审视下图中所示的 TCP/IP 层,我们将利用协议来发现活动主机,从下到上,我们可以使用:
- 来自链路层的 ARP协议
- 来自网络层的 ICMP协议
- 来自传输层的 TCP协议
- 来自传输层的 UDP协议
在我们详细讨论扫描器如何使用每种协议之前,我们将简要回顾这四种协议。
此处使用ARP协议有一个目的:向网段上的广播地址发送帧,并要求具有特定 IP 地址的计算机通过提供其 MAC(硬件)地址来响应。
ICMP 有多种类型,ICMP ping 使用类型 8(Echo)和类型 0(Echo Reply),如果你想要ping同一子网上的系统,ARP 查询应该在 ICMP Echo 之前。
虽然 TCP 和 UDP 是传输层协议,但出于网络扫描的目的,扫描器可以将特制数据包发送到常见的 TCP 或 UDP 端口,以检查目标是否会响应。 这种方法很有效,尤其是在 ICMP Echo 被阻塞时。
答题
发送包含以下内容的数据包(computer1和computer3在同一个子网中):
- From computer1
- To computer3
- Packet Type: “Ping Request”
发送包含以下内容的数据包(computer2和computer5在不同子网中):
- From computer2
- To computer5
- Packet Type: “Ping Request”
使用 ARP 进行 Nmap 主机发现
我们必须避免浪费我们的时间对离线主机或未使用的 IP 地址进行端口扫描,但是我们如何知道哪些主机已启动并正在运行?有多种方法可以发现在线主机,当没有提供主机发现选项时,Nmap 遵循以下方法来发现活动主机:
-
当特权用户尝试扫描本地网络(以太网)上的目标时,Nmap会使用 ARP 请求,特权用户是 root 或属于 sudoers(可以运行 sudo 的用户)。
-
当特权用户尝试扫描本地网络之外的目标时,Nmap 会使用 ICMP echo请求、发送到端口80的TCP ACK(Acknowledge)、发送到端口443的TCP SYN(Synchronize) 和 ICMP 时间戳请求。
-
当非特权用户尝试扫描本地网络之外的目标时,Nmap会通过向端口 80 和 443 发送 SYN 数据包来尝试进行TCP 3 次握手操作。
默认情况下,Nmap会使用 ping 扫描来查找活动主机,然后继续对活动主机进行扫描。如果你想使用 Nmap 来发现在线主机并且不需要对在线主机进行端口扫描,你可以使用nmap -sn TARGETS
,-sn表示仅主机发现。
仅当你与目标系统位于同一子网时,才可以进行 ARP 扫描。在以太网 (802.3) 和 WiFi (802.11) 上,你需要知道其他系统的 MAC 地址才能与之通信,MAC地址对于链路层标头是必需的,标头包含源 MAC 地址和目标 MAC 地址以及其他字段。
为了获取 MAC 地址,操作系统会发送一个 ARP 查询,有主机回复 ARP 查询即代表该主机已启动,ARP 查询仅在目标与你位于同一子网时才有效,即在同一以太网/WiFi 上。
如果你希望 Nmap 只执行 ARP 扫描而不进行端口扫描,你可以使用 nmap -PR -sn TARGETS
,其中-PR 表示你需要执行ARP 扫描,-sn表示仅主机发现。
以下示例显示的是Nmap仅使用 ARP 进行主机发现而不进行任何端口扫描。我们可以使用nmap -PR -sn MACHINE_IP/24
来发现与目标机器位于同一子网上的所有活动主机。
pentester@TryHackMe$ sudo nmap -PR -sn 10.10.210.6/24
Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 07:12 BST
Nmap scan report for ip-10-10-210-75.eu-west-1.compute.internal (10.10.210.75)
Host is up (0.00013s latency).
MAC Address: 02:83:75:3A:F2:89 (Unknown)
Nmap scan report for ip-10-10-210-100.eu-west-1.compute.internal (10.10.210.100)
Host is up (-0.100s latency).
MAC Address: 02:63:D0:1B:2D:CD (Unknown)
Nmap scan report for ip-10-10-210-165.eu-west-1.compute.internal (10.10.210.165)
Host is up (0.00025s latency).
MAC Address: 02:59:79:4F:17:B7 (Unknown)
Nmap scan report for ip-10-10-210-6.eu-west-1.compute.internal (10.10.210.6)
Host is up.
Nmap done: 256 IP addresses (4 hosts up) scanned in 3.12 seconds
在这种情况下,AttackBox 的 IP 地址为 10.10.210.6,它将使用 ARP请求 来发现同一子网上的活动主机。 ARP扫描有效,如下图所示,Nmap 向所有目标计算机发送 ARP 请求,在线的计算机应发送 ARP 回复。
如果我们查看使用 tcpdump 或 Wireshark 等工具生成的数据包,我们将看到类似于下图的网络流量。在图中,Wireshark 显示了与每个 ARP 请求相关的源 MAC 地址、目标 MAC 地址、协议和查询。
源地址是我们 AttackBox 的 MAC 地址,而目标是广播地址,因为我们不知道目标的 MAC 地址;但是,我们稍后能看到目标的 IP 地址,它会出现在 Info 列中。 在图中,我们可以看到我们正在请求子网上所有IP地址的MAC地址,从 10.10.210.1 开始。 具有我们询问的 IP 地址的主机将发送一个带有其 MAC 地址的 ARP 回复,这就是我们知道它在线的方式。
说到 ARP 扫描,我们应该提到一个围绕 ARP 查询构建的扫描器:arp-scan,它提供了许多选项来自定义你的扫描,你可以访问 arp-scan wiki 了解详细信息。 一种常见的参数选择是 arp-scan --localnet
或简单的 arp-scan -l
, 此命令将向本地网络上的所有有效 IP 地址发送 ARP 查询。 此外,如果你的系统有多个接口,并且你有兴趣在其中一个接口上发现活动主机,则可以使用-I
指定接口,例如 sudo arp-scan -I eth0 -l
将为 eth0 接口上的所有有效 IP 地址发送 ARP 查询。
arp-scan扫描器可以使用 apt install arp-scan 命令进行安装。在下面的示例中,我们使用 arp-scan ATTACKBOX_IP/24
扫描了 AttackBox 的子网,由于我们在接近前一条命令 nmap -PR -sn ATTACKBOX_IP/24
的执行时间范围内运行此扫描,因此我们获得了相同的三个实时目标。
pentester@TryHackMe$ sudo arp-scan 10.10.210.6/24
Interface: eth0, datalink type: EN10MB (Ethernet)
WARNING: host part of 10.10.210.6/24 is non-zero
Starting arp-scan 1.9 with 256 hosts (http://www.nta-monitor.com/tools/arp-scan/)
10.10.210.75 02:83:75:3a:f2:89 (Unknown)
10.10.210.100 02:63:d0:1b:2d:cd (Unknown)
10.10.210.165 02:59:79:4f:17:b7 (Unknown)
4 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9: 256 hosts scanned in 2.726 seconds (93.91 hosts/sec). 3 responded
同样,arp-scan 命令也将生成许多 ARP 查询,我们可以使用 tcpdump、Wireshark 或类似工具看到这些查询。 我们可以注意到,arp-scan 和 nmap -PR -sn 的数据包捕获产生了相似的流量模式, 下面是 Wireshark 的输出示意图。
答题
我们将使用以下选项发送广播 ARP 请求数据包:
- From computer1
- To computer1 (表示它正在广播)
- Packet Type: “ARP Request”
- Data:尝试网络中所有可能的八种设备 (computer1除外) : computer2, computer3, computer4, computer5, computer6, switch1, switch2, and router。
使用 ICMP 进行 Nmap 主机发现
我们可以 ping 目标网络上的每个 IP 地址,看看谁会使用 ping reply(ICMP 类型 0)响应我们的 ping(ICMP 类型 8/Echo)请求。尽管这将是最直接的方法,但它并不总是可靠的,因为许多防火墙都会阻止 ICMP echo,MS Windows 配置了主机防火墙,默认情况下会阻止 ICMP echo请求。
请记住,如果你的目标位于同一子网上,则 ARP 查询将先于 ICMP 请求。
要使用 ICMP echo请求来发现活动主机,请添加选项 -PE(如果不想对端口进行扫描,再添加 -sn即可)如下图所示,ICMP echo扫描通过发送 ICMP echo请求来工作,并期望在线目标能够回复 ICMP echo reply 。
在下面的示例中,我们使用 nmap -PE -sn MACHINE_IP/24
扫描目标的子网,此扫描会将 ICMP echo数据包发送到子网上的每个 IP 地址。我们希望活动主机能够回复ping消息,但是,请记住有很多防火墙可能会阻止 ICMP。
下面显示了在AttackBox 中使用命令sudo nmap -PE -sn MACHINE_IP/24
扫描虚拟机的 C 类子网的结果。
pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24
Starting Nmap 7.60 ( https://nmap.org ) at 2021-09-02 10:16 BST
Nmap scan report for ip-10-10-68-50.eu-west-1.compute.internal (10.10.68.50)
Host is up (0.00017s latency).
MAC Address: 02:95:36:71:5B:87 (Unknown)
Nmap scan report for ip-10-10-68-52.eu-west-1.compute.internal (10.10.68.52)
Host is up (0.00017s latency).
MAC Address: 02:48:E8:BF:78:E7 (Unknown)
Nmap scan report for ip-10-10-68-77.eu-west-1.compute.internal (10.10.68.77)
Host is up (-0.100s latency).
MAC Address: 02:0F:0A:1D:76:35 (Unknown)
Nmap scan report for ip-10-10-68-110.eu-west-1.compute.internal (10.10.68.110)
Host is up (-0.10s latency).
MAC Address: 02:6B:50:E9:C2:91 (Unknown)
Nmap scan report for ip-10-10-68-140.eu-west-1.compute.internal (10.10.68.140)
Host is up (0.00021s latency).
MAC Address: 02:58:59:63:0B:6B (Unknown)
Nmap scan report for ip-10-10-68-142.eu-west-1.compute.internal (10.10.68.142)
Host is up (0.00016s latency).
MAC Address: 02:C6:41:51:0A:0F (Unknown)
Nmap scan report for ip-10-10-68-220.eu-west-1.compute.internal (10.10.68.220)
Host is up (0.00026s latency).
MAC Address: 02:25:3F:DB:EE:0B (Unknown)
Nmap scan report for ip-10-10-68-222.eu-west-1.compute.internal (10.10.68.222)
Host is up (0.00025s latency).
MAC Address: 02:28:B1:2E:B0:1B (Unknown)
Nmap done: 256 IP addresses (8 hosts up) scanned in 2.11 seconds
扫描输出显示有八台主机已经被启动,此外,输出结果还显示了这些主机的 MAC 地址。一般来说,我们不希望了解目标的 MAC 地址,除非它们与我们的系统在同一个子网上。上面的输出表明 Nmap不需要发送 ICMP 数据包,因为它是根据收到的 ARP 响应来确认这些主机已启动。
我们将重复上面的扫描,但是,这一次我们将使用属于不同子网的系统进行扫描(执行扫描操作的系统不在10.10.68.220/24子网中),扫描结果和上面的扫描相似,但不会显示 MAC 地址。
pentester@TryHackMe$ sudo nmap -PE -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:16 EEST
Nmap scan report for 10.10.68.50
Host is up (0.12s latency).
Nmap scan report for 10.10.68.52
Host is up (0.12s latency).
Nmap scan report for 10.10.68.77
Host is up (0.11s latency).
Nmap scan report for 10.10.68.110
Host is up (0.11s latency).
Nmap scan report for 10.10.68.140
Host is up (0.11s latency).
Nmap scan report for 10.10.68.142
Host is up (0.11s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap scan report for 10.10.68.222
Host is up (0.11s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 8.26 seconds
如果你使用 Wireshark 之类的工具查看网络数据包,你将看到类似于下图的内容。你可以看到我们有一个源 IP 地址位于与目标子网不同的子网上,正在向目标子网中的所有 IP 地址发送 ICMP echo请求,以查看哪个会回复。
由于 ICMP echo请求往往会被阻止,因此你还可以考虑使用 ICMP 时间戳或 ICMP 地址掩码请求来判断系统是否在线。
Nmap可以使用时间戳请求(ICMP 类型 13)并检查它是否会得到时间戳回复(ICMP 类型 14)以此来判断目标主机是否存活,你可以添加 -PP 选项告诉 Nmap 使用 ICMP 时间戳请求。 如下图所示,你可以期望得到存活主机的回复。
在下面的示例中,我们将运行nmap -PP -sn MACHINE_IP/24
来发现目标机器子网上的存活主机。
pentester@TryHackMe$ sudo nmap -PP -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:06 EEST
Nmap scan report for 10.10.68.50
Host is up (0.13s latency).
Nmap scan report for 10.10.68.52
Host is up (0.25s latency).
Nmap scan report for 10.10.68.77
Host is up (0.14s latency).
Nmap scan report for 10.10.68.110
Host is up (0.14s latency).
Nmap scan report for 10.10.68.140
Host is up (0.15s latency).
Nmap scan report for 10.10.68.209
Host is up (0.14s latency).
Nmap scan report for 10.10.68.220
Host is up (0.14s latency).
Nmap scan report for 10.10.68.222
Host is up (0.14s latency).
Nmap done: 256 IP addresses (8 hosts up) scanned in 10.93 seconds
与之前的 ICMP 扫描类似,此扫描将向目标子网中的每个有效 IP 地址发送许多 ICMP 时间戳请求。在下面的 Wireshark 截图中,你可以看到一个源 IP 地址正在向每个可能的 IP 地址发送 ICMP 数据包以发现在线主机。
同样,Nmap还可以使用地址掩码查询(ICMP 类型 17)并检查它是否获得地址掩码回复(ICMP 类型 18)以此来判断主机是否存活。你可以使用选项 -PM 启用此扫描,如下图所示,存活的主机应该会回复 ICMP 地址掩码请求。
为了尝试使用 ICMP 地址掩码查询发现活动主机,我们可以执行命令 nmap -PM -sn MACHINE_IP/24
。虽然根据之前的扫描,我们知道至少有八台主机已经被启动,但这次扫描的结果却没有返回任何内容,原因是路由上的目标系统或防火墙正在阻止这种类型的 ICMP 数据包。
因此,有必要学习多种方法来实现相同的结果,如果一种类型的数据包被阻塞,我们可以选择另一种类型的数据包来发现目标网络和服务。
pentester@TryHackMe$ sudo nmap -PM -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 12:13 EEST
Nmap done: 256 IP addresses (0 hosts up) scanned in 52.17 seconds
尽管我们没有收到任何回复,也无法确定哪些主机在线,但必须注意到此扫描会向每个有效 IP 地址发送 ICMP 地址掩码请求并等待回复,而且每个 ICMP 请求都发送了两次,如下面的截图所示。
答题
使用 TCP 和 UDP 进行 Nmap 主机发现
TCP SYN Ping
我们可以发送一个将 SYN(Synchronize)标志设置为 TCP 端口(默认为 80)的数据包,然后等待响应。一个开放的端口应该回复一个 SYN/ACK(Acknowledge);一个关闭的端口将导致 RST(Reset)。
在这种情况下,我们只检查是否会得到任何响应来推断主机是否已启动,端口的具体状态在这里并不重要。下图显示了 TCP 3 次握手通常是如何工作的 。
如果你希望 Nmap 使用 TCP SYN ping,你可以通过选项 -PS 后跟端口号、范围、列表或它们的组合来实现。 例如,-PS21 将针对端口 21,而 -PS21-25 将针对端口 21、22、23、24 和 25,最后 -PS80,443,8080 将针对三个端口 80、443 和 8080 。
特权用户(root 和 sudoers)可以发送 TCP SYN 数据包,即使端口打开也不需要完成 TCP 3 次握手,如下图所示。 如果端口打开,非特权用户别无选择,只能完成 3 次握手 。
我们将运行nmap -PS -sn MACHINE_IP/24
来扫描目标 VM 子网。 正如我们在下面的输出中看到的,我们能够发现五台主机 。
pentester@TryHackMe$ sudo nmap -PS -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.16s latency).
Nmap scan report for 10.10.68.125
Host is up (0.089s latency).
Nmap scan report for 10.10.68.134
Host is up (0.13s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 17.38 seconds
让我们通过查看下图中 Wireshark 上的网络流量来仔细了解幕后发生的事情。从技术上讲,由于我们没有在 TCP ping 扫描中指定要使用的任何 TCP 端口,因此 Nmap 会使用公共端口; 在这种情况下,它会是 TCP 端口 80,任何侦听端口 80 的服务都应该回复,从而间接表明主机在线 。
TCP ACK Ping
正如你所猜到的,这里会发送一个设置了 ACK 标志的数据包,你必须以特权用户身份运行 Nmap 才能完成此操作,如果你以非特权用户身份尝试,Nmap 将会尝试 进行TCP 3 次握手操作 。
在默认情况下,此处会使用端口 80,TCP ACK Ping的语法类似于 TCP SYN Ping 。在Nmap中TCP ACK Ping使用的是-PA参数,后面可以跟一个端口号、范围、列表或它们的组合。 例如, -PA21、-PA21-25 和 -PA80,443,8080 ,如果未指定端口,则将使用默认端口 80 。
下图显示任何带有 ACK 标志的 TCP 数据包都应该得到一个设置了 RST 标志的 TCP 数据包。目标会以设置的 RST 标志进行响应,是因为带有 ACK 标志的 TCP 数据包并不是任何正在进行的连接的一部分,此处预期的响应可用于检测目标主机是否已启动 。
在此示例中,我们运行sudo nmap -PA -sn MACHINE_IP/24
来发现目标子网上的在线主机。 我们可以看到 TCP ACK ping 扫描检测到五个主机启动 。
pentester@TryHackMe$ sudo nmap -PA -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:46 EEST
Nmap scan report for 10.10.68.52
Host is up (0.11s latency).
Nmap scan report for 10.10.68.121
Host is up (0.12s latency).
Nmap scan report for 10.10.68.125
Host is up (0.10s latency).
Nmap scan report for 10.10.68.134
Host is up (0.10s latency).
Nmap scan report for 10.10.68.220
Host is up (0.10s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 29.89 seconds
如果我们查看下图所示的网络流量,我们会发现许多设置了 ACK 标志的数据包发送到目标系统的 80 端口。 Nmap会将每个数据包发送两次,不响应的系统代表其处于脱机状态或无法访问状态 。
UDP Ping
最后,我们可以使用 UDP 来发现主机是否在线。 与 TCP SYN ping 不同,将 UDP 数据包发送到开放端口预计不会导致任何回复;但是,如果我们向一个关闭的 UDP 端口发送一个 UDP 数据包,我们可以期望得到一个 ICMP 端口不可达的数据包,这表明目标系统已启动且可用 。
在下图中,我们看到一个 UDP 数据包被发送到一个开放的 UDP 端口并且没有触发任何响应;但是,当我们向任何关闭的 UDP 端口发送 UDP 数据包就可能会触发间接指示目标主机在线的响应 。
Nmap 使用 -PU 进行 UDP ping操作,UDP ping指定端口的语法类似于 TCP SYN ping 和 TCP ACK ping 。在以下示例中,我们使用nmap进行 UDP 扫描,发现了五个活动主机 。
pentester@TryHackMe$ sudo nmap -PU -sn 10.10.68.220/24
Starting Nmap 7.92 ( https://nmap.org ) at 2021-09-02 13:45 EEST
Nmap scan report for 10.10.68.52
Host is up (0.10s latency).
Nmap scan report for 10.10.68.121
Host is up (0.10s latency).
Nmap scan report for 10.10.68.125
Host is up (0.14s latency).
Nmap scan report for 10.10.68.134
Host is up (0.096s latency).
Nmap scan report for 10.10.68.220
Host is up (0.11s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 9.20 seconds
让我们检查生成的 UDP 数据包,在下面的 Wireshark 截图中,我们注意到 Nmap 会将 UDP 数据包发送到最有可能关闭的 UDP 端口。 下图显示 Nmap 使用一个不常见的 UDP 端口来触发 ICMP 目标不可达(port unreachable)错误,以此间接指示目标主机在线 。
Masscan
Masscan扫描器也会使用和nmap类似的方法来发现可用系统,但是,为了快速完成网络扫描,Masscan 生成数据包的速率非常激进。Masscan的语法和nmap非常相似:-p 后面可以跟一个端口号、列表或范围 。以下是一些示例:
- masscan MACHINE_IP/24 -p443
- masscan MACHINE_IP/24 -p80,443
- masscan MACHINE_IP/24 -p22-25
- masscan MACHINE_IP/24 ‐‐top-ports 100
Masscan的安装:apt install masscan
答题
使用反向 DNS 解析
Nmap的默认行为会使用反向 DNS 查询在线主机,因为主机名可以透露很多信息,所以这可能是一个有用的步骤;但是,如果你不想发送此类 DNS 查询,请使用 -n 跳过此步骤 。
默认情况下,Nmap会查找在线主机;但是,即使是脱机主机,你也可以使用选项-R 来查询 DNS 服务器,如果要查询特定的DNS服务器,可以添加 --dns-servers DNS_SERVER 选项 。
答题
小结
你已经了解了ARP、ICMP、TCP 和 UDP如何检测活动主机,主机的任何响应都表明它在线,下面是我们介绍过的 Nmap 命令行选项的快速摘要 。
如果你只想进行主机发现而不进行端口扫描,你可以添加 -sn,如果省略 -sn 参数将使 Nmap 默认对活动主机进行端口扫描 。