磁盘分析的部分很简单,知道vmdk是虚拟磁盘格式即可利用VMware直接映射。
磁盘空间内得到nothing.rar,打开却是空白的nothing.gif。此时需要你很敏锐,意识到以下两个问题:
1.为什么给的是rar压缩包?CTF中大部分见到的都是zip压缩包,虽然由于加密算法的不同rar包的爆破速度远低于zip的爆破速度,但是这道题又没有加密;
2.查看nothing.gif的基本信息,我们发现GIF图的大小只有3.5KB,但是占用的磁盘空间却达到了44KB,这一点尤为奇怪。
这就来到了题目的重点,NTFS数据流隐写。注意,它同样能实践于Web安全及渗透领域,这点在后文会提到。
介绍
NTFS交换数据流(alternate data streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下每一个文件,都有着主文件流和非主文件流,主文件流能够直接看到;而非主文件流寄宿于主文件流中,无法直接读取,这个非主文件流就是NTFS交换数据流。交换数据流的诞生源于Windows系统与苹果的HFS系统的交互需求,NTFS使用交换数据流来存储文件相关元数据等等。
ADS的作用在于,它允许一个文件携带着附加的信息。例如,IE浏览器下载文件时,会向文件添加一个数据流,标记该文件来源于外部,即带有风险,那么,在用户打开文件时,就会弹出文件警告提示。再如,在网址收藏中,也会附加一个favicon数据流以存放网站图标。
创建一个数据交换流文件的方法很简单,只需要这样一条命令:
type "要隐藏的附加文件">"宿主文件":"要隐藏的附加文件"
例如在这道题目中,我就是用这样一条命令向ADS中写入了图像文件:
type "flag.gif" > "nothing.gif":"flag.gif"
此时需要注意,尽管可以向文本/图像/可执行文件等各类文件类型的ADS中写入数据,但最好保持宿主文件和附加文件文件类型的一致性。我第一次尝试是向png附加gif,结果测试发现这种隐写不够隐蔽,可以直接被foremost察觉并分离…
另一个要点是,你需要用WinRAR这样支持NTFS数据流的压缩软件对压缩包进行操作。如果没有了解到这个点,就一直在坑里找路。WinRAR解压缩不会丢失数据流,但是加压缩时不会默认保存数据流,这一点是我反复尝试失败后,去找pcat师傅求助,才知道压缩高级选项中有保存文件流数据的选项:
使用WinRAR解压后,我们使用lads.exe执行 /s 递归查询,发现被隐写的flag.gif文件
提取数据则可以使用Ntfs Streams Editor
导出得到GIF图,分帧即可看到flag。
拓展
这道题目到这里就告一段落了,但是关于NTFS交换数据流的运用还不止如此。
由于常规的系统命令和文件管理器都检查不到其存在,ADS也被用于隐藏后门,大多数防病毒软件默认不会扫描Windows交换数据流,如果启用这个功能,扫描速度会降低90%。隐藏交换数据流还有一个更隐蔽的方式,就是将交换数据流绑定到一个保留设备名中,这样就算使用LDS或streams.exe也无法检测到交换数据流。Windows有很多不应该用作文件名的保留设备名如CON、PRN、COM1、LPT1等等。这些设备名是用来将输出数据发送到周边硬件设备的,但这些保留设备名是“不应该”作为文件名,但并没有禁止使用。
但是从WindowsXP以后微软就禁止用户从ADS里执行程序了。写入,读出操作都可以,但是不允许执行。可以通过脚本解释器(Wscript.exe)来运行该脚本,详细介绍见
在实战渗透中也可以利用这种方法隐藏nc,隐藏meterpreter等。
在Web安全方面,涉及到php+Windows+IIS环境的冒号截断绕过黑名单上传,在UDF提权中也有利用:
此考点出现在了HITB-XCTF 2018的upload一题中。
参考:
https://www.cnblogs.com/Chesky/p/ALTERNATE_DATA_STREAMS.html
http://drops.the404.me/1981.html
《数据隐藏技术揭秘》