buu-3

NTFS数据流

介绍

先来个介绍吧,

NTFS交换数据流(alternate data streams,简称ADS)指的是微软Windows NT内核的系列,是NTFS磁盘格式的一个特性。在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中。它使用资源派生来维持与文件相关的信息。————百度百科

**NTFS数据流 **(ADS,Alternate Data Streams,附加 数据流 )通常用于保存 文件 额外信息,例如 文件 属性中的摘要信息就是以 流 的形式存储的。

说点大白话就是一个文件可以寄生在另外一个文件上,且在文件界面上只显示宿主文件,利用这个性质,木马可以寄生宿主文件上,甚至可以躲过大多数杀毒软件的查杀。

如何创建一个ntfs数据流文件?

“宿主文件:准备与宿主文件关联的数据流文件”。很有意思的是,用windows自带的notepad可以创建并查看流文件内容,已创建内容会显示隐藏的信息,无相关数据流文件则问是否创建流文件(这里使用的是windows 7 x64)

notepad打开数据流文件

小场面

杂项题的先搬过来用用

echo直接写入数据流文件

type方法

试图直接隐藏到c盘里但是被拒绝了
* type命令和echo命令不同,type命令是将已经存在的一个文件,

* 用交换数据流的方式寄生到另外一个文件或文件夹上,

* 若文件夹是一个空文件夹,被寄生后,文件夹大小显示仍然是0。

同样的方式,图片文件也可以寄生在任何文件上,使用系统自带的mspaint就可以打开了

删除ADS文件

因为只有NTFS文件系统支持数据流文件,所以将文件转移到FAT文件系统(文件配置表)下,所带的数据流文件自动就会被删除掉了,或者你直接把宿主文件一起删了

那如果只想删除ads文件的话,可执行以下操作:

1
2
3
4
5
6
type a.txt > a.txt.bak
rem type不能支持ADS,所以拿它来备份载体
del a.txt
rem 删除载体及ADS
ren a.txt.bak a.txt
rem 恢复载体文件

说了这么多,做题吧,做题吧

NTFS数据流

打开压缩包500个txt文件,499个里面说flag is not here,

找了半天,发现293.txt有问题,但是又找不到文件在哪里,用各种工具在都无果,最后选择直接打开

我有一只马里奥

运行exe文件然后收获一份txt,说的很明确,用刚才相同的方法打开就行了

喵喵喵

前面lsb隐写修改图片高扫个二维码拿到压缩包到这卡住了,去看了wp,说道用ntfs扫描,但是我扫不出来,后来还有人说必须用winrar解压,虽然报错,但是扫出来了一个pyc文件,但是我还是扫不出来。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我无语了,扫整个磁盘就可以,扫单个文件就不行,乌鱼子

pyc反编译,编译完

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#!/usr/bin/env python
# visit https://tool.lu/pyc/ for more information
import base64

def encode():
flag = '*************'
ciphertext = []
for i in range(len(flag)):
s = chr(i ^ ord(flag[i]))
if i % 2 == 0:
s = ord(s) + 10
else:
s = ord(s) - 10
ciphertext.append(str(s))

return ciphertext[::-1]

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']

写一个decode

这个编码相对好理解,就是不怎么会写脚本挺折腾的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import base64

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']
ciphertext = ciphertext[::-1]


def decode():
flag = ''
for i in range(24):
if i % 2 == 0:
s = int(ciphertext[i]) - 10
else:
s = int(ciphertext[i]) + 10
s = i ^ s#按位异或
flag = flag + chr(s)
print(flag)

decode()

get新操作

了解:windows系统隐藏文件夹和查看方法
隐藏:attrib m0re +a +s +h
查看:dir/a:h

新发现

参考资料:https://blog.csdn.net/wxh0000mm/article/details/100761973

https://blog.csdn.net/vivilorne/article/details/3841509