HTTP 环回是否可以进行 MITM 攻击?

信息安全 http 中间人
2021-09-08 23:23:55

我有一个运行在example.com. Web 服务器执行导致环回的服务器端请求example.com,因此请求永远不会通过网络传递。

此请求是否容易受到 MITM 攻击?如果是这样,怎么做?

2个回答

问题在于访问服务器获得合适的权限级别

更新:当然,如果您有这样的访问权限,您可能可以直接控制“服务器”或“客户端”,或两者兼而有之,或者在他们不知道的情况下秘密访问它们的相同数据。如果你是里面的人,就不需要中间的人。

但是假设你在那里有根......那么,是的,即使出于任何原因你不能使用环回接口以外的任何东西,你也可以发起中间人攻击,并且不能以其他方式干扰客户端或服务器的操作。

你所需要的只是vecalhost 将其地址复制到可用的地址,告诉受害者example.com映射到该地址。

使用我在 localhost 端口 631 上侦听的服务的实际示例 - cupsd。网络服务器会监听 80 端口,但其他一切都保持不变。

netstat -napo | grep LISTEN | grep -F 127.0.0.1
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1321/cupsd          off (0.00/0/0)
tcp        0      0 127.0.0.1:953           0.0.0.0:*               LISTEN      1721/named          off (0.00/0/0)
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1721/named          off (0.00/0/0)

现在我不能立即在所选端口上收听,因为那里已经有一个合法的进程:

# netcat -l 127.0.0.1 631 &
[1] 26264
netcat: Address already in use
[1]+  Exit 1                  netcat -l 127.0.0.1 631
#

但是没有什么能阻止我使用别名创建另一个环回接口(lo:0而不是lo)......

# ifconfig lo:0 127.0.0.42
# ifconfig lo:0
lo:0      Link encap:Local Loopback
          inet addr:127.0.0.42  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1

并通过操作主机文件告诉系统example.com确实是 127.0.0.42(如果 DNS 具有优先级,我会调整其区域文件)...

...现在我可以听(在这种情况下是单行)

# netcat -l 127.0.0.42 631 &
[1] 26442

如果我发送那条线,我的监听 netcat 会收到(并且可以回复):

# echo "Hello" | netcat 127.0.0.42 631
Hello
[1]+  Done                    netcat -l 127.0.0.42 631
#

环回接口之外没有任何东西经过(当然,如果它只有一个环回接口,我怎么会在那个盒子里?),如果连接到“example.com”,服务器无法知道连接是被劫持。

即使没有别名,我也可以尝试这样做,但是所需的过程会严重干扰通信,并且可能无法始终工作,甚至根本无法工作,因为我无法轻易阻止客户端和服务器互相听到。

(我在这里所做的混叠只是一个概念证明,可能会造成严重破坏 - 只需考虑我现在在同一个“主干”上有 127.0.0.1 和 127.0.0.42 并且它们都有 /8 掩码)

假设example.com实际上解析回服务器,而不是负载均衡器、SSL 终结器或其他硬件,那么不,没有 MITM,因为中间没有任何东西。如果可以的话,使用localhost可能是一个更好的选择,以确保请求始终保持在本地,但如果使用基于名称的虚拟主机,这可能是不可能的。