外部扫描子网

信息安全 网络
2021-08-25 04:21:36

设想:

我有一个路由器,其公共 IP 地址由 ISP 提供,路由器后面的两台主机使用私有 IP (192.168.xx)。

是否可以对公共 IP 地址后面的私有子网执行端口或漏洞扫描?

4个回答

通常,此类网络位于网络地址转换 (NAT)之后。NAT 等待内部系统将数据包发送到 WAN 地址,然后将路由存储在表中。它更改数据包以将路由器的 WAN IP 作为源地址,并将其发送到 Internet。当响应返回时,它将传入的数据包与路由匹配。这在 TCP 中特别容易演示,其中一个连接具有一个序列号,可用于将数据包与会话相匹配。

访问内部端口的问题是,如果一个数据包没有明确匹配路由器知道的路由,它就会被丢弃。请注意,端口转发规则会创建自己的路由,因此路由器知道将传入的 TCP/UDP 数据包路由到特定的内部 IP。因此,从互联网枚举内部 IP 非常困难,更不用说进行端口扫描了。

我知道这样做的唯一方法是利用路由器。他们中的一些人错误地设置了 UPnP 守护程序,允许您欺骗路由器设置端口转发规则。还有其他一些方法可以做到这一点,通常是通过路由器的控制面板。

Aaron “finux” Finnon(Twitter 上的@f1nux)今年早些时候在 BSidesLondon 上做了一个关于 pwning UPnP 的精彩演讲:http ://www.securitytube.net/video/4140

是的,您不需要 NAT、伪装甚至路由(但您至少需要 HTTP 代理)。

该工具使用 websockets 和 ajax 请求,但也可以只使用 img URL。如果您不想扫描大量地址,一个简单的 Java 小程序将识别并报告本地 IP 地址。

简短的回答:没有。

长答案:可能。这取决于。

NAT 路由器的工作原理是监控出站流量并动态创建规则以将传入流量发送到它需要去的地方。

例如:

  1. 内部机器(192.168.1.2)打开到外部机器的 TCP 连接(发送 TCP SYN):13.37.10.20,端口 80。连接绑定到内部机器上的端口 54321。
  2. NAT 路由器看到一个新的传出 TCP 连接,从 192.168.1.2:54321 到 13.37.10.20:80,存储 TCP 序列号,并创建一个规则,即应该路由来自 13.37.10.20:80 的具有下一个序列号的任何传入流量到本地子网上的 192.168.1.2:54321。
  3. 外部机器发回设置了 SYN+ACK 标志的 TCP 数据包,并带有自己的序列号。NAT 路由器看到它与上面的规则匹配,并将其路由到 192.168.1.2:54321,存储序列号。它现在允许双向发送数据包,前提是 IP、端口和序列号与规则中的值匹配。
  4. 数据通过 TCP 连接进行交换。
  5. 一方发送 FIN,路由器允许另一方发回 ACK,然后丢弃该规则。外部机器无法发送更多流量,因为 NAT 路由器不再具有该转发规则。

NAT 路由器丢弃所有其他传入流量。

在某些情况下,内部网络上的机器需要能够接受来自外部网络的传入数据包,而无需事先了解外部机器的任何信息。例如,我可能在 192.168.1.2:80 上设置了一个 Web 服务器,但希望它可以从外部网络访问。这通过端口转发来促进。

端口转发将永久规则添加到 NAT 转发规则中,以便将来自所有(或预设列表)IP 地址到特定端口的流量发送到内部 IP 地址。在上述情况下,我可能会说任何通过 TCP 端口 80 到达我的路由器的东西都应该转发到 192.168.1.2:80。

这本身并没有提供漏洞,但会导致漏洞。许多游戏和通信软件(例如 IM、VoIP 等)都需要接受传入连接。因为大多数消费者不知道如何配置他们的路由器,并且每次安装新游戏/程序时手动输入端口转发规则变得很麻烦,路由器需要一个允许自动配置这些规则的 API。最流行的 API 是 UPnP(通用即插即用)。

UPnP 允许程序告诉路由器添加一个 UPnP 端口转发规则。大多数路由器对此指定了一些限制,例如规则在程序需要更新之前可能存在的最长时间,但一般来说它是相当宽松的。

该 API 在 HTTP 上工作,因此在大多数语言中实现起来相对容易。除了“我有一个内部 IP 地址”之外,它还不需要任何身份验证,这意味着跨站点 AJAX、HTML5 Web 套接字甚至在浏览器中创建的 iframe 都可以设置端口转发规则。这通常需要浏览器的同源策略中存在错误,但攻击者当然有可能利用它来创建任意端口转发规则。这些可用于对您的内部网络进行指纹识别。他们还可以通过让您访问网页来直接使用网络套接字来识别您的内部网络。当然,关闭页面时扫描会中断。symcbean 的回答显示了一个实际的例子。

另一个问题是 UPnP 有时在路由器上以相当草率的方式实现。某些路由器允许通过 UPnP 完成一些疯狂的事情而无需身份验证,例如关闭 wifi、将设备重置为出厂设置、刷新固件。我什至找到了一个路由器,如果您发送某个 UPnP 请求,它会以明文形式告诉您 wifi SSID 和密码。事实上,在某些情况下,路由器也允许从面向互联网的一侧进行“有限”的 UPnP 访问。这是一种奇怪而可怕的安全做法。

只要可以从您的网络访问该地址,是的,您就可以从远程网络扫描端口。当然,您和目标机器之间的设备(尤其是防火墙)会影响结果。

如果目标 IP 地址在 Internet 上不可路由,则可能会或可能无法对某些端口执行扫描。这完全取决于目标 LAN 和 Internet 之间的 NAT 服务器(和防火墙)的配置。

如果您在远程网络上没有源计算机,则有专门的网站(例如这个)。当然,要执行这样的扫描,如果不是您,您应该获得目标系统所有者/管理员的授权。