文章前言
在内网中建立一个稳定、可靠的数据通道对渗透测试工作来说具有重要意义,应用层的隧道通信技术主要利用应用软件提供的端口来发送数据,常见的隧道协议有SSH、HTTP/HTTPS、DNS
SSH协议
在内网中几乎所有的Linux/UNIX服务器和网络设备都支持SSH协议,在一般情况下SSH协议是被允许通过防火墙和边界设备的,所以经常被攻击者利用,同时SSH协议的传输过程是加密的所以我们很难区分合法的SSH会话和攻击者利用其它网络建立的隧道,攻击者利用SSH端口隧道突破防火墙的限制后能够建立一些之前无法建立连接的TCP连接,一个普通的SSH命令如下:
ssh root@192.168.188.131
参数说明:
-
-C:压缩传输,提高传输速度
-
-f:将SSH传输转入后台执行,不占用当前的Shell
-
-N:建立禁默连接(建立了连接,但是看不到具体会话)
-
-g:允许远程主机连接本地用于转发的端口
-
-L:本地端口转发
-
-R:远程端口转发
-
-D:动态转发(SOCKS代理)
-
-P:指定SSH端口
本地转发
网络拓扑
测试环境网络拓扑如下所示:
环境说明
外部VPS可以访问内网Web服务器,但是不能访问数据库服务器,内网Web服务器和数据库服务器可以互相访问
测试目标
通过将Web服务器作为跳板访问数据库服务器的3389端口
实现思路
通过将Web服务器192.168.188.131为跳板将内网数据库服务器192.168.23.130的3389端口映射到VPS机器192.168.188.129上的1153端口,访问VPS的1153端口就可以成功访问192.168.23.130的3389端口
具体流程
在VPS上执行以下命令会要求输入Web服务器(跳板机)的密码,如下所示:
ssh -CfNg -L 1153(VPS端口):192.168.23.130(目标主机):3389(目标端口) root@192.168.188.131(跳板机)
之后执行如下命令,查看本地1153端口是否已经连接
netstat -tulnp | grep "1153"
在进行本地映射时本地的SSH进程会监听1153端口,之后执行如下命令,在本地系统中访问VPS的1153端口可以发现已经成功与数据库服务器192.168.23.130的3389端口建立了连接
SSH进程的本地端口映射可以将本地客户机的某个端口转发到远端指定机器的指定端口,而本地端口转发则是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端的对应端口
远程转发
网络拓扑
测试环境网络拓扑如下所示:
环境说明
左侧为攻击者VPS(Kali linux),右侧为一个小型内网,包含三台服务器,内网没有边界设备,所以外部VPS不能访问内网中的三台服务器,内网Web服务器可以访问外网VPS,数据库服务器(192.168.23.130)和域控制器(192.168.23.140)均不能访问外网VPS
测试目标
通过外网VPS访问数据库服务器的3389端口
测试思路
通过将Web服务器为跳板,使用VPS的3307端口的流量转发到192.168.23.130的3389端口,然后访问VPS的3307端口就可以访问192.168.23.130的3389端口
测试流程
在Web服务器192.168.23.131上执行以下命令:
ssh -CfNg -R 3307(VPS端口):192.168.23.130(目标主机):3389(目标端口) root@192.168.188.129(VPS的IP)
在本地访问VPS的3307端口可以发现已经与数据库服务器192.168.23.130的3389端口建立了连接:
本地转发是将远程主机(服务器)某个端口的数据转发到本地机器的指定端口,远程端口转发则是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到本地对应的端口
动态转发
网络拓扑
网络拓扑结构如下所示:
环境说明
外部VPS可以访问内网边界Web服务器,但不能访问数据库服务器,内网Web服务器和数据库服务器可以互相访问
测试目标
访问域控制器
实现思路
通过Web服务器192.168.188.131为跳板,借助动态端口转发将VPS上的7000端口的通信数据转发到内网边界主机192.168.188.131的ssh端口,之后在本地浏览器中设置SOCKS代理为VPS的IP:7000,之后在本地浏览器中即可访问内网域控制服务器
测试流程
在VPS上执行如下命令建立一个动态的SOCKS 4/5代理通道,输入Web服务器的密码:
ssh -CfNg -D 7000 root@192.168.188.131
在本地打开浏览器设置网络代理,如下图所示:
通过流量器访问内网域控制器192.168.23.140,如下图所示:
输入以下命令查看本地7000端口是否已经连接可以看到在使用动态映射时,本地主机的SSH进程正在监听7000端口,如下图所示:
netstat -pantu | grep ":7000"
动态端口映射就是一个建立SSH加密的SOCKS 4/5代理通道,任何支持SOCKS 4/5协议的程序都可以使用这个加密通道进行代理访问
防御措施
SSH隧道之所以能被攻击者利用主要是因为系统访问控制措施不够,在系统中配置SSH远程管理白名单,在ACL中限制只有特定的IP地址才能链接SSH以及设置系统完全使用带外管理等方法都可以避免这一问题,如果没有足够的资源来建立带外管理的网络结构,在内网中至少要限制SSH远程登录的地址和双向访问控制策略(从外部到内部,从内部到外部)
原文始发于微信公众号(七芒星实验室):内网渗透之SSH隧道
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论