目 录
第1章 概述... 3
1.1. 实现命令... 3
1.2. SSH隧道类型... 3
第2章 SSH隧道... 4
2.1. 动态映射(Socks代理)... 4
2.1.1. 命令... 4
2.1.2. 相关参数说明... 4
2.1.3. 意义... 4
2.1.4. 运用场景... 4
2.1.5. 优点... 6
2.1.6. 缺点... 6
2.2. 本地映射(正向)... 6
2.2.1. 命令... 7
2.2.2. 相关参数说明... 7
2.2.3. 意义... 7
2.2.4. 运用场景... 7
2.2.5. 优点... 8
2.2.6. 缺点... 8
2.3. 远程映射(反向)... 8
2.3.1. 命令... 8
2.3.2. 相关参数说明... 9
2.3.3. 意义... 9
2.3.4. 运用场景... 9
2.3.5. 优点... 10
2.3.6. 缺点... 10
第3章 总结... 11
3.1. 动态映射(Socks代理)... 11
3.2. 本地映射(正向)... 11
3.3. 远程映射(反向)... 11
3.4. 实际应用场景... 11
第1章 概述
SSH是一种安全的传输协议,一般用来连接服务器。除了这个功能,SSH还能实现隧道功能。隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。
1.1. 实现命令
ssh -C -f -N -L [Sip]Sport:Dip:Dport user@Tunnel-IP
ssh -C -f -N -R [Sip]Sport:Dip:Dport user@Tunnel-IP
ssh -C -f -N -D Sport user@Tunnel-IP
Windows下可用plink代替ssh
相关参数解释:(三种隧道模式-L、-R、-D,前面参数可省略)
-C Enable compression 压缩数据传输。
-f Fork into background after authentication
后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-N Do not execute a shell or command
不执行脚本或命令,通常与-f连用。
1.2. SSH隧道类型
ssh隧道有3种类型:
动态端口转发(Socks 代理)-D
本地端口转发(正向代理)-L
远端端口转发(反向代理)-R
第2章 SSH隧道
2.1. 动态映射(Socks代理)
属于Port 2 IP,也就是端口到IP的隧道
本地指定端口(Sport)->流量转发Tunnel-IP->[目标]
所有通过本地指定端口(Sport)的流量,都会通过SSH服务端(Tunnel)转发到目标(动态,无需指定),只要是Tunnel-IP可以访问到的IP、端口,我们本地都可以通过隧道访问。
Socks代理:这里相当于用SSH实现了Socks代理
2.1.1. 命令
命令在本机执行,也就是Sip
ssh -D Sport user@Tunnel-IP
2.1.2. 相关参数说明
Sport代表本地源端口,Tunnel-IP代表SSH服务IP。
2.1.3. 意义
监听本地Sport端口,将流量通过隧道转发出去。
2.1.4. 运用场景
相当于一个便捷的Socks代理,可以简单实现突破网络限制、FQ。
本机(27.x.x.77) -> 中间服务器(94.x.x.147) -> 目标机(198.x.x.90)
Parrot OS 支持SSH的路由器设备 目标机SECZ
中间服务器地址为94.x.x.147,是一台外网的基于Linux的无线路由器,允许ssh连接就行
ssh -D 7777 root@94.x.x.147 //本地监听7777端口
本地为一台Parrot OS,IP为27.x.x.77(我是内网拨号上网,这个是运营商的IP)
linux下全局代理,使用proxychains进行socket连接,在配置文件:/etc/proxychains.conf添加一条:socks5 127.0.0.1 7777
执行命令的时候,前面加proxychains就进行了代理
下面我用hydra做个实验,不加proxychains执行爆破
加上proxychains进行爆破,可以看到多了一条127.0.0.1:7777,这是我设置的socket代理
通过代理访问的目标机,IP为198.x.x.90,查看ssh登录记录,可以看到27.x.x.77(本地),然后紧接着是94.x.x.147(中间代理)
2.1.5. 优点
配置一个代理服务就可以访问远端机器和与其所在子网络的所有服务
2.1.6. 缺点
应用程序需要额外配置SOCKS代理,若应用程序不支持代理配置则无法使用
2.2. 本地映射(正向)
属于Port 2 Port,也就是本地端口到目标端口的隧道
本地指定端口(Sport)->流量转发(Tunnel-IP)->目标指定端口(Dip:Dport)
所有通过本地指定端口(Sport)的流量,都会通过SSH服务端(Tunnel)转发到目标的指定端口(Dip:Dport)。
正向:这里相当于我们本机Sip主动(正向)连接SSH服务器(Tunnel-IP),并将目标端口(Dip:Dport)通过SSH服务器映射到本地指定端口(Sport)。
2.2.1. 命令
命令在本机执行,也就是Sip
ssh -L [Sip]Sport:Dip:Dport user@Tunnel-IP
2.2.2. 相关参数说明
Sip、Sport代表源,Dip、Dport代表目的,Tunnel-IP代表SSH服务IP。
2.2.3. 意义
将目的IP的某个端口通过隧道映射到本地指定端口。
2.2.4. 运用场景
Sip是本机,Tunnel-IP是SSH服务器(假设被我们拿下的企业外部WEB服务器),Dip是我们Sip不能够直接访问到的,但是Tunnel-IP可以访问(假设是企业内网设备,开启了3389RDP服务),并且Tunnel-IP的SSH服务22端口对外可访问,我们就可以主动连接它的22端口。如果它只对外开放了80端口,我们就要用到下面的远程映射,也就是反向。
1、Sip - Tunnel-IP - Dip (Sip和Dip不通)
- Sip:10.10.10.11
- Dip:192.168.0.30
- Tunnel:10.10.10.10、192.168.0.28(将Sip和Dip隔离)
在Sip本地执行命令:将Dip的3389端口通过隧道映射到本地8888端口
plink.exe -L 8888:192.168.0.30:3389 test@10.10.10.10
mstsc /v 127.0.0.1:8888
2.2.5. 优点
无需设置代理
2.2.6. 缺点
每个服务都需要配置不同的端口转发
2.3. 远程映射(反向)
属于Port 2 Port,也就是本地端口到目标端口的隧道
本地指定端口(Sport)->流量转发(Tunnel-IP)->目标指定端口(Dip:Dport)
所有通过本地指定端口(Sport)的流量,都会通过SSH服务端(Tunnel)转发到目标的指定端口(Dip:Dport)。
反向:流量转发方式和本地映射是一样的,不一样的是实现的方式,远程映射是通过Tunnel-IP跳板机反向连接我们本机Sip的SSH服务,将目标Dip的Dport映射到本机Sip的Sport。
2.3.1. 命令
命令在跳板机执行,也就是Tunnel-IP上执行
ssh -R Sport:Dip:Dport user@Sip
2.3.2. 相关参数说明
Sport代表源,Dip、Dport代表目的,在这里Sip充当 SSH服务角色。
2.3.3. 意义
将目的IP的某个端口通过隧道映射到本地端口。(和本地映射一样,只不过实现方式不同)
2.3.4. 运用场景
Sip是本机,Tunnel-IP是跳板机(假设被我们拿下的企业外部WEB服务器),Dip是我们Sip不能够直接访问到的,但是Tunnel-IP可以访问(假设Sip是企业内网设备,开启了HTTP服务54321端口),和本地映射场景不同的是,Tunnel-IP仅对外提供HTTP服务,而我们拿到了它的shell权限,这个时候通过执行shell远程映射,反向连接我们本机Sip,并将目标Dip:Dport映射到Sip:Sport。
1、Sip - Tunnel-IP - Dip (Sip和Dip不通)
- Sip:10.10.10.138
- Dip:198.211.33.90
- Tunnel-IP:10.10.10.1(将Sip和Dip隔离)
在Tunnel-IP跳板机执行命令:将Dip的54321端口通过隧道映射到本地6666端口
plink.exe -R 6666:198.211.33.90:54321 test@10.10.10.128
在本机Sip:10.10.10.138查看6666端口
目标Dip:198.211.33.90的54321端口
2.3.5. 优点
可以穿越防火墙和NAT设备
2.3.6. 缺点
每个服务都需要配置不同的端口转发。
第3章 总结
3.1. 动态映射(Socks代理)
假设我们搞定了一台secz外网的WEB服务器(这台服务器和secz内网互通),这个时候通过动态映射,可以横扫内网(一切和WEB服务器互通的目标)。(需要Socks代理访问)
3.2. 本地映射(正向)
假设我们搞定了一台secz外网的WEB服务器(这台服务器和secz内网互通,并且开启了SSH服务对外),内网有一个目标机开启了3389RDP服务,通过本地映射(正向),把3389端口转发出来,直接远程登陆内网RDP服务器。(每次只能映射一个服务端口)
3.3. 远程映射(反向)
假设我们搞定了一台secz外网的WEB服务器(这台服务器和secz内网互通,但是没有SSH服务),内网有一个目标机开启了3389RDP服务,在WEB服务器上通过远程映射(反向连接),把3389端口转发出来,直接远程登陆内网RDP服务器。(每次只能映射一个服务端口)
3.4. 实际应用场景
实际上,本地映射、远端映射和动态映射都可以灵活应用,跳板机、目标主机的角色是可以互相转换的。