如何在Linux下使用Ncat体验UDP打洞?

如何在Linux下使用Ncat体验UDP打洞?

我倒要看看UDP漏洞打孔操作。我在 Linux 下使用 Ncat 进行了测试。以下是我尝试的:

  1. 在主机 A 上打开端口 1234/UDP,在主机 B 的防火墙上打开端口 12345/UDP(我仍然位于 NAT 后面,但如果数据包到达我,至少内核不会丢弃它)
  2. 在主机 A 上运行 sudo ncat -u -p 1234 B 12345,然后尝试发送数据包来打洞
  3. 在主机 B 上执行 sudo ncat -u -p 12345 A 1234,然后尝试发送另一个数据包来打洞
  4. 尝试从主机 A 到主机 B 进行通信,反之亦然,并观察是否没有数据包到达另一端。

我可能做错了什么?我知道主机 A 可以创建一个到主机 B 的漏洞,因为我观察到 P2P 通信器这样做,但我还没有检查过其他方法。

答案1

我建议先将主机 B 移出防火墙,或者对主机 B 进行一对一 NAT(包括 TCP 和 UDP 在内的所有协议),以完全暴露它。或者至少在主机 B 上暴露端口 12345/UDP。将主机 A 留在防火墙内,无需打开任何端口。将数据包从 A 发送到 B,然后从 B 返回到 A。如果 A 收到来自 B 的 UDP 数据包,则您已成功体验了主机 A 防火墙的漏洞。

因此我的建议是先尝试打洞防火墙。

我认为不可能在完全被 NAT 覆盖的两台主机之间打洞,除非有两台机器都可以访问的第三台主机 C,并欺骗防火墙在网络内部转发 UDP 数据包。

我希望这有帮助

答案2

NAT 会重写源 IP 和源端口。您可以向 STUN 服务器询问您的外部 IP 和端口。幸运的是,大多数 NAT 设备都会使源端口可预测。您可以通过检查多个 STUN 服务器来验证这一点。您的源 IP 和端口应该相同。

为了使此功能对您有用,请让您的两个主机都执行 STUN 请求以获取外部 IP 和端口。NAT 会重写源端口,因此您无需使用 root 或设置源端口。

A> ncat -u [B external IP] [B external port]在 A 上打孔
B> ncat -u [A external IP] [A external port]通过 A 上的孔连接

相关内容