ADS隐藏Webshell

背景知识

NTFS交换数据流(Alternate Data Streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。通俗的理解,就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件。 一、ADS数据流文件的创建   在NTFS分区创建ADS数据流文件有两种形式:一是指定宿主文件;二是创建单独的ADS文件。常用的创建命令有两个:echotype。 1、创建指定宿主文件的ADS数据流文件   第一步:创建宿主文件   宿主文件是指在Windows中可以正常显示、运行或编辑的任何类型文件。假设D:盘为NTFS分区,我们用记事本创建一个txt格式的文本文件host.txt,随意输入一些内容,保存在D:盘根目录中。记住该文件的大小。 第二步:关联数据流文件   进入DOS提示符状态,在“D:\>”状态输入命令“echo "this is a test file">host.txt:ads.txt”。这样我们就创建了一个名为ads.txt,内容为“this is a test file”的数据流文件,并与宿主文件host.txt进行了关联,即ads.txt文件成了host.txt的一个寄生文件。此时,无论是用dir命令还是在资源管理器中,均无法看到ads.txt文件,只能看到host.txt文件,且其大小未发生任何改变!

2、创建单独的ADS数据流文件

在DOS提示符状态输入命令“echo "this is a test file">:ads.txt”,这样就在当前目录下创建了一个未指明宿主文件的名为ads.txt的数据流文件,它同样无法看到。可以说,这个文件已经在系统中隐身了。由于未指定宿主文件,一般的方法无法删除,唯一能将之删除的办法就是删除其所在目录(因为没有宿主文件用于删除,故只能删除其所在目录)。如果这样的单独数据流文件存在于磁盘根目录,那么删除它将是一件非常棘手的事!

除了文本文件以外,包括可执行文件在内的任何常规文件都可以被设置成ADS数据流文件。例如“type c:\winnt\system32\sol.exe>host.txt:sol2.exe”命令就会把sol.exe文件设置成host.txt的ADS数据流文件sol2.exe。我们甚至可以对系统的一些重要文件附加数据流文件,如:“type im-age.bmp>c:\windows\explore.exe:im-age.bmp”命令就会将图片image.bmp设为explore.exe的数据流文件。不难看出,ADS数据流文件的基本创建形式就是

宿主文件名:数据流文件名,中间用冒号间隔

二、ADS数据流文件的查看   

在上述例子中,我们创建了一个ads.txt寄宿在host.txt文件上,如何查看ads.txt文件呢?可以用“notepad host.txt:ads.txt”命令来查看ads.txt文件的内容(如图一所示),你会发现其内容正是“this is a test file”。依此类推,用“mspaint.exe ex-plore.exe:image.bmp”命令就可以查看寄宿在explore.exe中的图片。实际上,ADS数据流文件的通用查看方法是:ADS文件对应的打开/编辑程序 宿主文件名:数据流文件名

在当前目录执行dir /r 命令,会显示当前目录下的ADS文件在文件末端会有:$DATA

三、ADS数据流文件的执行

当一个可执行文件被隐藏在ADS数据流文件中后,我们可以通过start命令来执行这个程序。假设我们用“type c:\windows\system32\notepad.exe > host.txt:np.exe”命令将记事本设为了host.txt文件的数据流文件,那么就可以通过“start .\host.txt:np.exe”命令来运行记事本。请注意:命令行中的“.\”是相对路径表示方法,说明当前目录就是host.txt所在的目录。如果当前目录不是host.txt所在的目录,则应用绝对路径表示法指明host.txt所在的路径,否则,系统会报错!

实战效果

在网站upload目录下放置两个文件,一个是用于文件包含的lfi.php,一个是空的index.php

lfi.php具体代码:

<?php $file = $_GET['file']; include($file); ?>

将恶意数据流寄生在index.php中,命名为evil.php

echo ^<?php phpinfo();?^> > index.php:evil.php

index.php文件大小未发生改变

利用文件包含http://192.168.203.131/upload//lfi.php?file=index.php:evil.php

成功访问phpinfo

思考

能否通过Web直接访问ADS流文件?

尝试访问:http://192.168.203.131/upload/index.php:evil.php

无权限

因此,ADS隐藏的文件无法通过Web直接访问,需要结合文件包含进行访问。

痕迹研究

使用命令可以列出ADS文件

dir /r

使用对应程序查看内容

这里使用notpad

notepad index.php:evil.php

删除ADS流文件

首先对宿主文件进行备份

type index.php > index_Clean.php

再对被感染的宿主文件进行删除

可以看到备份后的index_Clean.php文件没有被感染恶意的流文件,原因是ADS流文件只对创建时指定宿主文件进行寄生。

备份后,删除被感染文件即可恢复且不影响业务

蓝军对应检测处置手段