在信息安全的世界里,端口扫描是一个至关重要的环节。企业、组织或者普通用户会通过端口扫描来探测系统中开放的端口及其对应的服务。想象一下,如果把电脑比作一条走廊,那么端口扫描就像是在这条走廊上寻找打开的门。渗透测试人员利用这些信息来寻找进入计算机的路径。端口扫描是“主动侦察”阶段的一部分,这是任何渗透测试中不可或缺的一环。接下来,我想跟大家聊聊端口扫描的一些基本概念。
PING 扫描
首先,让我们来谈谈 Ping 扫描。Ping 扫描的主要目的是扫描整个网络块或单个目标,检查目标是否存活。它通过发送一个 ICMP 回显请求(即 Ping 请求)到目标。如果收到 ICMP 回复,那么就可以确定目标是活的。
不过,随着安全防护措施的加强,越来越多的防火墙和路由器开始阻止 ICMP Ping 请求,因此你可能需要采取其他方法来准确判断目标是否存活。
TCP 半开扫描
接下来,最常用的端口扫描方式是 TCP 半开扫描。这种扫描方式相对快速,每秒钟可以扫描成千上万个端口。它的工作原理是:发送一个带有 SYN 标志的数据包,等待目标返回 SYN-ACK,而不完成整个 TCP 握手过程。
当你启动一个 TCP 连接时,首先会发送一个带有 SYN 标志的数据包到目标。目标收到后,会用带有 SYN-ACK 标志的数据包进行确认。最后,发送方会再发送一个带有 ACK 标志的数据包,以完成连接。
但是在半开扫描中,由于不发送最后的 ACK 数据包,所以连接并没有真正建立。然而,这种方式可以告诉你目标的端口是否可用且正在监听。如果从目标收到一个 RST(重置)数据包,就说明目标是活跃的,但端口是关闭的。如果没有收到任何响应,而你确认目标是存活的,那么这个端口就被视为被过滤。
TCP 完整连接扫描
TCP 完整连接扫描与半开扫描类似,不过它会完成握手过程,发送最终的 ACK 数据包。这种方法速度相对较慢,因为需要更多的数据包来完成连接。
UDP 扫描
UDP 扫描通常用于检测 DNS、SNMP 和 DHCP 服务。UDP 扫描通过发送一个数据包(通常是空的)来工作。这个数据包可以是随机的负载。目标如果返回 ICMP 不可达错误(类型 3,代码 3)数据包,那么这个端口就被视为关闭。
如果返回的是其他代码的 ICMP 不可达错误数据包,则表示该数据包被过滤。如果完全没有响应,则这个端口被认为是开放或被过滤。使用 UDP 的问题在于它的连接不可靠,因为它没有办法像 TCP 那样建立连接或同步数据包。因此,UDP 扫描通常比较慢。你可能需要发送多个数据包,并等待以确定端口的状态。
隐形扫描 — NULL、FIN、X-MAS
这些扫描类型被称为隐形扫描,因为你通过特定的标志组合来诱导目标响应,而不真正建立连接。FIN 扫描发送一个不会在现实中出现的数据包:带有 FIN 标志的数据包,而没有先建立连接。
如果从目标收到 RST 数据包,根据 RFC 的规定,该端口被视为关闭。如果完全没有数据包返回,则该端口被视为开放。X-MAS 扫描之所以得名,是因为它的标志组合使数据包看起来像圣诞树一样闪耀。它发送的 TCP 数据包设置了 URG、PUSH 和 FIN 标志,再次地,如果没有收到数据包,则该端口被视为开放;如果收到 RST 数据包,则该端口被视为关闭。
NULL 扫描则发送一个不设置任何标志的 TCP 数据包。如果收到 RST 数据包响应,说明该端口关闭;如果没有响应,则表示该端口开放。这些扫描方法很好,因为它们不容易在日志中出现,是一些最小化的端口扫描技术。
不过,问题在于微软的 TCP/IP 堆栈实现,所有端口都会被视为关闭。但如果你收到开放端口的响应,说明目标系统并非运行微软操作系统。
结论
总的来说,端口扫描是任何漏洞分析或渗透测试的第一步。知道哪些端口开放是积极与目标进行通信的基础。市面上有很多优秀的端口扫描工具,其中Nmap 是一个非常强大和多功能的端口扫描器,拥有自己的脚本引擎。
我是V浪,我们明天再见!
领取专属 10元无门槛券
私享最新 技术干货