在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接情况,如果发现异样,就会对通信进行阻断。那么什么是隧道呢?这里的隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应服务器上。
上一节中,我们讲解了网络层的隧道技术(IPv6 隧道、ICMP 隧道)和传输层的隧道技术(TCP 隧道、UDP 隧道、常规端口转发)。现如今,TCP、UDP 通信大量被防御系统拦截,传统的Socket隧道也已经濒临淘汰,DNS、ICMP、HTTP/HTTPS 等难以被禁用的协议已经成为了攻击者控制隧道的主要渠道。在这一节中,我们将对应用层的隧道 SOCKS 代理技术进行实验性的讲解,由于小编能力太菜,很多东东也是现学现卖,应用层的DNS隧道我会在未来专门写一个专题进行讲解。
应用层隧道技术应用层(Application layer)是七层OSI模型的第七层。应用层直接和应用程序接口并提供常见的网络应用服务。应用层的隧道技术主要利用应用软件提供的端口来发送数据,常用的协议有SSH、HTTP/HTTPS和DNS。这里我们主要讲解SSH和HTTP/HTTPS,DNS隧道我会在未来专门写一个专题进行讲解。
SSH协议
SSH 为建立在应用层基础上的安全协议,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH客户端适用于多种平台,几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。
一般情况下,SSH协议的传输是被允许通过防火墙及边界设备的,且SSH传输过程加密,很难区分是合法的SSH会话还是攻击者建立的隧道,所以经常被攻击者所利用。攻击者使用SSH隧道突破防火墙限制后,能够建立一些之前无法建立的TCP连接。
SSH 命令
ssh 用户名@ip -p <端口号>
创建ssh隧道常用的参数有:
-C:压缩传输,提高传输速度
-f:将ssh传输转入后台执行,不占用当前的shell
-N:静默连接,连接后看不到具体会话
-g:允许远程主机连接本地用于转发的端口
-L:本地端口转发
-R:远程端口转发
-D:动态转发(SOCKS 代理)
-p:指定ssh端口
本地转发实验
测试环境:
攻击者vps
模拟外网IP:192.168.1.101
内网web服务器
模拟外网IP:192.168.103
内网IP:192.168.52.128
内网受害机Windows Server 8
内网IP:192.168.52.138
攻击者vps可以访问内网web服务器,但不能访问内网受害机Windows Server 8;内网web服务器与内网受害机Windows Server 8可以互访。我们的思路是:以Web服务器为跳板,访问Windows Server 8的3389端口。利用的前提是已经拿到了明文密码。
在攻击者vps上面执行:
ssh -CfNg -L 1153(vps端口) : 192.168.52.138(目标机ip) : 3389(目标端口) root@192.168.1.103(跳板机) //攻击者vps主动去连web
-L:本地端口转发
执行以下命令,查看本地1153端口是否已经建立连接。可以看到,在进行本地映射时,本地的ssh进程监听了1153端口。
这里的原理是,以web服务器192.168.1.103为跳板,将内网Windows Server 8(192.168.52.138)的3389端口映射到了攻击者vps的1153端口上,我们执行如下命令,访问vps本地1153端口,就可以访问内网Windows Server 8(192.168.52.138)的3389端口了:
rdesktop 127.0.0.1:1153
可以看到,成功连上了内网Windows Server 8的远程桌面。这种方法只需要在攻击机执行一条命令,还是比较方便的。
远程转发实验