前言
完成内网信息收集工作后,渗透测试人员需要判断流量是否出的去、进的来,隐藏通信隧道技术通常用在访问受限的网络环境中追踪数据流向和在非受信任的网络中实现安全的信息传输。
隐藏通信隧道基础知识
隐藏通信隧道概述
一般的网络通信,先在两台机器之间建立TCP连接,然后进行正常的数据通信。但是在实际的网络中,通常会通过各种边界设备、软/硬件防火墙甚至入侵检测系统来检查对外连接的情况,如果发生异常,就会对通信进行阻断。
隧道,就是一种绕过端口屏蔽的通信方式。防火墙两端的数据包通过防火墙所允许的数据包类型或端口进行封装,然后穿过防火墙,与对方进行通信。当被封装的数据包到达目的地时,将数据包还原,并将还原后的数据包发送到相应的服务器上。常见的隧道列举如下:
- 网络层:IPv6隧道、ICMP隧道、GRE隧道
- 传输层:TCP隧道、UDP隧道、常规端口转发
- 应用层:SSH隧道、HTTP隧道、HTTS隧道、DNS隧道
判断内网的连通性
判断内网的连通性是指判断机器能否上外网等。要综合判断各种协议(TCP、HTTP、DNS、ICMP等)及其端口的通信情况,常见的允许流量流出的端口有80、8080、443、53、110、123等。
几个判断内网连通性的方法:
-
ICMP协议
- 执行命令"ping<IP地址或域名>"
-
TCP协议
- 使用netcat工具,执行命令"nc<IP地址 端口号>"
-
HTTP协议
- 使用curl工具,执行命令"curl<IP地址:端口号>"
-
DNS协议
- nslookup -h 查看命令帮助 Windows操作系统
- dig -h 查看命令帮助 Linux操作系统
网络层隧道协议
在网络层中,两个常用的隧道协议是IPv6和ICMP,以下将分别介绍。
IPv6
IPv6隧道
"IPv6"是"Internet Protrol Version 6"的缩写,也被称为是下一代互联网协议,它是由IETF(The Internet Engineering Task Force,国际互联网工程任务组)设计用来代替现行的IPv4协议的一种新的IP协议,IPv4协议已经使用了20多年,目前面临着地址匮乏等一系列问题,而IPv6则能从根本上解决这些问题,现在,由于IPv4资源几乎耗尽,IPv6开始进入过渡阶段。
IPv6隧道技术
- IPv6隧道技术指的是通过IPv4隧道传送IPv6数据报文的技术,为了在IPv4的海洋中传输IPv6信息,可以将IPv4作为隧道载体,将IPv6报文整体封装在IPv4数据报文中,使IPv6能够穿越IPv4的海洋,到达另一个IPv6小岛。
- 攻击者有时会通过恶意软件来配置允许进行IPv6通信的设备,以避开防火墙和入侵检测系统。
- 支持IPv6的隧道工具有socat、6tunnel、nt6tunnel等。
防御IPv6隧道攻击的办法
针对IPv6隧道攻击,最好的防御办法是:了解IPv6的具体漏洞,结合其他协议,通过防火墙和深度防御系统过滤IPv6通信,提高主机和应用程序的安全性。
ICMP隧道
ICMP隧道介绍
- ICMP隧道简单、实用,是一个比较特殊的协议。在一般的通信协议里,如果两台设备要进行通信,肯定需要开放端口,而在ICMP协议下就不需要。最常见的ICMP消息为ping命令的回复,攻击者可以利用命令得到比回复更多的ICMP请求。
- 常用的ICMP隧道工具有icmpsh、PingTunel、icmptunel、powershell icmp等。
防御ICMP隧道攻击的办法
许多管理员会阻止ICMP通信进入站点。但是在出站方向,ICMP通信是被允许的,而且目前大多数的网站通信和边界设备不会过滤ICMP流量。使用ICMP协议会产生大量的ICMP数据包。我们可以通过Wireshark进行ICMP数据分析,以检测恶意的ICMP流量。
传输层隧道技术
传输层技术包括TCP隧道、UDP隧道和常规的端口转发等...
lcx端口转发
lcx是一个基于socket套接字实现的端口转发工具,有Windows和Linux两个版本,Windows版本为lcx.exe,Linux版本为portmap。一个正常的socket隧道必须具备两端:一端为服务端,监听一个端口,等待客户端的连接;另一端为客户端,通过传入服务端的IP地址和端口,才能主动与服务器连接。
netcat(nc)
- netcat主要的功能是从网络的一端读取数据,输入到网络的另一端(可以使用TCP和UDP协议)。
- Shell分为两种,正向Shell和反向Shell,如果客户端连接服务器,客户端想要获取服务器的Shell,就称为正向Shell;如果客户端连接服务器,服务器想要获取客户端的Shell,就称为反向Shell。
PowerCat
- PowerCat可以说是nc的PowerShell版本。PowerCat可以通过执行命令回到本地运行,也可以使用远程权限运行。
- PowerCat的参考文档:https://github.com/besimorhino/powercat
应用层隧道技术
在内网中建立一个稳定的、可靠对的数据通道,对渗透测试工作具有重要的意义,应用层的隧道通信技术主要利用软件提供的端口来发送数据,常用的隧道协议有SSH、HTTP/HTTPS和DNS。
SSH协议
SSH协议介绍
在内网中,几乎所有的Linux/Unix服务器和网络设备都支持SSH协议,在一般情况下,SSH协议是被允许通过防火墙和边界设备的,所以经常被攻击者利用;同时,SSH协议的传输过程是加密的,所以我们很难区分合法的SSH会话和攻击者利用其它网络建立的隧道。攻击者使用SSH端口隧道突破防火墙的限制后,能够建立一些之前无法建立的TCP连接。
防御SSH隧道的思路
SSH隧道之所以能被攻击者利用,主要是因为系统访问控制措施不够,在系统中配置的SSH远程管理白名单,在ACL中限制只有特定的IP地址才能建立SSH,以及设置系统完全使用带外管理等方法,都可以避免这一问题。
HTTP/HTTPS协议
- HTTP Service代理用于将所有的流量转发到内网。
- 常见的代理工具有reGeorg、meterpreter、tunna等...
DNS协议
- DNS协议是一种请求/应答协议,也是一种可用于应用层的隧道技术,虽然激增的DNS流量可能会被发现,但是基于传统的socket隧道已经濒临淘汰及TCP、UDP通信大量被防御系统连接拦截的状况,DNS、ICMP、HTTP/HTTPS等难以被禁用的协议已成为攻击者控制隧道的主流渠道。
- 一方面,在网络世界中,DNS是一个必不可少的服务;另一方面,DNS报文本身具有穿透防火墙的能力。由于防火墙和入侵检测系统设备大多不会过滤DNS流量,也为DNS成为隐蔽通道创造了有利条件。
- 几款DNS工具
- dnscat2,下载地址:https://github.com/iagox86/dnscat2
- iodine,下载地址:https://github.com/Al1ex/iodine
Socks网络代理
常见的网络场景有如下三类:
- 服务器在内网中,可以任意访问外部网络
- 服务器在内网中,可以访问外部网络,但服务器安装了防火墙来拒绝敏感端口的连接
- 服务器在内网中,对外只开放了部分端口,且服务器不能访问外部网络。
Socks网络代理
socks是一种代理服务,可以简单的将一端的系统连接到另一端。socket支持多种协议,包括HTTP、FTP等。socks分为socks4和socks5两种类型:socks4只支持TCP协议;socks5不仅支持TCP/UDP协议,还支持各种身份验证机制等,其标准端口为1080,socks能够与目标内网计算机进行通信,避免多次使用端口转发。
常用的socks代理工具
EarthWorm
EarthWorm(EW)是一套便携式的网络工具,具有socks服务架设和端口转发两大核心功能,可以在复杂的网络环境中实现网络穿透,EarthWorm下载地址:https://github.com/rootkiter/EarthWorm
reGeorg
reGeorg是reDuh的升级版,主要功能是把内网服务器的端口通过HTTP/HTTPS隧道转发到本机,形成一个回路。
sSocks
sSocks是一个socks代理工具套装,可用来开启socks代理服务。sSocks支持socks5验证,支持IPv6和UDP,并提供反向socks代理服务。
SocksCap64
SocksCap64是一款在Windows环境中相当好用的全局代理软件,官方网站:http://www.sockscap64.com/
Proxifier
Proxifier是一款非常好用的全局代理软件,Proxifier提供了跨平台的端口转发和代理功能,适用于Windows、Linux、和MacOS平台,Proxifier官方网站:https://www.proxifier.com/
ProxyChains
ProxyChains是一款可以在Linux下实现全局代理的软件,性能稳定、可靠,可以使任何程序通过代理上网,允许TCP和DNS流量通过代理隧道,ProxyChains官方网站:http://proxychains.sourceforge.net/
压缩数据
渗透测试中,下载数据是一项非常重要的工作。
RAR
RAR格式介绍
RAR是一种专利文件格式,用于数据的压缩和打包,开发者为尤金·罗谢尔,"RAR"的全称是"Roshal ARchive",意为"罗谢尔的归档",其首个公开版本为RAR 1.3发布与1993年。
使用命令
- Rar.exe a -k -r -s -m3 E:\webs\1.rar E:\webs 把E:\webs下的所有内容打包为1.rar,放到E:\webs目录下
- Rar.exe s E:\webs\1.rar 解压文件
- 以ZIP格式压缩/解压命令是一样的,只需要将文件后缀名修改为".zip"即可。
7-Zip
7-Zip介绍
7-Zip是一款免费且开源的压缩软件,与其他软件相比,7-Zip有更高的压缩比;与WinRAR相比,7-Zip对系统资源的消耗较少,无需安装,功能与同类型的收费软件相近。
使用命令
- 7z.exe a -r -p12345 E:\webs\1.7z E:\webs\ 把E:\webs下的所有内容打包为1.7z,放到E:\webs\目录下,压缩密码为12345
- 7z.exe x -p12345 E:\webs\1.7z -oE:\x 把打包的1.7z文件解压到E:\x目录下
上传和下载
-
对于不能上传shell,但是可以执行命令的Windows服务器(而且唯一的入口就是命令行环境),可以在shell命令环境中对目标服务器进行上传和下载操作。
-
上传和下载方法
- 使用FTP协议上传
- 使用VBS上传
- 利用Debug上传
- 利用Nishang上传
- 利用bitsadmin下载
- 使用PowerShell下载