本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/nmap02
介绍
在之前的文章中,我们专注于使用Nmap发现在线主机,并且到目前为止,我们已经介绍了 Nmap 扫描的三个步骤:
- 枚举目标
- 发现存活主机
- 反向 DNS 查询
下一步将使用nmap检查哪些端口是打开的和监听的,以及哪些端口是关闭的;因此,我们将重点介绍端口扫描以及 nmap 使用的不同类型的端口扫描。
本文将解释:
- TCP连接端口扫描
- TCP SYN 端口扫描
- UDP端口扫描
TCP和UDP端口状态
就像 IP 地址用于指定网络上的主机一样,TCP 端口或 UDP 端口用于标识在该主机上运行的网络服务。服务器遵循特定的网络协议来提供网络服务,此处可参考的示例包括提供时间、响应 DNS 查询和提供网页等网络服务。
一个端口通常会链接到对应的某个服务,例如,HTTP 服务器默认会绑定到 TCP 端口 80;此外,如果 HTTP 服务器支持 SSL/TLS,它将侦听 TCP 端口 443。(TCP 端口 80 和 443 是 HTTP 和 HTTPS 的默认端口;但是,如果需要,网络服务器管理员可能会选择其他端口号。)
在相同的 IP 地址上,任何单个TCP 或 UDP 端口上最多只能有一项服务可以被侦听。
我们可以简单地将端口分为两种状态:
- Open:打开的端口表示该端口上有一些服务正在侦听。
- Closed:关闭的端口表示该端口上没有服务被侦听。
但是,在实际情况中,我们需要考虑防火墙的影响,例如,一个端口可能是开放的,但防火墙可能会阻止数据包。 因此,Nmap 将考虑以下六种端口状态:
Open:表示服务正在监听指定的端口。
Closed:表示没有服务在监听指定的端口,尽管该端口是可访问的。 关于 " 可访问 ",意思是它是可访问的并且没有被防火墙或其他安全设备/程序阻止。
Filtered:表示由于端口不可访问,Nmap无法判断该端口是打开还是关闭。 这种状态通常是由于防火墙阻止 Nmap 到达该端口,Nmap 的数据包可能会被阻止到达该端口; 或者,响应被阻止到达 Nmap 的主机。
Unfiltered:表示虽然端口是可访问的,但 Nmap 无法确定端口是打开还是关闭。 使用 ACK 扫描 (-sA )时可能会遇到此状态。
Open|Filtered:这意味着 Nmap 无法确定端口是打开的还是被过滤的。
Closed|Filtered:这意味着 Nmap 无法确定端口是关闭还是过滤。
答题
TCP标志
Nmap 支持不同类型的 TCP 端口扫描,要了解这些端口扫描之间的区别,我们需要查看 TCP 标头。
TCP 标头是 TCP 段的前 24 个字节,下图显示了 RFC 793 中定义的 TCP 标头。这个图起初看起来很复杂;但是,其实很容易理解:在第一行,我们有源 TCP 端口号和目标端口号,我们可以看到端口号被分配了 16 位(2 个字节);在第二行和第三行中,我们有序列号和确认号;全图总共 6 行,每行分配了 32 位(4 个字节),一共有 24 个字节。
我们需要关注的重点是Nmap可以设置或取消设置的TCP标志。我们以红色突出显示了 TCP 标志,设置标志位意味着将其值设置为 1。
从左到右,TCP 标头标志是:
- URG:紧急(Urgent )标志表示紧急指针字段是有效的。紧急指针(urgent pointer)指示传入的数据是紧急的,并且设置了 URG 标志的 TCP 段会立即处理,而无需考虑必须等待先前发送的 TCP 段。
- ACK:确认(Acknowledgement )标志表示确认号是有效的。它用于确认 TCP 段的接收。
- PSH:推送(Push)标志,要求 TCP 及时将数据传递给应用程序。
- RST:复位(Reset )标志用于复位连接。另一个设备(例如防火墙)可能会发送它来断开 TCP 连接;当数据发送到主机并且接收端没有服务应答时也会使用此标志。
- SYN:同步(Synchronize )标志,用于启动 TCP 3 次握手并与其他主机同步序列号。 在建立 TCP 连接时,会随机设置序列号。
- FIN:发送方没有更多数据要发送。
答题
Nmap端口扫描-TCP连接扫描
TCP 连接扫描通过完成 TCP 3 次握手来工作。在标准的 TCP 连接建立中,客户端会发送一个设置了 SYN 标志的 TCP 数据包,如果目标端口是打开的,则目标服务器将以 SYN/ACK 响应,最后,客户端再通过发送 ACK 完成TCP 3 次握手。
我们想了解的是 TCP 端口是否打开,而不是为了建立 TCP 连接;因此,在使用nmap进行TCP连接扫描时,我们会通过发送 RST/ACK 确认其状态,从而使TCP连接断开。在nmap中你可以选择使用 -sT选项运行 TCP 连接扫描。
需要注意的是,如果你不是特权用户(root 或 sudoer),nmap中的TCP 连接扫描是发现开放的TCP端口的唯一可能选项。
在以下 Wireshark 数据包捕获窗口中,我们看到 Nmap 会发送带有 SYN 标志的 TCP 数据包到各种端口,256、443、143 等。
默认情况下,Nmap 会尝试连接 1000 个最常用的端口。关闭的 TCP 端口会用 RST/ACK 响应 SYN 数据包,以此表明它没有打开,当我们尝试与它们启动 TCP 3 次握手时,所有关闭的端口都会重复这种模式。
从上图我们注意到 143 端口是开放的,所以它会回复一个 SYN/ACK,然后Nmap 再通过发送一个 ACK 完成了TCP 3 次握手过程。
下图显示了我们的 Nmap 主机和目标系统的 143 端口之间交换的所有数据包。前三个数据包是正在完成的 TCP 3 次握手,然后第四个数据包会使用RST/ACK 数据包将TCP连接拆毁。
为了说明 -sT(TCP 连接扫描)的效果,请查看以下命令示例,它将返回 开放状态下的目标端口的详细列表。
pentester@TryHackMe$ nmap -sT MACHINE_IP
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for MACHINE_IP
Host is up (0.0024s latency).
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
143/tcp open imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 0.40 seconds
请注意,我们可以使用 -F 启用快速模式并将扫描端口的数量从 1000 个减少到 100 个最常见的端口。值得一提的是,还可以添加 -r 选项以连续顺序扫描端口,而不是随机顺序;当测试端口是否以一致的方式打开时,此选项会很有用。
答题
Nmap端口扫描-TCP SYN 扫描
在Nmap中,非特权用户仅限于使用TCP连接扫描,但是,Nmap默认扫描模式是 SYN 扫描,该扫描模式需要特权(root 或 sudoer)用户才能运行。SYN 扫描不需要完成 TCP 3 次握手;相反,它会在收到服务器的响应后断开连接。
因为我们没有建立 TCP 连接,所以这降低了扫描被记录的机会,在Nmap中我们可以使用 -sS 选项来选择这种扫描类型。下图显示了 TCP SYN 扫描如何在未完成 TCP 3 次握手的情况下工作。
以下来自Wireshark的截图显示了TCP SYN 扫描进行的过程,目标的TCP 端口关闭时的行为和在TCP 连接扫描中类似(关闭的目标端口会响应一个RST,ACK)。
为了更好地查看两种扫描(TCP连接扫描和TCP SYN扫描)之间的差异,请参考以下的截图。
在下图的上半部分,我们可以看到一个 TCP连接扫描 -sT 的流量情况:任何打开的 TCP 端口都需要在Nmap关闭连接之前完成 TCP 3 次握手;在下图的下半部分,我们看到一个 SYN 扫描 -sS 是不需要完成 TCP 3 次握手的,相反,一旦收到来自目标的 SYN/ACK 数据包,Nmap 就会发送一个 RST 数据包来断开与目标端口的连接过程。
TCP SYN 扫描是以特权用户运行 Nmap 时的默认扫描模式(以 root 身份运行或使用 sudo),这是一个非常可靠的选择。SYN扫描能够成功地发现你之前通过 TCP 连接扫描找到的开放端口,但不会与目标端口建立完全的TCP 连接。
pentester@TryHackMe$ sudo nmap -sS MACHINE_IP
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:53 BST
Nmap scan report for MACHINE_IP
Host is up (0.0073s latency).
Not shown: 994 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
110/tcp open pop3
111/tcp open rpcbind
143/tcp open imap
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 1.60 seconds
答题
tips:IRC是因特网中继聊天(Internet Relay Chat),一种网络聊天协议。
Nmap端口扫描-UDP扫描
UDP 是一种无连接协议,因此它不需要任何握手来建立连接。 我们不能保证侦听 UDP 端口的服务会响应我们的数据包,但是,如果将 UDP 数据包发送到关闭的端口,则会返回 ICMP 端口不可达错误(类型 3,代码 3)。 在nmap中,你可以使用 -sU 选项执行UDP 扫描,此外,你也可以将其与另一个 TCP 扫描结合使用。
如下图显示,如果我们向一个开放的 UDP 端口发送一个 UDP 数据包,我们不能期望任何回复;所以,向开放端口发送 UDP 数据包并不会告诉我们任何信息。
但是,如下图所示,如果目标的UDP端口关闭,我们就能期望得到一个类型为3(目的地不可达) 的 ICMP 数据包,并且它的代码为3(端口不可达)。
换句话说,不产生任何响应的 UDP 端口会被Nmap声明为 处于打开状态下的端口。
在下面的 Wireshark 捕获的效果图中,我们可以看到每个关闭的端口都会生成一个 ICMP 数据包目标不可达(端口不可达)消息。
查看下面的例子:对目标服务器启动 UDP 扫描是有价值的,一方面,我们能够得知 111 端口是开放的,另一方面,Nmap 无法确定 UDP 端口 68 是处于打开状态还是过滤状态。
pentester@TryHackMe$ sudo nmap -sU 10.10.201.97
Starting Nmap 7.60 ( https://nmap.org ) at 2021-08-30 09:54 BST
Nmap scan report for 10.10.201.97
Host is up (0.00061s latency).
Not shown: 998 closed ports
PORT STATE SERVICE
68/udp open|filtered dhcpc
111/udp open rpcbind
MAC Address: 02:45:BF:8A:2D:6B (Unknown)
Nmap done: 1 IP address (1 host up) scanned in 1085.05 seconds
答题
tips:UDP 端口扫描比 TCP 端口扫描花费更长的时间,在上面的例子中,我们添加了 -F 标志以加快扫描速度(扫描最常见的100个端口而不是1000);我们还添加了 -v 以在扫描进行时获取详细信息。
Nmap端口扫描-微调范围和性能
你可以指定要扫描的端口,而不是默认的 1000 个端口。指定端口的方式很直观,让我们看一些例子:
- 端口列表:使用-p22,80,443 将扫描端口 22、80 和 443。
- 端口范围:使用-p1-1023 将扫描 1 到 1023 之间的所有端口,而使用 -p20-25 将扫描 20 到 25 之间的端口。
你可以使用 -p- 请求扫描所有端口,-p-将扫描所有的65535个端口;如果要扫描最常见的 100 个端口,可以添加 -F;如果使用 --top-ports 10 将检查十个最常见的端口。
你可以使用 -T<0-5> 控制扫描时间,其中-T0 是最慢的,而 -T5 是最快的;根据 Nmap 手册页,有六个关于扫描时间的范本:
- paranoid (0) - paranoid 偏执的
- sneaky (1) - sneaky 偷偷摸摸的
- polite (2) - polite 礼貌的
- normal (3) - normal 正常的
- aggressive (4) - aggressive 有侵略性的
- insane (5) - insane 疯狂的
为避免 IDS 警报,建议考虑使用 -T0 或 -T1。其中-T0 选项一次只会扫描一个端口,并会在发送每个探测之间等待 5 分钟,所以你可以大概猜出扫描一个目标需要多长时间才能完成。如果不指定任何时间,Nmap 会使用普通的 -T3选项。
注意: -T5 在速度方面是最激进的,但是,由于丢包的可能性增加,使用-T5可能会影响扫描结果的准确性;-T4 经常在 CTF 期间和扫描靶机时使用;-T1 经常在实战中使用,在实战中保持隐蔽性是更重要的。
你可以选择使用 --min-rate <number>
和 --max-rate <number>
来控制数据包速率;例如,--max-rate 10
或 --max-rate=10
将确保你的nmap扫描器每秒发送的数据包不超过 10 个。
此外,你可以使用--min-parallelism <numrobes>
和--max-parallelism <numrobes>
控制探测并行化。Nmap 会探测目标以发现哪些主机是活动的,哪些端口是开放的; 探测并行化的意思是:指定可以并行运行的此类探测的数量。
例如,--min-parallelism=512
将使得 Nmap 保持至少 512 个并行探针; 这 512 个探针与主机发现和开放端口有关。
答题
小结
本文涵盖了三种类型的扫描方式
这些扫描类型可以让你开始发现目标主机上正在运行的 TCP 和 UDP 服务。
标签:UDP,端口扫描,扫描,端口,TCP,Nmap,数据包,nmap From: https://www.cnblogs.com/Hekeats-L/p/16830628.html