内网第三章-隐藏隧道通信技术
内网第三章-隐藏隧道通信技术
内网连通性判断
常用判断方法
1.ICMP协议
|
|
2.TCP协议
|
|
3.HTTP协议
|
|
4.DNS协议
|
|
若流量不能直接流出
常见于企业办公网段上网的场景
- 查看网络链接,判断是否存在与其他机器的8080(不绝对)等类似端口的连接(可以尝试运行
ping -n 1 -a <ip>
) - 查看内网中是否有主机名类似于
proxy
的机器 - 查看IE浏览器的直接代理
- 根据pac文件的路径(可能是本地路径,也可能是远程路径),将其下载下来并查看。
- 执行以下命令,利用curl工具进行确认
|
|
网络层隧道技术
- IPv6隧道
- ICMP隧道
IPv6隧道
常见工具:socat
,6tunnel
,nt6tunnel
等
概念:通过IPv6隧道传送IPv6数据报文(把IPv6报文整体封装在IPv4数据报文中,使得IPv6报文穿过IPv4海洋,到达另一个IPv6小岛)的技术
现阶段的边界设备、防火墙甚至入侵防御系统还无法识别IPv6的通信数据,而大多数的操作系统支持IPv6,所有需要手动配置(win的网络属性中) Note:即使设备支持IPv6,也可能无法正确分析封装了IPv6报文的IPv4数据包
配置隧道与自动隧道的区别: 只有在执行隧道功能的节点的IPv6地址是兼容IPv4地址时,自动隧道才是可行的。在为执行隧道功能的节点分配ip地址时,如果采用的是自动隧道方法,就不需要进行设置。 配置隧道方法则要求隧道末端节点使用其他机制来获得其IPv4地址,例如:DHCP/人工配置或其他IPv4的配置机制
防御: 了解IPv6的具体漏洞,结合其他协议,通过防火墙和深度防御系统过滤IPv6通信
ICMP隧道
常见工具:icmpsh
,PingTunnel
,icmptunnel
,powershell icmp
等
比较特殊的协议,不用开放端口
,最常见的ICMP消息为ping命令的回复。
将TCP/UDP数据包封装到ICMP的ping数据包中,从而穿过防火墙。
工具
1.icmpsh
|
|
2.PingTunnel
|
|
参数说明:
|
|
其他工具
防御方法
通过Wireshark进行ICMP数据包分析,如下:
- 检查同一来源的ICMP数据包的数量。一个正常的ping命令每秒最多发送两个数据包,而使用ICMP隧道的浏览器会在很短的时间内产生上千个ICMP数据包
- 注意那些Payload大于64bit的ICMP数据包
- 寻找响应数据包的Payload与请求数据包中的Payload不一致的ICMP数据包
- 检查ICMP数据包的协议标签。例如:icmptunnel会在所有的ICMP Payload前面添加"TUNL"标记来标识隧道 -> 这就是特征
传输层隧道技术
传输层技术包括:TCP隧道、UDP隧道、常规端口转发等
若内网防火墙阻止了指定端口的访问,在获得目标主机权限后,可以使用iptables打开指定端口
1.lcx端口转发
两个版本:
- Linux 版本:
portmap
- Widows版本:
lcx.exe
一个客户端一个服务端
lcx内网端口转发
|
|
lcx本地端口映射
|
|
linux版的portmap
|
|
2.netcat
安装
|
|
参数
|
|
使用 Banner抓取
|
|
连接到远程主机
|
|
端口扫描
|
|
端口监听
|
|
文件传输
|
|
简易聊天
|
|
获取shell
|
|
内网代理
|
|
3.PowerCat
可以说是nc的powershell版本
下载地址:https://github.com/besimorhino/powercat.git
用法
|
|
既然说是nc的powershell版本,那就可以与nc配合连接: 1.通过nc正向连接powercat
|
|
2.通过nc反向连接powercat
|
|
通过powercat返回powershell
|
|
通过powercat传递文件
|
|
用powercat生成payload
|
|
PowerCat DNS隧道通信
|
|
将powercat作为跳板
|
|
应用层隧道技术
使用较多
1.SSH隧道
参数
|
|
SSH配置文件
|
|
本地转发
|
|
远程转发
|
|
动态转发
|
|
防御思路
|
|
2.HTTP/HTTPS隧道
常用工具:
reGeorg 工具
支持很多种脚本
|
|
Hydra 暴力破解密码(支持很多协议)
|
|
3.DNS协议(重点)
虽然激增的DNS流量可能会被发现,但基于传统的Socket隧道已经濒临淘汰以及TCP、UDP通信大量被防御系统拦截的状况, DNS、ICMP、HTTP/HTTPS等难以被禁用的协议已经成为i攻击者控制隧道的主要渠道 DNS是一个不可缺少的服务;另一个方面,DNS报文具有穿透防火墙的能力;也由于防火墙和IDS等大都不会过滤DNS流量, 也为DNS成为隐蔽信道创造了条件
C&C(Command and Control Server, 命令控制服务器) – 用来管理僵尸网络和进行APT攻击的服务器 分为:C&C服务端,C&C客户端 由于安全厂商各种措施阻断了C&C通信,通过各种隧道技术实现C&C通信的技术(特别是DNS隧道技术)出现了
DNS隧道原理:
|
|
查看DNS的联通性
|
|
1).dnscat2工具
下载地址:https://github.com/iagox86/dnscat2 https://downloads.skullsecurity.org/dnscat2/ https://github.com/lukebaggett/dnscat2-powershell
使用DNS协议创建加密的C&C通道 通过预共享密钥进行身份验证 使用Shell及DNS查询类型(TXT, MX, CNAME, A, AAAA),多个同时进行的会话类似与SSH中的隧道
客户端是用C写的,服务端是用Ruby写的
dnscat2的隧道有两种模式:
|
|
- 如果目标内网放行所有的DNS请求,dnscat2会使用
直连模式
,通过UDP的53端口进行通信(不需要域名,速度快,而且看上去仍然像普通的DNS查询)。在请求日志中,所有的域名都是以dnscat
开头的,因此通信容易检测。 - 如果目标内网中请求仅限于白名单服务器或特定的域,dnscat2会使用
中继模式
来申请一个域名,并将运行dnscat2读无端的服务器指定为受信任的DNS服务器
DNS隧道应用场景:
|
|
dnscat2特点:
|
|
使用 1.部署域名解析
|
|
2.安装dnscat2服务端(在vps上)
|
|
3.目标主机安装客户端
|
|
4.反弹shell
|
|
支持多域名并发,可将多个子域绑定在同一个NS下,然后在服务端同时接收多个客户端连接
|
|
2).iodine工具
下载地址:https://github.com/Al1ex/iodine 官方文档:http://code.kryo.se/iodine
iodine可以的通过一台DNS服务器制造一个IPv4数据通道,特别适合在目标主机只能发送DNS请求的网络环境中使用。
C语言开发,分为服务端程序iodined
和客户端程序iodine
, Kali内置了iodine
特点:
|
|
支持直接转发
和中继
两种模式
原理:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道相连,处于同一个局域网(可ping通)。在客户端和服务端之间建立连接后, 客户机会多出一块名为"dns0"的虚拟网卡。
使用
0.先准备域名(和上面类似)
域名服务商:namecheap
增加A记录,NS记录
测试DNS是否解析成功
1.安装服务端
|
|
2.安装iodine客户端
|
|
3.使用DNS隧道
|
|
防御DNS隧道的方法
- 禁止网络中任何人向外部服务器发送DNS请求,只允许与受信任的DNS服务器通信
- 虽然没有人会将TXT解析请求发送给DNS服务器,但是dnscat2和邮件服务器/网关会这样做。因此可以将邮件服务器/网关列出白名单并组织传入和传出流量中TXT请求
- 跟踪用户的DNS查询次数。如果达到阈值,就生成相应的报告
- 阻止ICMP
各种隧道技术的优劣
根据实际环境选择技术
DNS+SSH隧道结合
SOCKS代理
常见的网络场景
|
|
SOCKS是一种代理服务,可简单的将一端的系统连接另一端。 SOCKS支持多种协议。 SOCKS分为SOCKS4和SOCKS5。SOCKS4只支持TCP协议,SOCKS5不仅支持TCP/UDP,还支持各种身份验证机制等,标准端口为1080。 SOCKS能与目标内网计算机进行通信,避免多次使用端口转发。
常见SOCKS代理工具
可理解为增强版的lcx。他在服务端监听一个端口,当有新连接出现时,会先从SOCKS协议中解析出目标的URL的目标端口,再执行lcx的具体功能 socks代理工具尽量选则小且命令行的
1. EarthWorm(EW)
跨平台,SOCKS5架构,能以正向、反向、多级级联等方式建立网络隧道
下载地址:https://github.com/rootkiter/EarthWorm
新版本Termite
: https://github.com/rootkiter/Termite
2. reGeorg(reDuh的升级版) 可以使目标服务器在内网中(或者在设置了端口策略的情况下)连接内部开发端口 利用webshell建立一个socks代理进行内网穿透,服务器必须支持ASPX, PHP, JSP中的一种。
3. sSocks 支持SOCKS5验证,支持IPv6和UDP,并提供反向SOCKS代理服务(将远程计算机作为SOCKS代理服务端反弹到本地)
4. SocksCap64 http://www.sockscap64.com windows上的全局代理软件 即便是本身不支持SOCKS代理的应用程序,也可以通过其实现代理访问
5. Proxifier https://www.proxifier.com/
6. ProxyChains http://proxychains.sourceforge.net/ https://github.com/haad/proxychains Linux下实现全局代理的软件,可以使任何程序通过代理上网,允许TCP和DNS流量通过代理隧道,支持HTTP、SOCKS4、SOCKS5类型的代理服务器
工具使用
1. EarthWorm(EW) 六种命令格式:
|
|
正向SOCKS 5 服务器
|
|
反弹SOCKS 5 服务器
|
|
多级级联: Case1. lcx_tran
|
|
Case2. lcx_listen, lcx_slave
|
|
三级级联
|
|
2.Termite
分为两部分:admin_exe
和agent_exe
被控者
|
|
3. 在Windows下使用SocksCap64实现内网漫游
代理服务器先设置:ew -s lcx_listen -l 10800 -e 888
以管理员权限打开
1.点击代理
,添加一个代理(代理服务器的ip和端口)
2.点击闪电图标,测试代理服务器是否正常
3.选择浏览器,右键,选择在代理隧道中运行选择程序
,然后就可以自由访问内网了
4. 在Linux下使用ProxyChains实现内网漫游
|
|
压缩数据
1. RAR
如果目标安装了win.rar
,则不必再安装;如果没有安装,则手动安装与系统版本对应的,然后把win.exe
拿出来
参数:
|
|
以RAR格式压缩/解压
|
|
分卷压缩/解压
|
|
2. 7-Zip
下载地址:https://www.7-zip.org/ 参数:
|
|
普通压缩/解压方式
|
|
分卷压缩/解压方式
|
|
上传和下载
对于不能上传Shell,但是可以执行命令的Windows服务器,可在shell环境中进行上传下载操作
1.利用FTP上传文件
在本地或vps搭建FTP服务器
常用FTP命令
|
|
2. 利用VBS上传文件
主要是是使用msxm12.xmlhttp
和adoab.stream
上传
|
|
下载
|
|
3. 利用Debug上传
**原理:**将需要上传的exe文件转换为16进制hex形式,再通过echo命令将hex代码写入文件,最后利用Debug功能将hex代码编译并还原为exe文件
|
|
4. 利用Nishang上传
|
|
5. 利用bitsadmin下载
命令行工具(win xp之后自带的工具), 通常同于创建下载和上传进程并检测其进展
如果渗透的目标主机使用了网站代理,并且需要活动目录证书,那么bitsadmin可以帮助解决下载文件的问题 Note:bitsadmin不支持HTTPS和FTP协议,也不支持 win xp/ server 2003及以前的版本
6. 利用PowerShell下载
|
|
整理了一天,越整越乱,头都大了,下次理清了再来优化