AD

NTFS数据流ADS最新探索

简介

NTFS交换数据流(alternate data streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流,就是说除了主文件流之外还可以有许多非主文件流寄宿在主文件流中。它使用资源派生来维持与文件相关的信息,虽然我们无法看到数据流文件,但是它却是真实存在于我们的系统中的。创建一个数据交换流文件的方法很简单,命令为“宿主文件:准备与宿主文件关联的数据流文件”。

ADS

ADS的定义: 一个被命名的数据流是一个文件或者目录的一部分,它们可以独立于默认数据流被单独的打开。许多数据流的操作只影响数据流本身并不影响其他数据流所在的文件文件和目录。一个直观的例子就是docx文件属性中的“详细信息”,如下:




然后删除及修改该处的内容后如下:
可以发现修改这些信息,并没有影响到文档最后保存时间及总编辑时间等。

流的特性

所有的文件在NTFS中至少包含一个主数据流,一个文件NTFS中真正的文件名称格式是: <文件名>:<流名称>:<流种类>
默认的数据流没有名字,如果我们创建一个文件sample.txt实际在NTFS中全名是sample.txt::$DATA
如果我们创建一个文件夹,它并没有默认的数据流(Data Stream),不过它有一个默认的目录流(Default Directory Stream)——是$INDEX_ALLOCATION,默认的流名是I30,所以如果我们创建了一个文件夹sample,它的全名是sample:I30:$INDEX_ALLOCATION

创建宿主文件

宿主文件在这里指的就是普通文件,是在Windows中可以正常显示、运行、编辑的任何类型文件。我们先来创建一个txt格式的文本文档,把它作为宿主文件。运行“记事本”,随意输入一些内容,例如“测试——宿主文件”,然后将其保存为D:\test\test.txt。查看该文件“属性”如下:
   


关联数据流文件

宿主文件创建完成后,我们再来创建一个数据流文件。
D:\test\目录中,使用echo "NTFS 数据流是个什么东西?" > test.txt:datas.txt创建一个数据流文件,并附加至宿主文件test.txt


回到D:\test\目录中,可以发现在该文件夹中只有一个test.txt,而没有数据流文件datas.txt,即使在“命令提示符”中使用“dir”命令也找不到datas.txt

查看test.txt文件的内容和大小。

      

      
      
那么数据流文件datas.txt哪去了呢?还是用“命令提示符”让它现形吧,在“命令提示符”中输入命令“notepad test.txt:datas.txt”,在弹出的记事本程序中就会出现数据流文件datas.txt的内容。

尝试修改数据流内容:

使用快捷键保存。重新使用刚才的命令打开,发现已经修改成功。
CMD下,尝试使用type命令,结果对比如下:




删除test.txt命令,再次尝试访问数据流

创建数据流文件

我们除了能将数据流文件和宿主文件进行绑定外,还能够创建单独的数据流文件。在“命令提示符”中输入“echo "单独的数据流文件" > :datas2.txt”,

这样就创建了一个名为datas2.txt的数据流文件,而这个文件无论是在“资源管理器”还是在“命令提示符”中使用“dir”命令,都是无法看到的。
尝试使用命令访问:

可以说,这个文件已经在系统中隐身了,(当然,这个只使用用老版本的系统,在比较新的系统中,我们还是有办法查看到数据流文件的)。我们只能通过输入命令“notepad :datas2.txt”得知它的存在,而即使知道它的存在,我们也无法删除,因为命令提示符中“del”命令已经失去了作用。唯一能将之删除的办法,就是删除其上一级目录,如果单独的数据流文件存在于磁盘根目录,那么删除它将是一件很痛苦的事。(经验证,我们可以使用"rm"命令来删除指定的数据流文件。)
文中的数据流文件我们都是以文本文档举的例子,而数据流文件是不局限于文本文档的,任何文件都可以作为数据流文件,包括可执行程序,图片,声音等等。这就至少造成两个隐患:一是黑客入侵后可能将黑客工具通过数据流隐藏起来,当然也有病毒发作后将病毒文件进行隐藏的;二是通过某些途径,让数据流文件可以自动执行,起到隐藏木马的效果。

查看数据流文件

  现在网络上很多介绍ADS/数据流文件的文章,都说在CMD下无法通过命令查看到数据流文件,需要使用lads.exe等工具才能查看。其实这个结论用在现在是个误导,我在http://www.heysoft.de/上发行,并经过自己测试,在win7系统中,dir命令有一个“/R 显示文件的备用数据流使用“DIR / R”命令即可看到数据流文件,如下:
  

ADS引发的安全问题

由于ADS文件的特性,在实际使用中,也被恶意代码编写者发现及利用,产生过一些安全问题:

::$DATA请求泄露

CVE-1999-0278——MicrosoftIIS 3.0/4.0 ::$DATA请求泄露ASP源代码漏洞(MS98-003),一个相对古老的漏洞,早期IIS3.04.0版本时,在处理文件请求时会先判断文件扩展名是否在可执行文件扩展名列表中,如果在,则执行并返回结果,如果不在,则直接返回文件内容。从而导致如果一个HTTP请求是访问ASP文件的NTFS流,会直接返回对应文件的ASP源代码。
NTFS文件系统支持 在文件中包含额外的数据流。$DATA是在NTFS文件系统中存储数据流的属性。当我们对一个在NTFS分区中的ASP文件发出包含$DATA 求,IIS会检查最后一个“.”后面的扩展名,因为多了“::$DATA”,结果IIS不认为这是一个ASP文件,而文件系统可以识别该请求,于是ASP 的源代码被返回。

隐藏webshell

利用数据流文件特性隐藏webshell,如果webshell检测程序没能考虑到ADS层面的检测,在test.php中添加1.php:.jpg); ?>,并且1.php:.jpg中是后门代码。访问test.php时,后门代码能成功解析。

绕过HTTP基础认证

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

上传绕过(黑名单机制的验证)

对于windows环境的服务器,上传1.asp:.jpg类型的文件,当文件传到服务端时,windows会将该文件识别成ADS,从而认为其宿主文件名为1.asp而将.jpg识别为流名。
在测试过程中(测试环境中WEB ServerIISApacheNginx)无论如何构造都无法访问可以解析的文件。对于1.asp:.jpg这类ADS,其完整的全称为1.asp:.jpg:$DATA,流名称可以省略,但流类型是不能省略且不能自定义的。当上传文件内容为phpinfo 1.php::$DATA时,在存储时会出现逻辑问题,导致生成非空的1.php文件,1.php文件的内容为1.php::$DATA的内容,并且1.php可以正常被web服务器解析。
该逻辑问题与上传文件的代码解析语言及web server无关,也就是说上传1.asp::$DATA会生成非空的1.asp文件,1.jsp::$DATA同样会生成1.jsp
另外,当1.php::$INDEX_ALLOCATION1.php:$I30:$INDEX_ALLOCATION时,存储时逻辑同样会出现问题,会把该文件误认为是文件夹,从而建立一个1.php的空文件夹(注:文件夹的默认流名称为$I30)。
Windows还有个特性,就是当文件夹名或文件名末尾的任意个数的空格或点,在存储时都会自动去除,所以当上传1.php::$DATA………….1.php::$INDEX_ALLOCATION……………此类文件同样会造成上述的存储时的逻辑错误。
MySQL5.1及其之后的版本,使用UDF提权时,指定UDF必须导出在MySQL目录下的libplugin下才有用,非完全版的Mysql默认安装后没有plugin这个目录,且在MySQL中没有可创建文件夹的函数。如果在webshell中也无权限建立该目录的话,可尝试使用如下的SQL建立文件夹“selectxxx into outfile c:\test::$INDEX_ALLOCALTION\’;”同样由于windows在处理时会把c\:test::$INDEX_ALLOCALTION当做ADS处理,从而生成一个test文件夹。

自解压

winrar有个重要的特性是支持数据流压缩,利用该特性和自解压特性,可以制作出来一个特殊的压缩包。
test文件夹下使用命令“type hash.exe>123.txt:hash.exe”,这样就把该程序作为数据流附加到了123.txt文件中。
然后在该目录下,可以使用命令“start 123.txt:hash.exe”命令来运行附加的数据流程序。
使用命令“type hash.exe>:hash.exe”这样就为hash.exe创建了一个数据流文件,完成后将test文件夹中的hash.exe删除。返回到上一级目录,在test文件夹上单击右键,在出现的菜单中选择添加到test.rar”
双击刚才创建的test.rar,点击Winrar工具栏上的添加按钮,浏览选中test文件夹。在出现的压缩文件名和参数面板中切换到高级选项卡,选中其中的保存文件数据流选项,点击确定即可。
Winrar中选中test文件夹,点击Winrar工具栏上的自解压格式按钮。在自解压格式标签的自解压模块中选中“Default.SFX”,然后点击高级自解压选项按钮。出现高级自解压面板后,在其常规标签的解压后运行中填入“test:hash.exe”。切换到模式标签,勾选其中的全部隐藏。全部设置完成后点击确定,这样就创建了一个极为隐蔽的自解压木马,甚至可以躲过杀毒软件的查杀,当用户双击这个自解压文件后,就会运行里面的数据流木马。
在我实际测试时,现在会被安全软件隔离,并且自解压的时候会提示无法创建某些文件,如下:
  

附录


评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

多种方法绕过POWERSHELL的执行策略