这是在前文学习mysql提权的时候遇到的利用数据流写文件,以前有点印象但不是很深,这里记录一下。

NTFS数据流介绍

在NTFS文件系统中存在着NTFS备用数据流(Alternate Data Streams,简称ADS),这是NTFS磁盘格式的特性之一。每一个文件,都有着主文件流和非主文件流,主文件流能够直接看到;而非主文件流寄宿于主文件流中,无法直接读取,这个非主文件流就是NTFS备用数据流。

ADS的作用在于,它允许一个文件携带着附加的信息。例如,IE浏览器下载文件时,会向文件添加一个数据流,标记该文件来源于外部,即带有风险,那么,在用户打开文件时,就会弹出文件警告提示。再如,在网址收藏中,也会附加一个favicon数据流以存放网站图标。

ADS也被用于一些恶意文件隐藏自身,作为后门。

ADS应用

这里写一个隐藏文本来看看,首先创建一个空的example.txt,然后写入ADS,这里写入一个字符串

echo "123" > example.txt:config #这里要用cmd,用powershell会报错

然后直接打开文件还是空的

image-20240713015237491

想要查看ADS的话可以这样

notepad example.txt:config

image-20240713015437701

还有用下面命令查看该文件所有的ADS

dir example.txt /R

image-20240713015550479

ADS可以写任何东西,包括图片、音频、视频等,所以可以用来隐藏后门,在Windows XP中,可执行文件可以隐藏并且被执行。但是,微软已经发现了这个问题并进行了修复,目前在Windows Vista及后续系统中已经无法直接运行ADS中的可执行文件了。

可以直接这样写入文件,其他文件同理

type 01.txt > example.txt:01.txt
type 01.txt >> example.txt:01.txt

ADS数据流文件有三种删除方式。一是直接删除宿主文件,二是将宿主文件移到FAT32等非NTFS分区中;三是利用工具软件,如IceSword、Ntfs Streams Editor删除。

Ntfs Streams Editor删除命令如下:

streams.exe -d <File>