NTFS数据流隐写
NTFS数据流隐写
什么是NTFS
NTFS(New Technology File System)是微软开发的一种文件系统,用于在Windows操作系统中管理磁盘上的数据。它是在1993年随Windows NT 3.1首次引入的,是FAT(如FAT16、FAT32)的继任者。
NTFS交换数据流(简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中。它使用资源派生来维持与文件相关的信息。————百度百科
在 NTFS 文件系统中,文件可以有 多个数据流(Data Streams),而普通用户通常只接触到“主数据流”,也就是你双击打开时看到的内容。但事实上,NTFS 允许文件附加“备用数据流(Alternate Data Streams)”,这些流不会在资源管理器中显示,也不会影响主文件的正常使用。
这就为信息隐藏(隐写)提供了一种天然的方式。
下面我们来尝试一下NTFS交换数据流隐写。
NTFS数据流隐写
1.单文件流隐藏
首先在D盘打开cmd命令窗口,输入以下指令创建一个NTFS数据流
1 | |
我们会发现d盘根目录下并没有名为:m0ra.txt的文本文档
这是因为:m0ra.txt是NTFS数据流,不会在资源管理器中显示,我们需要使用windows自带的notepad查看,命令如下
1 | |

2.关联文件流隐藏
创建一个
test.txt写入This is a normal file在
test.txt:hidden.txt(也就是关联test.txt的NTFS数据流)里写入This is secret用
type读取或者直接在记事本中打开test.txt里面的内容都是This is a normal file使用
more命令可以读取到隐藏的NTFS数据流


已经成功的隐藏信息,查看方式有两种
一种是使用windows自带的more/notepad查看,命令如下
1 | |
1 | |
第二种方法是使用工具(在后面列出)
关联文件流隐藏,不止可以隐藏文本数据,还可以隐藏其他的文件,比如exe可执行文件,pyc文件等。这里使用type命令,来隐藏文件。
1 | |
| 操作 | 命令 | 说明 |
|---|---|---|
| 写入数据流 | type yincang.jpg > suzhu.jpg:yincang.jpg |
把图片写入文件自身的隐藏流中 |
| 查看流是否存在 | streams.exe suzhu.jpg 或 Get-Item -Path .\suzhu.jpg -Stream * |
查看有哪些隐藏流 |
| 提取流为文件(最稳妥) | 使用 PowerShell(见下) | 推荐用于图片、ZIP、EXE 等二进制数据 |
| 打开隐藏图片 | 提取后用图片查看器打开 | 不建议直接用 more 读取图片 |
法 A:使用 cmd 提取到文件
1 | |
然后你就可以用图片查看器打开 extracted.jpg 了。
⚠ 注意:
more会逐行读取文本,因此它处理 二进制数据可能出错,不太可靠,但对于某些小图片有效。
使用 PowerShell 提取为字节流
1 | |
然后你就能用图片查看器打开 extracted.jpg 来查看隐藏的图片内容。
检测NTFA-ADS的工具
AlternateStreamView - View/Copy/Delete NTFS Alternate Data Streams
[Ntfs Streams Editor][https://files.cnblogs.com/files/rainbow7/ntfsstreamseditor.zip]
[lads][ https://files.cnblogs.com/files/rainbow7/lads.zip]
工具的使用在实战中介绍。
CTF例题实战
找了几个NTFS流数据隐写的题目。
[ACTF新生赛2020]NTFS数据流
题目地址:BUUCTF在线评测
下载完之后用WINRAR解压flag.rar(需要解压两次)


打开解压缩后文件夹
筛选文件大小 看一下突出的293.txt


提示ADS,用工具检测一下。
先用NtfsStreamsEditor,
在1中选文件再点2搜索。

直接双击打开异常的293.txt:flag.txt
得到flag ACTF{AAAds_nntfs_ffunn?}
第二个使用NtfsStreamsEditor。

在这里选出要扫描的文件
双击筛选出来的293.txt,但是这个工具不能直接打开ADS

还需要我们输入命令查看内容
1 | |

需要注意的是
解压需要使用winrar解压软件。涉及NTFS流的都需要Win RAR解压。
[bugkuCTF]猫片(安恒)【图片隐写+NTFS+反编译】

题目给了hint:LSB BGR NTFS
先在steg修改里看一下,文件头为PNG,saveBin

保存以后拉到010里面发现文件头不对,删掉FF FE,修改后缀为png,打开发现是一般二维码,丢到随波逐流修复宽高

看起来不太对劲顺便反个色



扫码结果是一个压缩包,下载后解压缩

得到flag.txt用检测工具检测出来flag.pyc(是python编译后的文件)

导出,在网站(python反编译 - 在线工具,编译后下载下来,这里还需要写一个解密脚本。
def decode(ciphertext):
# 恢复原始顺序
ciphertext = ciphertext[::-1]
flag = ''
for i, val in enumerate(ciphertext):
val = int(val)
if i % 2 == 0:
val -= 10
else:
val += 10
c = chr(val)
flag += chr(i ^ ord(c))
return flag
ciphertext = [
'96',
'65',
'93',
'123',
'91',
'97',
'22',
'93',
'70',
'102',
'94',
'132',
'46',
'112',
'64',
'97',
'88',
'80',
'82',
'137',
'90',
'109',
'99',
'112'
]
print(decode(ciphertext))
运行后得出 flag{Y@e_Cl3veR_C1Ever!}