目录
- 一、常用指令
- 二、本地转发
- 三、远程转发
- 四、动态端口转发
一、常用指令
在内网中,几乎所有的Linux/UNIX服务器和网络设备都支持SSH协议。在一般情况下,SSH协议是被允许通过防火墙和边界设备的,所以经常被攻击者利用,同时,SSH协议的传输过程是加密的,所以我们很难区分合法的 SSH会话和攻击者利用其他网络建立的隧道,攻击者使用SSH端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。
一个普通的SSH命令如下
ssh root@192.168.1.1
创建SSH隧道的常用参数说明如下:
-C:压缩传输,提高传输速度
-f:将SSH传输转入后台执行,不占用当前的 Shell
-N:建立静默连接(建立了连接,但是看不到具体会话)
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(SOCKS 代理)
-P:指定 SSH端口
二、本地转发
如图所示,测试环境为攻击者VPS(Kali Linux);有是一个小型内网,包含三台服务器;外部VPS可访问内网web服务器但不能访数据服务器;内网Web服务和数据库服务器可以互相访问,测试目标为:以Web服务器为跳板,访问数据库服务器的3389端口
以Web 服务器192.168.1.1为跳板将内网数据库服务器1.1.1.200的3389端口映射到机器192.168.1.4的1153 端口,再访问VPS 的 1153端口,就可以访问1.1.1.200的3389端口了
在VPS上执行如下命令,会要求输人Wcb服务器(跳板机)的密码
ssh -CfNg -L 1153(VPS端口):1.1.1.200(日标主机):3389(目标端口) root@192.168.1.1(跳板机)
执行如下命令,查看本地1153 端口是否已经连接
netstat -tulnp | grep "1153"
执行如下命令,在本地系统中访问VPS的1153端口,即访问数据库服务器1.1.1.200的3389端口
rdesktop 127.0.0.1:1153
SSH进程的本地端口映射可以将本地(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发则是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端的对应端口。
三、远程转发
测试环境与前面相同
以Web服务器为跳板,将 VPS 的3307端口的流量转发到1.1.1.200的3389 端口,然后访问VPS的3307端口,就可以访问1.1.1.200的3389端口了。
在Web服务器1.1.1.116上执行如下命令
ssh -CfNg -R 3307(VPS端口):1.1.1.200(目标主机):3389(日标端口) root@192.168.1.4
执行如下命令,在本地系统中访问VPS的3307端口,即访问数据库服务器1.1.1.200的3389端口
rdesktop 127.0.0.1:3307
本地转发是将远程主机(服务器)某个端口的数据转发到本地机器的指定端口;远程端口转发则是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到本地的对应端口
四、动态端口转发
测试环境拓扑图
在VPS上执行如下命令,建立一个动态的 SOCKS 4/5代理通道,需要输人 Web服务器的密码
ssh -CfNg -D 7000 root@192.168.1.1
接下来,在本地打开浏览器,设置网络代理,127.0.0.1:7000,通过浏览器访回内网域控制器1.1.1.2,可以查看本地7000端口是否已经连接,同时可以看到,在使用动态映射时,本地主机的SSH进程正在监听7000端口
动态端口映射就是建立一个SSH加密的SOCKS4/5代理通道,任何支持SOCKS 4/5协议的程序都可以使用这个加密通道进行代理访问。