欺骗 `localhost` 以连接到仅接受来自 localhost 的连接的服务器

信息安全 mysql ip
2021-08-24 09:23:38

我一直想知道是否可以欺骗本地主机,以便在建立连接时可以欺骗远程服务器认为连接来自本地主机。

例如,MySQL 中有一个配置只接受来自 localhost 的连接。作为外部攻击者,是否有可能欺骗 localhost 以获得对该服务器的访问权限,当然没有采取进一步的安全措施?

1个回答

这个概念(通常用作攻击的一部分)通常被称为“pivoting”,如“我使用服务器的请求转发功能从 Internet 到 localhost”。没有办法通过 TCP “欺骗”本地主机流量;TCP 需要一个有效的源 IP 地址来完成握手。在 UDP 上,如果应用程序正在侦听外部接口但拒绝任何不是来自本地主机的连接,您可以管理它 - 这与仅侦听环回接口不同,如果您通常会这样做只想要本地流量 - 但我从未听说过使用这种方法,可能是因为它是配置服务器的一种愚蠢方式。

您可以通过多种方式将网络连接转至本地(内部)网络,或转至 localhost(本质上是一个超小型 - 仅一台机器 - 本地网络)。让我们举一个简单的、人为的例子:运行本地连接服务器的机器也运行着一个暴露在互联网上的开放代理服务器。您连接到代理,并告诉它在所需端口上将您连接到 127.0.0.1。代理服务器代表您发出该请求,并连接到受限服务器。然后代理将您的流量中继到受限服务器,并将其流量返回给您。

有许多不那么做作的例子可能会奏效。XML 外部实体攻击可能是最常见的,可用于向您选择的主机和端口(相对于易受攻击的 XML 解析器,通常位于Web 服务器,因此在 XXE 中请求“localhost”将使 Web 服务器在端口上的指定协议上连接到自身)。这通常不会为您带来交互式流量,但对于简单的请求很有用,并且通常可以根据需要经常发出(这也可以用于端口扫描内部网络以查找某些类型的服务器)。任何允许外部程序让服务器代表外部用户发出任意请求的东西都可能被滥用,以向服务器的仅限本地主机的服务发送请求。

有时可能相关的另一个选项是在您破坏主机并在低权限环境中获得任意代码执行后,使用这种攻击在主机上获得权限。例如,想象一个沙盒 Web 服务器。您破坏了服务器并在其上放置了一个反向 shell,让您在服务器的沙箱中运行代码。然后,您在同一台服务器上(但在网络服务器的沙箱之外)打开另一个服务的网络连接,该服务器正在侦听 localhost 但未经身份验证。如果沙箱不限制您执行此操作,并且目标服务器直接公开沙箱中不可见的任何内容,那么您实际上获得了额外的权限。