NTFS诡异的数据流文件ADS

简介

ADS全名叫做Alternate data streams,是NTFS的一个特性,它允许除一个文件文件主流之外,还可以拥有很多其他流,这些其他流我们在资源管理器中是看不到的,

而且即使知道了ADS文件的名字一时无法删除的,因为Del指令不支持ADS文件的删除。

这个特性是为了兼容Macintosh的HFS文件系统存在的,不过对于windows系统本身它十分鸡肋,和windows本身的兼容也不是很好,

基本指令

ADS的创建分为两种,单独存在的和依附于文件的,不仅仅局限于txt文本,图片声音可执行文件多可以作为流文件来存在。

单独存在流:

echo "this is a stream file" > :stream.txt
type d:\winnt\notepad.exe > :np.exe

依附于文件流:

被依附的主文件内容不会改变,也不会改变文件大小,而且需要此文件的写权限。

echo "this is a stream file" > main.txt:stream.txt
type d:\winnt\notepad.exe > main.txt:np.exe

查看流文件:

使用type edit等命令读取流文件时会报错,因为命令号也不能很好地支持ADS

notepad test.txt:stream.txt

清除主文件中附加的流:

删除上层目录,或者切换文件格式到FAT也可以

d:\ads>type myfile.txt > myfile.bat
d:\ads>del myfile.txt
d:\ads>ren myfile.bat myfile.txt

运行附加流的文件:

这里运行np.exe在任务管理器中显示有可能是myfile.exe很具有迷惑性,但有些版本中是myfile.exe:np.exe

d:\ads>start d:\ads\myfile.txt:np.exe
d:\ads>start .\myfile.txt:np.exe

主流数据

在ADS中,$DATA代表了主流的数据,但在系统下不能成功读取。

notepad test.txt::$DATA

 

路径流

这个路径也是带有流的,并且在MySQL中可以用来新建目录。

select 'xxx' into outfile 'D:\\mysql\\lib::$INDEX_ALLOCATION'; 

官方文档

http://msdn.microsoft.com/en-us/library/ff358877.aspx

 

漏洞与利用

这里只是理论上的用法,懒得测试了。。。

大部分漏洞的成因是,第三方软件对ADS的处理不够谨慎,如MySQL APACHE。

目录访问权限绕过

对于IIS6.0+PHP、IIS7.5+asp、IIS7.5+php环境下,如果某目录通过HTTP Basic来认证,假设其目录下有index.php文件,我们可以通过构造如下方式来绕过认证直接访问其目录下的文件。

/admin::$INDEX_ALLOCATION/index.php
/admin:$i30:$INDEX_ALLOCATION/index.asp

漏洞描述

http://www.exploit-db.com/exploits/19033/

上传文件黑名单绕过

构造这样的文件名,会建立宿主文件1.asp,但是上传内容会保存在附加流文件2.jpg中

1.asp:2.jpg

访问附加流的话是按照jpg解析,所以比较鸡肋。

 

构造这样的文件名,会生成一个文件夹。

1.php:$I30:$INDEX_ALLOCATION

但是这些方法只能在不修改文件名的前提下使用。

隐藏webshell

把shell写到某个文件的附加流中,再在其他文件中包含这个附加流。

在test.php中添加

<?phpinclude(“1.php:.jpg”); ?>

在1.php:.jpg中写入后门代码。访问test.php时,后门代码能成功解析。

新建目录

MySQL5.1及其之后的版本,使用UDF提权时,指定UDF必须导出在MySQL目录下的lib\plugin下才有用,而非完全版的Mysql默认安装后没有plugin这个目录,且在MySQL中没有可创建文件夹的函数。(通常很多时候在webshell中也无权限建立该目录),可用如下的SQL建立文件夹

select‘xxx’ into outfile ‘c:\\test::$INDEX_ALLOCALTION\\’;

查看文件源码

这是一个很古老的漏洞,早期版本的IIS在处理文件请求时会先判断文件扩展名是否在可执行文件扩展名列表中,如果在,则执行并返回结果,如果不在,则直接返回文件内容。NTFS文件系统支持 在文件中包含额外的数据流。$DATA是在NTFS文件系统中存储数据流的属性。当我们对一个在NTFS分区中的ASP文件发出包含$DATA请 求,IIS会检查最后一个“.”后面的扩展名,因为多了“::$DATA”,结果IIS不认为这是一个ASP文件,而文件系统可以识别该请求,于是ASP 的源代码被返回。在高版本的IIS以及其他的Web Server中测试没有发现该问题。

你可能感兴趣的:(NTFS诡异的数据流文件ADS)