我有一个运行在example.com
. Web 服务器执行导致环回的服务器端请求example.com
,因此请求永远不会通过网络传递。
此请求是否容易受到 MITM 攻击?如果是这样,怎么做?
我有一个运行在example.com
. Web 服务器执行导致环回的服务器端请求example.com
,因此请求永远不会通过网络传递。
此请求是否容易受到 MITM 攻击?如果是这样,怎么做?
问题在于访问服务器并获得合适的权限级别。
更新:当然,如果您有这样的访问权限,您可能可以直接控制“服务器”或“客户端”,或两者兼而有之,或者在他们不知道的情况下秘密访问它们的相同数据。如果你是里面的人,就不需要中间的人。
但是假设你在那里有根......那么,是的,即使出于任何原因你不能使用环回接口以外的任何东西,你也可以发起中间人攻击,并且不能以其他方式干扰客户端或服务器的操作。
你所需要的只是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
可能是一个更好的选择,以确保请求始终保持在本地,但如果使用基于名称的虚拟主机,这可能是不可能的。