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
但是这些方法只能在不修改文件名的前提下使用。
把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中测试没有发现该问题。