【THM】Nmap:The Basics(Nmap:基础知识)-学习

本文相关的TryHackMe实验房间链接:https://tryhackme.com/r/room/nmap

本文相关内容:了解如何使用 Nmap 发现活动主机、查找开放端口以及检测服务的版本。

image-20250107222646387

介绍

image-20250507194135016

想象一下,你连接到网络并使用各种网络资源,例如电子邮件和网页浏览。这时会出现两个问题。首先,我们如何发现此网络或其他网络上的其他活动(在线)设备。其次,我们如何找到这些活跃(在线)设备上所运行的网络服务,例如 SSH 和 Web 服务器。

一种方法是手动执行。如果要求发现192.168.0.1/24网络上存在哪些在线设备(处于活动状态的设备),则可以使用pingarp-scan等基本工具或其他工具来检查 254 个 IP 地址。尽管该网络有 256 个 IP 地址,但我们只需要统计 254 个 IP 地址,因为有两个地址是保留的。每个工具都有其局限性。例如,如果目标系统的防火墙阻止了 ICMP 流量,则使用ping命令将不会为我们提供任何信息。此外, arp-scan仅在你的设备已经连接到与目标设备相同的网络(即通过以太网或 WiFi)时才会起作用。简而言之,如果没有先进可靠的工具,发现目标网络有多少在线设备将会造成对时间的极大浪费;而一旦有了正确的工具和足够的时间,我们就可以获得目标网络上的活动主机列表。因此,我们需要一个可以处理各种情况的灵活工具。

如果依赖手动解决方案或者低效的脚本,那么发现特定主机上正在运行哪些服务同样会消耗很多时间。例如,虽然可以使用telnet依次尝试每个端口;然而,由于需要扫描的端口数以千计,即使编写了脚本来自动执行telnet连接尝试,这也可能会是一项非常耗时的任务。

此时,使用Nmap网络扫描器将会是一个非常高效的解决方案,它可以满足我们刚才在上面提及的两个需求以及更多其他需求。 Nmap是一款开源网络扫描器,于 1997 年首次发布。自发布以来, Nmap 就在不断添加各种功能和选项,它是一款功能强大且灵活的网络扫描器,可以适应各种场景和设置。

学习目标

本文旨在为你提供使用Nmap扫描器或简单的nmap时所需的相关基础知识。特别是,你将在本文内容中学习如何:

  • 发现处于活动状态的(在线)主机;
  • 查找在线主机上正在运行的服务;
  • 区分不同类型的端口扫描;
  • 检测正在运行的服务的版本;
  • 控制扫描时间;
  • 格式化输出。

前置学习条件

在学习本文之前,读者应该熟悉TCP /IP 模型以及与之相关的一些概念及各种协议。以下TryHackMe实验房间可以为读者提供充分学习本文内容所需的前置知识:

主机发现(Host Discovery):谁在线

image-20250507194150221

让我们从第一个问题开始:谁在线?本小节旨在了解如何使用Nmap发现活动主机。我们可以使用Nmap中的各种复杂的方法来发现活动主机。

在开始学习之前,我们了解到在使用Nmap时 我们可以使用多种方式来指定其目标:

  • IP范围使用- :如果要扫描从192.168.0.1到192.168.0.10范围内的所有IP地址,可以写成192.168.0.1-10
  • 使用/ 表示IP子网:如果要扫描子网,可以将其表示为192.168.0.1/24 ,这相当于192.168.0.0-255
  • 主机名称:你还可以通过主机名称来指定目标,例如example.thm

假设你想要发现网络上的在线主机。 Nmap为此提供了-sn选项,即ping扫描;但不要指望它会像ping一样受到限制。我们将在下文中查看它的实际使用情况。

在开始学习本文内容之前,我们应该注意,在本文的整个文章内容中,我们要么以root运行nmap ,要么使用sudo,因为我们不想因为我们的帐户权限而限制了Nmap的功能。以本地(非root)用户身份运行 Nmap 会限制我们进行基本类型的nmap扫描,例如 ICMP echo 和TCP connect 扫描;我们将在本文结束时再次讨论这一问题。

扫描“本地-Local”网络

在这种情况下,我们使用术语“本地 local”来指代我们已经直接连接到的网络,例如以太网或 WiFi 网络。在下面的第一个示例中,我们将扫描当前设备所连接的 WiFi网络。我们所使用的机器的IP地址是192.168.66.89 ,我们正在扫描192.168.66.0/24网络。 nmap -sn 192.168.66.0/24命令及其输出将如下所示:

root@tryhackme:~# nmap -sn 192.168.66.0/24
Starting Nmap 7.92 ( https://nmap.org ) at 2024-08-07 13:49 EEST
Nmap scan report for XiaoQiang (192.168.66.1)
Host is up (0.0069s latency).
MAC Address: 44:DF:65:D8:FE:6C (Unknown)
Nmap scan report for S190023240007 (192.168.66.88)
Host is up (0.090s latency).
MAC Address: 7C:DF:A1:D3:8C:5C (Espressif)
Nmap scan report for wlan0 (192.168.66.97)
Host is up (0.20s latency).
MAC Address: 10:D5:61:E2:18:E6 (Tuya Smart)
Nmap scan report for 192.168.66.179
Host is up (0.10s latency).
MAC Address: E4:AA:EC:8F:88:C9 (Tianjin Hualai Technology)
[...]
Nmap done: 256 IP addresses (7 hosts up) scanned in 2.64 seconds

因为我们正在扫描通过以太网或 WiFi 连接的本地网络,所以我们可以查找目标设备的 MAC 地址。因此,我们可以找出网卡供应商,这是比较有用的信息,因为它可以帮助我们猜测目标设备的类型。

当使用nmap扫描直连的本地网络时,Nmap首先会发送ARP请求,当有设备响应ARP请求时, Nmap则会将其标记为“主机已启动”。

扫描“远程-Remote”网络

接下来了解一下目标为“远程”网络的情况。在这种情况下,“远程”意味着至少有一个路由器将我们所使用的计算机系统与目标网络分隔开。因此,我们到目标系统的所有流量都必须经过一个或多个路由器。这与使用nmap扫描本地网络不同,我们现在无法向目标发送ARP请求。

假设我们当前使用的系统的IP地址为192.168.66.89 ,属于192.168.66.0/24网络。在下面的示例中,我们要扫描的目标网络是192.168.11.0/24 ,其中有两个或多个路由器(跳)会将我们的本地系统与目标主机分隔开。

root@tryhackme:~# nmap -sn 192.168.11.0/24
Starting Nmap 7.92 ( https://nmap.org ) at 2024-08-07 14:05 EEST
Nmap scan report for 192.168.11.1
Host is up (0.018s latency).
Nmap scan report for 192.168.11.151
Host is up (0.0013s latency).
Nmap scan report for 192.168.11.152
Host is up (0.13s latency).
Nmap scan report for 192.168.11.154
Host is up (0.22s latency).
Nmap scan report for 192.168.11.155
Host is up (2.3s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 10.67 seconds

上面的Nmap输出 显示有 5 个主机已启动,但是Nmap是如何发现这一点的呢?要了解更多信息,让我们看看Nmap能够生成的一些示例流量。在下面的截图中,我们可以看到来自两个主机的响应情况:

  • 192.168.11.1处于活动(在线)状态并且能够响应 ICMP 回显 (ping) 请求。
  • 192.168.11.2似乎处于关闭状态。 Nmap向其发送了两个ICMP echo(ping)请求、两个ICMP时间戳请求、两个设置了SYN标志的TCP数据包到端口443 以及两个设置了 ACK 标志的TCP数据包到端口80;但是目标没有任何响应。我们可以观察到来自192.168.11.151路由器的多个ICMP目标不可达数据包。

image-20250109203032949

值得注意的是,我们可以更好地控制Nmap如何发现在线主机,例如-PS[portlist]-PA[portlist]-PU[portlist]可以通过针对给定的端口进行 TCP SYN、TCP ACK 和UDP发现。不过,这超出了本文的内容范围。

最后一点, Nmap提供了带有-sL参数选项的列表扫描,此扫描仅会列出要扫描的目标,而不会实际地去扫描它们。例如,nmap -sL 192.168.0.1/24命令将会列出要扫描的 256 个目标。这个参数选项有助于我们在运行实际的扫描操作之前 确认目标。

正如我们之前所提及的, -sn参数选项旨在发现活动主机,而不会尝试去发现目标主机上所运行的服务。如果你想发现指定网络上的在线设备而不想引起太多噪音,这种扫描可能会很有帮助,但是它不会告诉我们目标主机上有哪些服务正在运行。如果我们想了解有关活动主机上所运行的网络服务的更多信息,我们需要一种更加“嘈杂”的扫描类型,我们将在下一个小节中探讨这一点。

tips:这里的 更加“嘈杂”指的是 更大的扫描强度。

在与本文相关的TryHackMe实验房间页面中,点击页面顶部的Start AttackBox按钮并等待加载过程。 在 AttackBox 准备就绪后,打开它的终端以访问nmap并回答本小节以及后续小节中的问题。此外,还需要单击实验房间页面中的“启动计算机”按钮,来部署好目标计算机系统。

image-20250109203048401

image-20250109203112813

答题

当你的扫描目标是192.168.0.1/27时,最后一次扫描的 IP 地址是什么?

分析过程:
CIDR与子网掩码:
/27表示子网掩码的前27位为网络部分,后5位为主机部分。
子网掩码为255.255.255.224(二进制前27位为1,最后5位为0)。
子网划分:
该子网的大小为 2^5 = 32 个地址(包括网络地址和广播地址)。tips:常见的示例/24,它的子网的大小是2^8个地址(前24位为网络部分,后8位为主机部分)。
给定的IP 192.168.0.1属于子网 192.168.0.0/27,其地址范围为 192.168.0.0 到 192.168.0.31。
关键地址:
网络地址:192.168.0.0(主机部分全0)。
广播地址:192.168.0.31(主机部分全1)。
可用主机范围:192.168.0.1 到 192.168.0.30 ;实际扫描范围:192.168.0.0 到 192.168.0.31 。
结论:
最后一次扫描的IP地址是给定子网的广播地址,即 192.168.0.31。

tips:这里可以直接使用 Nmap 的列表扫描进行查看,即-sL。

nmap -sL 192.168.0.1/27

image-20250512104218399

192.168.0.31

image-20250507195737867

端口扫描:谁在监听

image-20250507194206415

之前,我们了解了可以使用-sn参数选项来发现活动主机。在本小节中,我们希望发现那些在活动主机上正在处于监听状态的网络服务。网络服务是指在TCP或 UDP端口上正在侦听 传入连接 的任何进程。常见的网络服务包括 Web 服务器(通常将侦听 TCP 端口 80 和 443)和DNS服务器(通常将侦听UDP和TCP端口 53)。

按照设计,TCP 有 65,535 个端口, UDP也是如此。那么我们将如何确定哪些端口绑定了哪些服务?让我们来看看吧。

扫描TCP端口

了解TCP端口是否处于打开状态 的最简单、最基本的方法是尝试使用telnet连接到此端口。如果你倾向于使用Telnet客户端来进行扫描,你可能需要尝试与每个目标端口建立TCP连接。换句话说,你需要尝试与每个目标端口完成TCP三次握手过程;但是,只有处于打开状态的TCP端口才会做出适当的响应并且允许建立TCP连接。这个过程与Nmap的连接扫描过程 在本质上没有太大的不同。

连接扫描

在Nmap中,我们可以使用-sT来进行连接扫描(connect scan)。它会尝试与每个目标TCP端口完成TCP三次握手过程。如果TCP端口处于打开状态并且Nmap连接成功, 那么Nmap将立即断开已建立的连接。

在下面的截图中,我们运行nmap扫描的攻击机机器的IP 地址为192.168.124.148,我们可以看到目标系统打开了TCP端口22,关闭了端口23。在标记为1的部分中,可以看到TCP三次握手是如何完成的,并且随后将被Nmap使用TCP RST-ACK数据包断开。标记为 2 的部分则显示了对于关闭的端口的连接尝试,我们可以看到目标系统将会以 TCP RST-ACK 数据包进行响应。

image-20250109203152531

SYN扫描(Stealth Scan-隐蔽扫描)

与连接扫描尝试连接到目标TCP端口(即完成完整的TCP三次握手过程)不同的是,SYN扫描只会执行TCP三次握手的第一步:即发送TCP SYN数据包。因此, 使用这种扫描选项时所涉及的TCP三次握手过程将永远不会完成。这样做的优点是——由于从未建立完整的TCP连接,因此预计会导致产生更少的日志。因此,这种扫描选项通常会被认为是一种相对隐蔽的扫描方式。你可以在Nmap命令中添加-sS参数选项 来选择使用Nmap SYN 扫描。

在下面的截图中,我们扫描了目标系统的端口 22(处于打开状态)。标记为1的部分表示正处于监听状态的服务回复了TCP SYN-ACK数据包,然而,Nmap会继续以TCP RST数据包进行响应,而不是继续完成TCP三次握手过程。标记为2的部分显示了对于已关闭的端口的TCP连接尝试,在这种情况下,相关的数据包交换情况与上面的连接扫描示例中的情况相同。

image-20250109203212382

扫描UDP端口

尽管大多数服务将使用 TCP 进行通信,但是有一些服务也会使用 UDP 进行通信。例如DNS 、DHCP、NTP(网络时间协议-Network Time Protocol)、SNMP(简单网络管理协议-Simple Network Management Protocol)和 VoIP(Voice over IP)协议等。使用UDP进行通信时,不需要建立连接并随后将其断开,此外,它非常适合实时通信的需求场景,例如直播。这些都是我们考虑扫描和发现 那些正在侦听UDP端口的服务 的原因。

Nmap提供了参数选项-sU来帮助我们扫描UDP服务。由于UDP比TCP更加简单,因此我们预计流量交换情况也会有所不同。下面的截图显示了当Nmap向已关闭的UDP端口发送UDP数据包时,所产生的几个ICMP目标不可达(端口不可达)响应消息。

image-20250109203230704

限制目标端口

Nmap默认将扫描最常见的 1,000 个端口,然而,这可能不是我们想要的;因此, Nmap还为我们提供了更多的选择:

  • -F表示快速模式(Fast mode),它将扫描 100 个最常见的端口(而不是默认的 1000 个)。
  • -p[range]允许你指定要扫描的端口范围。例如, -p10-1024表示将扫描端口 10 到端口 1024,而-p-25表示将扫描 1 到 25 之间的所有端口。请注意, 如果选择使用-p-则会扫描所有端口,相当于-p1-65535 ,如果你想要尽可能彻底地进行端口扫描,它会是你最好的选择。

本节小结

Option 选项 Explanation 解释
-sT TCP连接扫描:完成完整的三次握手
-sS TCP SYN:只完成TCP三次握手的第一步
-sU UDP扫描
-F 快速模式:扫描 100 个最常见的端口
-p[range] 指定端口号范围: -p-表示扫描所有端口

答题

目标系统上的MACHINE_IP打开了多少个 TCP 端口?

sudo nmap -sS 10.10.226.7 

image-20250512104438725

6

MACHINE_IP上找到正处于监听状态的 Web 服务器并且使用浏览器去访问它,我们可以发现目标主页上显示的flag内容是?

tips:使用浏览器访问http://IP_ADDRESS:PORT_NUMBER,其中IP_ADDRESS为目标服务器的IP地址,PORT_NUMBER为正在侦听的web服务器的TCP端口号。

根据刚才的截图信息可知——http服务对应的端口号是8008;因此我们可以在攻击机上使用浏览器访问:10.10.226.7:8008

image-20250512104930825

THM{SECRET_PAGE_38B9P6} 。

image-20250512105912878

版本检测:提取更多信息

image-20250507194225246

操作系统检测

你可以通过添加-O选项来启用操作系统检测。顾名思义,操作系统检测选项会触发Nmap依靠各种指标来对目标操作系统做出有根据的猜测。在本例中,Nmap将检测到目标设备正在使用的操作系统是Linux 4.x 或 5.x;然而,在实际检测操作系统版本时并不能保证能够得到完全准确的检测结果。下面示例中的介于4.15和5.8之间的版本推测非常接近实际结果,但是在此示例中的目标主机的操作系统实际上是 5.15 版本的。

root@tryhackme:~# nmap -sS -O 192.168.124.211 
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-13 13:37 EEST
Nmap scan report for ubuntu22lts-vm (192.168.124.211)
Host is up (0.00043s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE
22/tcp open  ssh
MAC Address: 52:54:00:54:FA:4E (QEMU virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.8
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 1.44 seconds

服务和版本检测

当你发现了几个处于开放状态的端口,并且想要知道有哪些相关的服务正处于侦听状态。 你可以使用-sV选项来启用nmap版本检测功能。这对于通过更少的命令来收集有关目标的更多信息非常方便。如下面的终端输出显示了一个名为“VERSION”的附加列,其中包含了已经检测到的SSH服务器的版本信息。

root@tryhackme:~# nmap -sS -sV 192.168.124.211
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-13 13:33 EEST
Nmap scan report for ubuntu22lts-vm (192.168.124.211)
Host is up (0.000046s latency).
Not shown: 999 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
MAC Address: 52:54:00:54:FA:4E (QEMU virtual NIC)
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 0.25

如果你想要在一个选项中同时拥有-O-sV和更多选项的功能该怎么办?此时你可以选择使用Nmap中的-A参数选项。这个选项支持操作系统检测、版本扫描和路由跟踪等功能。

强制扫描

当我们运行Nmap端口扫描时,例如使用了-sS参数选项,那么目标主机有可能在主机发现阶段不进行回复(例如,目标主机不回复ICMP请求)。因此,Nmap会将此主机标记为已关闭状态,并且不会对其启动相关的端口扫描操作。在此,我们可以要求Nmap将所有主机视为在线,并且对每个主机进行端口扫描,包括那些在主机发现阶段并没有进行响应的主机。我们可以通过添加-Pn参数选项来触发这样的命令选择。

本节小结

Option 选项 Explanation 解释
-O 操作系统(OS)检测
-sV 服务和版本检测
-A 操作系统检测、版本检测和其他附加项
-Pn 扫描那些似乎已关闭的主机(即 跳过主机发现)

答题

目标主机MACHINE_IP上正在运行的 Web 服务器的名称和可检测到的版本信息是什么(目标Web服务器的名称、版本信息)?

sudo nmap -sS -sV -p8008 -Pn 10.10.226.7

image-20250512105607297

lighttpd 1.4.74

image-20250512105854432

Timing:多快才算快

image-20250507194244114

Nmap还提供了各种参数选项来控制Nmap扫描的速度和时间。

以正常速度运行Nmap扫描可能会触发IDS或其他安全解决方案,因此控制扫描速度是比较合理的选择。 Nmap提供了六个时间模板,它们的名称说明了一切:偏执的 (0-paranoid )、偷偷摸摸的 (1-sneaky )、礼貌的 (2-polite )、正常的 (3-normal )、激进的 (4-aggressive ) 和疯狂的 (5-insane )。你可以按名称或编号选择时间模板。例如,你可以添加-T0-T 0-T paranoid等参数选项来选择最慢的 Nmap扫描时间控制选项 。

在下面的 Nmap 扫描命令示例中,我们启动了针对 100 个最常见TCP端口的SYN扫描nmap -sS MACHINE_IP -F 。具体而言,我们将会以不同的扫描时间来进行重复的扫描操作:T0、T1、T2、T3 和 T4。在下面的命令设置中, Nmap花费了不同的时间来扫描100个常见的端口。如下表所示,根据相关的网络设置以及目标系统的不同,你实际上会得到不同的命令输出结果。

Timing 时间 Total Duration 总持续时间
T0 (paranoid-偏执的) 9.8 hours 9.8小时
T1 (sneaky-偷偷摸摸的) 27.53 minutes 27.53 分钟
T2 (polite-礼貌的) 40.56 seconds 40.56秒
T3 (normal-正常的) 0.15 seconds 0.15秒
T4 (aggressive-激进的) 0.13 seconds 0.13秒

在下面的截图中,我们可以看到Nmap发送不同数据包的时间消耗。当Nmap的扫描时间为T0时 ,可以看到Nmap在移动到下一个端口之前等待了5分钟(300秒)。

image-20250109203539258

当我们将Nmap扫描时间设置为T1参数选项时,如下面的截图所示,Nmap大概会在每两个端口之间等待 15 秒。

image-20250109203552672

然后, 当Nmap的扫描时间为T2时,nmap的间隔等待时间会降至 0.4 秒,如下图所示。

image-20250109203604044

最后,当Nmap使用默认情况下的T3时间选项时 , Nmap会表现为 运行地尽可能快,如下图所示。值得重复提及的是,这在实际操作中看起来会有所不同。在这种特殊情况下,Nmap会认为与目标主机的连接快速且可靠,因为没有发生数据包丢失。

image-20250109203616340

第二个有用的选项是控制并行服务探针的数量,并行探针的数量可以通过--min-parallelism <numprobes>--max-parallelism <numprobes>参数选项来进行控制。这些选项可用于设置针对一个主机组 同时活动的TCP和UDP端口探针数量的最小值和最大值。在默认情况下, nmap会自动控制并行探针的数量。如果网络性能较差,即发生丢包,那么并行探针的数量可能会降至 1;此外,如果网络运行情况良好,那么并行探针的数量可以会达到数百个。

类似的有用选项是--min-rate <number>--max-rate <number> 。顾名思义,它们可以控制nmap发送数据包的最小速率和最大速率。此速率将以每秒发送的数据包数的形式来体现。值得一提的是,这里指定的速率适用于整个扫描过程而不仅是单个主机。

我们将在本小节中介绍的最后一个参数选项是--host-timeout <time> 。该选项将指定你愿意等待的最长时间,它适用于速度较慢的主机或网络连接速度较慢的主机。

Option 选项 Explanation 解释
-T<0-5> 时间模板 – 偏执的(0-paranoid)、偷偷摸摸的(1-sneaky)、礼貌的(2-polite)、正常 的(3-normal)、激进的(4-aggressive) 和疯狂的(5-insane)
--min-parallelism <numprobes>--max-parallelism <numprobes> 并行探针(probes )的最小数量和最大数量
--min-rate <number>--max-rate <number> 最小速率和最大速率(数据包/秒)
--host-timeout 等待目标主机的最长时间

答题

在Nmap命令中,-T4参数选项的非数字等价物是什么?

-T aggressive

image-20250109203842385

输出(Output):控制你所看到的

本小节将重点关注以下内容:

  • 在扫描时显示附加信息;
  • 选择保存扫描报告的文件格式。

冗长模式和调试

在某些情况下,Nmap扫描可能需要很长时间才能完成或者产生将在屏幕上显示的任何输出结果。此外,有时你可能会对有关扫描进度的更多实时信息感兴趣。如果想获得有关Nmap扫描进度的更多信息可以通过添加-v来启用详细输出选项。如以下终端输出示例,我们先选择使用默认的输出详细程度(不添加任何用于控制输出内容的详细程度的参数选项)。

root@tryhackme:~# nmap -sS 192.168.139.1/24
Starting Nmap 7.92 ( https://nmap.org ) at 2024-08-13 18:57 EEST
Nmap scan report for 192.168.139.254
Host is up (0.000030s latency).
All 1000 scanned ports on 192.168.139.254 are in ignored states.
Not shown: 1000 filtered tcp ports (no-response)
MAC Address: 00:50:56:E0:FC:AE (VMware)

Nmap scan report for g5000 (192.168.139.1)
Host is up (0.000010s latency).
Not shown: 999 closed tcp ports (reset)
PORT    STATE SERVICE
902/tcp open  iss-realsecure

Nmap done: 256 IP addresses (2 hosts up) scanned in 41.84 seconds

然后,我们重复和上面的扫描类似的命令;但是,我们额外再添加-v选项来尝试获取更加详细的输出结果。如下所示,输出结果中提供的大量详细信息对于我们而言可能会非常有用,尤其是当我们在学习Nmap并探索不同的参数选项时。在下面的终端输出示例中,我们可以看到Nmap如何从一个阶段到另一个阶段:ARP ping 扫描、并行DNS解析,以及最后对每个活动(在线)主机进行SYN隐蔽扫描。

root@tryhackme:~# nmap 192.168.139.1/24 -v
Starting Nmap 7.92 ( https://nmap.org ) at 2024-08-13 19:01 EEST
Initiating ARP Ping Scan at 19:01
Scanning 255 hosts [1 port/host]
Completed ARP Ping Scan at 19:01, 7.94s elapsed (255 total hosts)
Initiating Parallel DNS resolution of 1 host. at 19:01
Completed Parallel DNS resolution of 1 host. at 19:02, 13.00s elapsed
Nmap scan report for 192.168.139.0 [host down]
Nmap scan report for 192.168.139.2 [host down]
[...]
Nmap scan report for 192.168.139.253 [host down]
Nmap scan report for 192.168.139.255 [host down]
Initiating Parallel DNS resolution of 1 host. at 19:02
Completed Parallel DNS resolution of 1 host. at 19:02, 0.05s elapsed
Initiating SYN Stealth Scan at 19:02
Scanning 192.168.139.254 [1000 ports]
[...]
Initiating SYN Stealth Scan at 19:02
Scanning g5000 (192.168.139.1) [1000 ports]
Discovered open port 902/tcp on 192.168.139.1
Completed SYN Stealth Scan at 19:02, 0.03s elapsed (1000 total ports)
Nmap scan report for g5000 (192.168.139.1)
Host is up (0.0000090s latency).
Not shown: 999 closed tcp ports (reset)
PORT    STATE SERVICE
902/tcp open  iss-realsecure

Read data files from: /usr/bin/../share/nmap
Nmap done: 256 IP addresses (2 hosts up) scanned in 42.19 seconds
           Raw packets sent: 3512 (146.336KB) | Rcvd: 2005 (84.156KB)

一般情况下, -v参数选项对于输出内容的详细程度来说已经足够了;但是,如果你仍然不满意,那么还可以通过添加另一个“v”(例如-vv甚至-vvvv)来增加输出结果的详细程度级别。你还可以直接指定输出内容的详细程度级别,例如使用-v2-v4等选项。你甚至可以在Nmap扫描开始后按“v”来增加输出内容的详细程度级别。

如果所有这些冗长的输出内容选项都不能满足你的实际需求,那么你还可以考虑使用-d参数选项来进行调试级别的输出内容选择。同样,你可以通过添加一个或多个“d”或直接指定调试级别来提高它,最大的调试级别为-d9 ;在选择具体的参数选项之前,请确保你已经准备好处理数千条信息和调试行。

保存扫描报告

在很多情况下,我们需要保存Nmap的扫描结果。 Nmap为我们提供了多种保存格式。三个最有用的是正常(人性化)输出格式、 XML输出格式和grep-able输出格式(参考grep命令)。通常,你可以选择如下所示的Nmap扫描报告格式:

  • -oN <filename> - 正常输出格式;
  • -oX <filename> - XML输出格式;
  • -oG <filename> - grep-able的输出格式(对于grepawk很有用);
  • -oA <basename> - 以所有主要格式输出。

在下面的终端示例中,我们可以看到使用-oA选项时的示例。它生成了三个带有扩展名nmapxmlgnmap的Nmap扫描报告,分别表示正常、 XML和可grep的输出格式。

root@tryhackme:~# nmap -sS 192.168.139.1 -oA gateway
Starting Nmap 7.92 ( https://nmap.org ) at 2024-08-13 19:35 EEST
Nmap scan report for g5000 (192.168.139.1)
Host is up (0.0000070s latency).
Not shown: 999 closed tcp ports (reset)
PORT    STATE SERVICE
902/tcp open  iss-realsecure

Nmap done: 1 IP address (1 host up) scanned in 0.13 seconds
# ls
gateway.gnmap  gateway.nmap  gateway.xml

答题

我们必须在nmap命令中添加什么参数选项才能选择进行调试(debugging)化的内容输出?

-d

image-20250109204106947

本文小结

在本文内容中,我们学习了如何使用Nmap发现任何网络上的活动主机。我们还探讨了常见的端口扫描类型以及如何使用Nmap查找服务的版本号。我们还学习了如何控制Nmap扫描的时间,最后,我们介绍了用于保存Nmap扫描结果的不同格式。

值得注意的是,我们最好以sudo权限运行Nmap,这样我们就可以使用它的所有功能。使用本地用户权限运行Nmap虽然仍然可以让它工作;但是,你应该可以预料到许多功能将不再可用。当我们以本地用户身份运行Nmap时,你只能使用Nmap很小一部分的功能。例如,如果你使用sudo权限运行Nmap, 它将会自动使用SYN 扫描( -sS ),但如果你是以本地用户身份运行Nmap的话,则默认使用的是TCP连接扫描( -sT )。这是因为构造某些数据包(例如发送TCP SYN 数据包)时需要具备root权限。

Nmap是一个功能非常丰富的端口扫描工具,我们在本文内容中只介绍了最常见和最重要的一些功能。在TryHackMe的网络安全学习模块中,有四个实验房间专门用于学习Nmap。下表列出了我们在本文中已解释的大部分Nmap命令参数选项,请参考下表以帮助我们回顾和记住它们。

Option(选项) 解释
-sL List scan – 列出目标但不进行扫描
Host Discovery 主机发现
-sn Ping 扫描 – 仅主机发现
Port Scanning 端口扫描
-sT TCP connect scan – 完成全部的三次握手
-sS TCP SYN – 三次握手的第一步
-sU UDP 扫描
-F 快速模式——扫描 100 个最常用的端口
-p[range] 指定端口号范围 – -p- 扫描所有端口
-Pn 将所有主机视为在线 – 扫描那些似乎处于关闭状态的主机
Service Detection 服务检测
-O OS detection(操作系统检测)
-sV 服务版本检测
-A 操作系统检测、版本检测和其他附加功能
Timing 时间
-T<0-5> 时间模板 – 偏执的(0-paranoid)、偷偷摸摸的(1-sneaky)、礼貌的(2-polite)、正常 的(3-normal)、激进的(4-aggressive) 和疯狂的(5-insane)
--min-parallelism <numprobes> and --max-parallelism <numprobes> 并行探测的最小数量和最大数量
--min-rate <number> and --max-rate <number> 最小和最大速率(数据包/秒)
--host-timeout 等待目标主机的最长时间
Real-time output 实时输出
-v 详细程度 – 例如 -vv-v4
-d 调试级别 – 例如 -d-d9
Report 报告
-oN <filename> Normal(正常的)输出格式
-oX <filename> XML 输出格式
-oG <filename> grep的输出格式
-oA <basename> 以所有主要格式输出

答题

如果你以本地用户权限运行nmap MACHINE_IP 命令,那么此时 Nmap 将会使用哪种扫描?

-sT:TCP 连接扫描(connect scan)

image-20250109202933513

posted @ 2025-05-12 11:04  Hekeatsll  阅读(360)  评论(0)    收藏  举报