我们前面的文章既然已经涵盖了许多绕过防火墙规则的单独技术,那么现在就可以将它们放到真实的***测试方案中了。这一切都始于安全专家M在SecurityFocus***测试列表中的帖子。他和他的同事D正在对一家大公司的内部网络进行***测试,并且刚刚绕过了旨在防止一个VLAN访问另一个VLAN的防火墙规则。我很高兴地看到他们使用Nmap完成了这次扫描,并且为整个故事留下了记录。 它很有启发性,因为它即使在最常见的漏洞利用失败后,也能证明坚持不懈和尝试各种已知技术的价值。不要让防火墙击败你!
故事始于M和D执行Nmap扫描,显示它们被卡在经过严格过滤的网络上。它们可以到达某些公司服务器,但不能到达网络上某处必须存在的客户端计算机(可能易受***的)。他们可能位于受限的会议室或大厅网络中,或者可能是为公司来宾设置的无线访问点。例1显示了一些已经被发现的主机和网络。由于机密性,此故事中的一些细节(例如IP地址)已更改。 我将目标公司称为Megacorp。
例1: Megacorp公司中的一些主机和网络

Nmap实用专题系列(一)如何使用Nmap穿透防火墙扫描
为了确定是否在10.10.10.0/24网络上隐藏任何主机的目标,D首先使用ICMP回显请求查询(-PE)进行简单的ping扫描。 结果如实施例2所示。
例2: Ping扫描目标网络
Nmap实用专题系列(一)如何使用Nmap穿透防火墙扫描
Ping扫描无法找到任何响应主机。D感到很失望,这可以理解,但是至少它使本节更加有趣和具有启发性。也许网络确实是空的,但也可能挤满了易受***的机器,但D被阻止访问。他需要进一步深入。在示例3中,D选择该网络上的一个IP并执行ping扫描。他指定了数据包跟踪(—packet-trace)和额外的详细程度(-vv)选项,以确定数据包级别发生了什么。只选择一个IP的原因是为了避免混淆数百个数据包。
例3: 单个IP的数据包跟踪
Nmap实用专题系列(一)如何使用Nmap穿透防火墙扫描
D收到了ICMP不可达的信息。路由器通常在主机不可用时执行此操作,因此它们无法确定MAC地址。这也可能是由于数据包被过滤了。D又扫描了网络中的其他主机,它们的回应都是一样的。也有可能只是ICMP数据包被过滤了,因此D决定尝试TCP SYN扫描。他运行命令nmap -vv -n -sS -T4 -Pn --reason 10.10.10.0/24。所有端口均显示为已过滤,并且--reason选项的结果归咎于某些主机无法访问的消息和某些无响应的端口。无响应端口可能是由于路由器发送的主机不可达消息的速率限制。许多路由器每几秒钟只会发送其中一个。D可以通过再次运行扫描并查看主机不可达消息是否来自完全相同的端口集来验证速率限制是否是原因。如果端口相同,则可能是基于端口的特定过滤器。 如果Nmap每次都收到不同端口的主机不可访问消息,则可能是速率限制。
如果过滤器引起了问题,则它可能是简单的无状态防火墙,如路由器和交换机上普遍使用的防火墙。如前几章所述,这些无状态的防火墙有时会允许TCP ACK数据包不受干扰的通过。D重复扫描,但这回使用的是选项-sA指定的ACK扫描,而不是选项-sS。扫描发现的任何unfiltered的端口都将表明ACK数据包通过了防火墙,并从目标主机引起了TCP RST响应。不幸的是,在这种情况下,所有结果都被过滤,就像SYN扫描一样。
D决定尝试更高级的东西。他已经从其最初的Nmap扫描中知道端口445在Windows机器上的10.10.6.30(files2.megacorp.com)上是打开的。尽管D不能直接到达10.10.10.0/24网络,但也许files2(作为公司的重要文件服务器)可以访问该IP范围。D决定尝试使用IPID Idel扫描从files2反弹其扫描。首先,他想通过针对10.10.6.60(端口25打开的已知响应机器)进行测试来确保file2充当僵尸。 该测试的结果示于实施例4中。
例4: 进行一次Idle扫描测试
Nmap实用专题系列(一)如何使用Nmap穿透防火墙扫描
看起来将10.10.6.30用作空闲僵尸并不能很好地解决问题。如果问题是由于通讯繁忙,他可以在深夜再次尝试。--packet-trace选项与对“ TCP Idle扫描(-sI)”一章的详细阅读相结合,可以帮助确定10.10.6.30为什么不充当僵尸。 D尝试了他在网络上找到的少数其他主机,但没有一个能够充当僵尸。
D开始担心他是否能够闯入10.10.10.0/24网络。幸运的是,他在这方面是老手,于是另辟蹊径:IP源路由。在Internet的早期(甚至在使用IPv6的今天),源路由是一项重要且广泛使用的网络诊断功能。它使你可以指定数据包达到目标的路径,而不必依靠常规的路由规则。使用严格的源路由,必须指定每个跃点。 松散源路由允许你填充关键的IP航路点,而普通Internet路由则可以填充这些航路点之间的跃点详细信息。
很久以前,网络社区就达成共识,即源路由带来的麻烦(特别是出于安全性考虑)比其价值更大。许多(如果不是大多数的话)路由器都配置为丢弃源路由的IPv4数据包,因此有人认为这个问题在90年代就已经被解决了。然而,源路由,像SYN泛洪和Telnet密码嗅探,仍然是一种罕见但潜在的风险。D通过使用通过10.10.6.60邮件服务器进行源路由的数据包ping扫描文件2(10.10.6.30)来测试此***。扫描结果如例5所示:
例5: 测试源路由扫描
Nmap实用专题系列(一)如何使用Nmap穿透防火墙扫描
D对此测试感到惊讶和高兴。 他立即将注意力转向真正的目标网络,并通过一个附加选项重复进行初始ping扫描:--ip-options“ L 10.10.6.60”。这次,Nmap报告位于10.10.10.7的计算机正在响应。 D知道以前是无法访问的,因为10.10.10.0/24和10.10.5.0/24子网位于不同的路由器VLAN上,配置为防止它们相互通信。
例6: 最终的成功
Nmap实用专题系列(一)如何使用Nmap穿透防火墙扫描
Demetris在此初始扫描中省略了OS检测和版本检测,但是从打开的端口配置文件中看起来像Windows计算机。只要D使用诸如Ncat之类的提供源路由选项的工具,他就可以连接并访问这些端口。 我不知道故事接下来会发生什么,但是我猜测这涉及D完全***网络,然后帮助公司更安全地重新设计它。