在执行端口扫描时,Nmap 会根据目标主机的响应行为,将端口状态分类为六种基本类型:open(开放的)、closed(关闭的)、filtered(被过滤的)、unfiltered(未被过滤的)、open|filtered(开放或被过滤的)、以及 closed|filtered(关闭或被过滤的)。这些状态反映了端口的可访问性、应用程序监听情况以及网络环境中可能存在的过滤机制。理解这些状态及其背后的含义,可以帮助安全团队识别潜在风险并制定防御策略。本文将详细介绍这些扫描返回状态,并探讨一些常见的绕过防火墙的技术和方法。
一、Nmap 扫描返回状态解析
1. Open(开放的)
- 定义:端口处于
open状态时,表明目标主机上有一个应用程序正在该端口上积极监听并接收 TCP 连接或 UDP 数据报文。 - 技术细节:对于 TCP 端口,Nmap 通过发送 SYN 数据包并接收到 SYN/ACK 响应,确认端口开放;对于 UDP 端口,开放状态通常由应用程序返回的特定响应(如 ICMP 端口不可达消息的反向推断)来判断。
- 实际意义:开放端口通常意味着存在运行的服务(如 HTTP 的 80 端口或 SSH 的 22 端口),这可能是合法服务,也可能是潜在的安全风险点。
- 示例场景:扫描目标主机的 80 端口时,若返回 SYN/ACK,则 Nmap 标记为
open,表明可能运行着 Web 服务器。 - 注意事项:开放端口是攻击者的首要目标,需确保服务必要且已加固。
2. Closed(关闭的)
- 定义:端口被标记为
closed时,表示该端口对 Nmap 是可访问的(即可以接收探测数据包并作出响应),但当前没有任何应用程序在其上监听。 - 技术细节:对于 TCP,Nmap 发送 SYN 数据包后,若收到 RST(复位)响应,表明端口关闭;对于 UDP,若收到 ICMP 端口不可达消息,也可推断端口关闭。
- 实际意义:关闭的端口不会直接暴露服务,但其可访问性仍可能泄露目标主机的存在或操作系统信息(如 TCP 堆栈特征)。
- 示例场景:扫描 12345 端口时,若返回 RST 而非 SYN/ACK,则标记为
closed,表明该端口未被使用。 - 注意事项:大量关闭端口的响应可能被防火墙伪装,需结合其他扫描技术进一步验证。
3. Filtered(被过滤的)
- 定义:当端口被标记为
filtered时,Nmap 无法确定其是否开放,因为探测数据包被某种过滤机制阻止,无法到达目标端口。 - 技术细节:过滤通常由防火墙、路由器规则或主机上的软件(如 iptables)实施,导致 Nmap 未收到任何响应(即超时)或收到 ICMP 不可达消息(如“主机不可达”或“通信被禁止”)。
- 实际意义:过滤状态表明网络中存在防护措施,可能隐藏了端口的真实状态,增加了扫描的复杂性。
- 示例场景:扫描 445 端口(SMB 服务常用端口)时,若防火墙丢弃探测包,Nmap 标记为
filtered。 - 高级分析:过滤可能是动态的(如基于状态的防火墙)或静态的(如端口屏蔽规则),需结合上下文判断。
4. Unfiltered(未被过滤的)
- 定义:端口处于
unfiltered状态时,表明该端口对 Nmap 是可访问的,但 Nmap 无法明确判断其是开放还是关闭。 - 技术细节:此状态仅出现在 ACK 扫描中。ACK 扫描通过发送 TCP ACK 数据包并观察响应来探测防火墙规则。若收到 RST 响应,表明端口未被过滤,但不反映应用程序监听状态。
- 实际意义:未被过滤的端口表明防火墙允许数据包通过,但后续扫描(如 SYN 或窗口扫描)需进一步确认其开放性。
- 示例场景:ACK 扫描 3389 端口(RDP)时,若返回 RST,则标记为
unfiltered,需用其他扫描类型验证。 - 使用建议:此状态常用于映射防火墙规则集,而非直接判断服务状态。
5. Open|Filtered(开放或被过滤的)
- 定义:当 Nmap 无法确定端口是开放还是被过滤时,会将其归类为
open|filtered。 - 技术细节:此状态常见于开放端口未响应探测的情况。例如,UDP 扫描中,若未收到任何响应,既可能是端口开放但应用程序未回复,也可能是过滤器丢弃了数据包。类似情况也出现在 TCP 的 FIN、Null 或 Xmas 扫描中。
- 实际意义:这种不确定性反映了扫描环境的复杂性,可能涉及防火墙丢包或服务配置的静默行为。
- 示例场景:UDP 扫描 53 端口(DNS)时,若无响应,可能因 DNS 服务未配置响应或防火墙过滤,标记为
open|filtered。 - 解决方法:可通过调整扫描参数(如增加重试次数)或使用其他协议类型(如 TCP)进一步确认。
6. Closed|Filtered(关闭或被过滤的)
- 定义:端口被标记为
closed|filtered时,Nmap 无法确定其是关闭还是被过滤。 - 技术细节:此状态仅出现在 IPID Idle 扫描中。Idle 扫描利用“僵尸主机”的 IPID 序列预测目标端口状态,若无法区分关闭端口的 RST 响应和过滤导致的无响应,则归为此类。
- 实际意义:此状态较为罕见,主要用于高级扫描技术,揭示目标网络的深层防护机制。
- 示例场景:在 Idle 扫描中,若僵尸主机的 IPID 变化不明确,目标端口可能标记为
closed|filtered。 - 注意事项:Idle 扫描依赖第三方主机,准确性受网络条件影响较大。
扩展分析:端口状态的扫描技术与影响因素
扫描技术对状态的影响
Nmap 支持多种扫描类型,每种类型对端口状态的判断依据不同:
- SYN 扫描(-sS):通过半开放连接(SYN -> SYN/ACK 或 RST)判断
open或closed,若无响应则为filtered。 - UDP 扫描(-sU):依赖应用程序响应或 ICMP 消息,常导致
open|filtered的模糊状态。 - ACK 扫描(-sA):专注于防火墙规则,产生
unfiltered或filtered。 - FIN/Null/Xmas 扫描(-sF/-sN/-sX):利用 TCP 协议特性,可能出现
open|filtered。
影响状态的外部因素
- 防火墙与 NAT:状态ful 防火墙可能动态过滤未建立连接的流量。
- 网络延迟:超时可能导致误判为
filtered。 - 目标配置:某些服务可能故意不响应探测(如静默丢弃)。
二、绕过防火墙的Nmap扫描技术
防火墙是网络安全的第一道防线,通过规则过滤流入和流出的流量,阻挡未经授权的访问或恶意请求。在渗透测试中,防火墙常会干扰Nmap的端口扫描,拦截探测包,导致结果不完整,开放端口被隐藏,或大量端口标记为filtered。为了突破这些限制,渗透测试人员需要掌握巧妙的扫描策略,在合法合规的测试环境中绕过防火墙,获取目标系统的真实信息。以下是四种常见且有效的技术:
1. 慢速扫描、随机化与分片化
- 原理:防火墙通常通过检测扫描频率或模式来识别异常流量。快速或规律的扫描容易触发警报,而慢速、随机化和分片化则能降低被察觉的风险。
- 慢速扫描:通过减慢扫描速率(如每秒少量探测),避开防火墙的时间阈值检测。
- 随机化:打乱端口顺序或目标主机顺序,使扫描行为看起来更像正常流量,难以被模式匹配规则拦截。
- 分片化:将探测包分割为多个小片段发送,绕过防火墙对完整数据包的检查。
- 命令示例:
nmap -T1 -f --randomize-hosts -p 1-1000 <target_ip>-T1:最慢速模板(每秒少于10个包)。-f:启用数据包分片。--randomize-hosts:随机化目标顺序。
- 应用场景:适合高度敏感的环境,如配备IDS/IPS的网络。
2. 伪装源IP与端口
- 原理:防火墙可能根据源IP或端口规则过滤流量。通过伪装,可以绕过黑名单或信任特定端口的规则。
- 伪装源IP:使用欺骗性IP地址(即虚假源IP)发起扫描,让防火墙难以追踪或封锁真实扫描者。需中间设备(如路由器)配合,或通过反弹主机发送探测。
- 伪装源端口:将源端口设置为防火墙信任的值(如53/DNS或80/HTTP),可能绕过端口限制。
- MAC伪装:在局域网中,结合
--spoof-mac伪装硬件地址,增加隐蔽性。 - 命令示例:
nmap -S 10.0.0.1 -g 53 -p 80 <target_ip>-S:指定伪装的源IP。-g:设置源端口(如53)。
3. 多协议扫描(TCP、UDP、ACK、SYN)
-
原理:防火墙对不同协议的防护力度不同。TCP规则通常较严格,而UDP或特殊TCP标志可能被忽视。
-
UDP扫描:UDP无连接特性使其难以被完全屏蔽,若端口开放且无响应,可能漏判。
-
SYN扫描:默认的半连接扫描(发送SYN,接收SYN-ACK),由于未完成三次握手,隐蔽性较强。
-
ACK扫描:发送ACK包,测试防火墙对异常流量的反应,常用于区分
filtered与closed。- 无防火墙或端口关闭:目标主机返回RST(重置)包,因为ACK包未对应任何已有连接,表明端口
closed且未被过滤。 - 防火墙过滤:若防火墙丢弃ACK包或无响应,Nmap标记端口为
filtered,因为无法确认状态。
- 无防火墙或端口关闭:目标主机返回RST(重置)包,因为ACK包未对应任何已有连接,表明端口
-
命令示例:
nmap -sU -sS -p 1-1024 <target_ip>-sU:UDP扫描。-sS:SYN扫描。
4. IPv6扫描
- 原理:IPv6作为新一代协议,地址空间庞大,但许多防火墙仍以IPv4规则为主,对IPv6流量监控不足。如防火墙可能仅过滤IPv4的22端口,而IPv6的SSH服务未受保护。
- 优势:目标可能在IPv6上暴露服务,而传统IPv4扫描无法发现。
- 注意:需确保目标支持IPv6,且测试环境具备IPv6连接。
- 命令示例:
nmap -6 <target_ipv6>-6:启用IPv6扫描。
具体示例
SYN 规避扫描
通过使用 SYN 扫描(半连接扫描),可以避免完整的三次握手,从而减少被防火墙检测到的概率。此方法适用于探测开放端口时需要低调和隐蔽。
sudo nmap 10.129.2.28 -p 21,22,25 -sS -Pn -n --disable-arp-ping --packet-trace
ACK 规避扫描
通过 ACK 扫描,利用防火墙对 ACK 包的响应行为进行测试。这种方法适用于探测是否存在防火墙或判断端口是被过滤还是关闭。
sudo nmap 10.129.2.28 -p 21,22,25 -sA -Pn -n --disable-arp-ping --packet-trace
诱饵规避扫描
使用多个随机源 IP 作为诱饵来掩盖真实的扫描来源。通过生成多个虚假的源 IP,可以使目标系统难以追踪到实际的扫描者。此方法可有效绕过防火墙和入侵检测系统。
# 生成 5 个随机 IP 地址,指定连接来源
sudo nmap 10.129.2.28 -p 80 -sS -Pn -n --disable-arp-ping --packet-trace -D RND:5
# 在 UDP 扫描中结合诱饵与更多的重试次数,提高成功率
sudo nmap -sSU -p 53 --script dns-nsid 10.129.2.48 -Pn -n --disable-arp-ping --packet-trace -D RND:50 --max-retries 50 -sV
探测分析扫描
通过详细的操作系统检测(-O)以及关闭 ARP 探测(--disable-arp-ping),可以更精确地分析目标系统的操作系统和其他相关信息。
sudo nmap 10.129.2.28 -n -Pn -p445 -O
基于不同源规避扫描
通过指定特定的网络接口(如 tun0)发送请求,可以有效绕过防火墙的源 IP 过滤。这种方法适用于使用虚拟网络或 VPN 的渗透测试。
sudo nmap 10.129.2.28 -n -Pn -p 445 -O -S 10.129.2.200 -e tun0
基于 DNS 端口发出的 SYN 规避扫描
通过将源端口设置为 DNS 的标准端口(53),可以绕过防火墙对常见协议端口的限制。
sudo nmap 10.129.2.28 -p50000 -sS -Pn -n --disable-arp-ping --packet-trace --source-port 53
基于端口双端口连接式规避扫描
使用 ncat 命令,从指定源端口(如 53)连接目标端口,能够有效规避一些防火墙对特定端口的过滤。
ncat -nv --source-port 53 10.129.2.28 50000
总结
Nmap作为一款强大的网络扫描工具,能够有效地识别目标主机的开放端口、运行的服务等信息。然而,防火墙等安全设备可能会影响扫描结果,阻止渗透测试人员获取准确的端口信息。为了绕过防火墙的防护,渗透测试人员可以采取慢速扫描、随机化扫描、伪装源IP等技术。在实际操作中,测试人员应根据目标网络特性灵活调整Nmap参数,确保在安全、合法的环境下获取准确结果。
原文 https://blog.csdn.net/2301_79518550/article/details/145422734