NTFS的ADS流应用

所有的文件在NTFS上都至少包括一个流-主流,即是我们平常看到可以存数据的文件。一个流的全名包括下面三个部分:<文件名>:<流名>:<流类型>

流在渗透中比较实用的有这几个方面:


top1:在udf提权中,mysql在5.1版本下udf直接导入c:/windows下就行,在5.1版本以上要导入mysql目录下的lib\plugin\目录,又5.1版本在安装时候默认没有lib\plugin目录的,除非你安装的是完整版(官方的那种200多M的)。所以可以用ADS流来创建目录,就绕过了这个限制。例如:

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

我用的是win2003和mysql5.3.10测试失败,应该是高版本mysql限制了流的使用,估计只能在5.1版本左右可以用。

 

top2:在webshell中的使用,在服务器上echo一个数据流文件到正常网页上。比如

 
  
echo ^ >index.php:hidden.txt
 
  

上,index网页会正常显示,就是会多了一个流文件,我们用上传一个正常的php文件,文件包含内容是

 
  
 
  

一句话便被包含进来了,达到了隐蔽的效果。

 

top3:绕过黑名单验证

在测试中我们发现,如果上传的文件名字为:test.php::$DATA,会在服务器上生成一个test.php的文件,其中内容和所上传文件内容相同,并被解析。假设我们需要上传的文件内容为:下面是上传是会出现的现象:
上传的文件名 服务器表面现象 生成的文件内容

 
  
Test.php:a.jpg 生成Test.php 空 
Test.php::$DATA 生成test.php  
Test.php::$INDEX_ALLOCATION 生成test.php文件夹 
Test.php::$DATA\0.jpg 生成0.jpg  
Test.php::$DATA\aaa.jpg 生成aaa.jpg 
 
  

PS: 上传test.php:a.jpg的时候其实是在服务器上正常生成了一个数据流文件,可以通过notepad test.php:a.jpg查看内容,而test.php为空也是正常的。 根据第二个现象,我们可以bypass一些黑名单验证。 后面我加\0测试的时候是想截断后面的东西,但是发现windows会无视”/””\”这两个符号前面的东西,只识别这俩符号后的字符串。(由于windows把\ /当成了目录,而上传只认识文件名所导致的)

参考自:http://zone.wooyun.org/content/1064

你可能感兴趣的:(安全姿势)