端口探测如何识别阻断

wen 开源项目 27

本文目录导读:

端口探测如何识别阻断

  1. 核心逻辑:区分“端口关闭”与“端口被阻”
  2. 如何绕过这种识别?——对抗性的识别
  3. 一个快速诊断流程图

这是一个非常专业且现实的问题,在渗透测试、红蓝对抗或网络诊断中,端口探测被阻断是常态,尤其是在面对企业级防火墙、WAF(Web应用防火墙)或云服务商的安全组时。

要“识别”端口探测是否被阻断,不能仅凭“无响应”就下结论,需要结合多种探测技术响应特征来综合判断。

以下是识别端口探测被阻断的核心方法:

核心逻辑:区分“端口关闭”与“端口被阻”

这是最关键的,一个端口关闭时,会主动回复一个标准TCP RST(重置)包;而一个端口被防火墙阻断时,通常会直接丢弃数据包(无响应) 或返回一个伪装包

基于响应结果的直接判断

  • 无任何响应

    • 现象:发送SYN包后,没有收到SYN+ACK(开放),也没有收到RST(关闭),多次重试后依然超时。
    • 高度怀疑被阻断,这是最常见的阻断特征,防火墙直接丢弃了探测包,仿佛这个IP不存在一样。
    • 工具nmap -sS <target> 如果显示 filtered 通常就是这个原因。
  • 收到 RST 包

    • 现象:端口回复了RST包。
    • 端口是关闭的,防火墙允许你“碰壁”,并告诉你“此路不通”,这不是阻断,是正常状态。
  • 收到特定的ICMP不可达消息

    • 现象:防火墙返回 ICMP type 3 code 13(Communication Administratively Prohibited,管理性禁止通信)或 code 10 等。
    • 明确被ACL(访问控制列表)或防火墙规则阻断,回复中通常会包含丢弃该包的防火墙IP地址(有时会被隐藏)。

基于扫描行为的技巧(进阶判断)

当直接扫描被“静默丢弃”时,需要更高级的技巧来验证是否有防火墙存在。

  • ACK 扫描

    • 原理:发送一个ACK包(好像是在回复一段已经建立的连接),根据RFC,任何非ESTABLISHED状态的ACK包,端口都应该回复RST(无论端口开闭)。
    • 判断:如果发送ACK包后无响应,说明数据包在到达目标主机前就被防火墙拦截了,如果能收到RST,说明目标主机在处理,但可能还有状态检测防火墙。
  • FIN / NULL / Xmas 扫描

    • 原理:发送不含SYN/ACK/RST标志位的异常包(FIN, NULL, Xmas),根据RFC,关闭的端口应回复RST,开放的端口应忽略。
    • 判断
      • 如果所有端口都无响应 -> 很可能被屏蔽或防火墙丢弃了这些异常包。
      • 如果所有端口都回复RST -> 操作系统是Windows或某些BSD系统,或者中间有防火墙统一返回RST。
      • 只有开放端口无响应(符合RFC)-> 标准的Linux系统,没有被阻断。
  • 多端口指纹 + 速率区分

    • 现象:对一个关闭的端口(比如12345)进行扫描,响应很快(RST),但对一个知名端口(比如443)进行扫描,响应很慢或超时。
    • 判断:对已知关闭端口的快速响应,和对已知敏感端口的无响应,这种差异本身就是防火墙在“工作”的信号。
  • 源IP行为记录

    • 原理:一些防火墙会记录你的IP,当你扫描一个端口被拒后,立即扫描另一个端口(甚至在不同时间段)也可能被直接丢弃。
    • 判断:同一个IP发出的探测包,在短时间内从“能收到RST”变为“全无响应”,这基本上就是被动态阻断或加入了黑名单。

如何绕过这种识别?——对抗性的识别

在渗透测试中,识别到阻断后,下一步往往是绕过,但绕过的方法也可以反向用于确认阻断的存在

  • 分片探测:将SYN包分成多个IP碎片,如果防火墙无法重组碎片而放行,而普通SYN包被阻,则反证了中间设备的存在。
  • 源端口欺骗:使用目标系统可能信任的源端口(如53、80、443、123等)发送探测包,如果使用普通源端口被阻,使用特权端口成功,则确认了防火墙是基于端口或协议检测。
  • 代理/隧道扫描:通过可用的代理(如Socks5)或SSH隧道进行扫描,如果本地直接扫描被阻,而经过隧道扫描成功,这说明阻断发生在你到目标的中间链路上。

一个快速诊断流程图

  1. 发送SYN包 → 收到SYN+ACK?

    • 是:端口开放,无阻断。
    • 否:继续下一步。
  2. 收到RST包?

    • 是:端口关闭,无阻断。
    • 否:继续下一步。
  3. 收到ICMP不可达(Type 3 Code 13)?

    • 是:明确被防火墙阻断。
    • 否:继续下一步。
  4. 多次重试后持续超时/无响应?

    • 大概率被静默丢弃
    • 验证方法
      • 换一个确定关闭的端口(比如随机高端口)测试,看是否也超时,如果也超时,说明整个主机可能不可达或完全被防火墙隔离。
      • 换一个确定开放的端口(比如HTTP 80)测试,如果80端口也是超时,说明不是端口级别的阻断,而是主机级别的阻断。
      • 发送特殊的FIN/ACK扫描包,观察响应模式的差异。

核心要点无响应不等于网络不通,无响应 + 对无关端口的快速RST响应 = 精准端口级别阻断

抱歉,评论功能暂时关闭!