相信各位小伙伴常常需要在外网通过某些代理访问内网进行某些任务的需求,such as在外面访问校园网,在外地要用企业内网做工作,甚至做tiao ban….咳咳,相信大家都懂,这些工作可以用ngrok和frp解决,但是对于一般简单的需求,用这两款工具未免有点"大炮打蚊子"的感觉,这个时候,你就需要SSH的反向连接。
0x00:网络拓扑
A:1.1.1.1 外网ubuntu服务器
B:192.168.1.101 内网计算机
在这个任务中,我们因为需要用A服务器访问到B计算机所在的内网,所以我们需要在B计算机上启动SSH反向隧道(即B计算机主动的去访问A计算机的某一端口,A计算机只需要监听该端口即可通过SSH隧道连接B计算机)
0x01:配置
因为我的A服务器(外网服务器)本来就是Ubuntu系统,自带了ssh,所以我们不讨论外网服务器的配置(PS:若你的服务器都是Windows请自行百度….) So我们进行B内网计算机的配置,但这时就需要分两种情况考虑了。
1.B计算机系统为Linux
Because Linux系统能非常方便的安装SSH,所以一条命令足矣完成配置。
ssh -fCNR port:localhost:22 publicUserName@publicIp
# 参数说明 f:后台运行 C:启用gzip压缩 N:仅转发端口,不执行命令 R:反向代理 port 你可以指定任何端口,这个只要没有被占用即可
在我们这个网络环境中只需要在B计算机上敲如下命令就OK了
ssh -fNR 3322:localhost:22 root@1.1.1.1
我们可以敲命令来检测一下
ps aux | grep ssh
可以看到,B内网计算机已经成功开启了反向SSH隧道并映射在了A计算机的3322端口上。然后,我们在A计算机上用SSH攻击连接自己的3322端口
ssh localhost -p 3322
NICE!可以看到,我们在输完密码后,SSH连接成功了,我们在A计算机上获得了B计算机的访问权。 plink.exe下载池:
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html