NTFS数据流和web安全[tips]

Write by admin in web安全架构 at 2008-06-05 18:04:03

|=———————————————————————————————–=|
|=————————–=[ NTFS数据流和web安全 ]=————————-=|
|=———————————————————————————————–=|
|=————————————-=[ By 80sec ]=————————————=|
|=—————-=[ xy7@80sec.com&jianxin@80sec.com ]=—————–=|
|=————————————————————————————————=|

From:http://www.80sec.com/release/ntfs-web-security.txt

NTFS流简单介绍:

NTFS因为它的稳定性 强大的功能 以及它所提供的安全性而成为一种更优越的文件系统,NTFS交换数据流(ADSs)是为了和Macintosh的HFS文件系统兼容而设计的,它使用资源派生(resource forks)来维持与文件相关的信息,比如说图标及其他的东西。创建ADSs的语法相对比较简单和直接,比如说创建和文件myfile.txt相关联的ADSs,只需简单的用冒号把文件名和ADSs名分开即可如:


D:\ads>echo This is an ADS > myfile.txt:hidden

那么这种问题和脚本安全有什么关系呢?80sec的xy7提供了如下的测试代码:

/*-----------------------------------------------------------------------------------------------------------------
<?php
$fp = fopen ("$_GET[a].txt”, “a”);
fwirte($fp,’80sec.com’);
?>
——————————————————————————————————————-*/

当提供一个80sec.php?a=x.php:的时候,在windows系统下会发现在当前目录创建了一个x.php文件,但是内容为空:)但是实际上这已经扰乱了程序的逻辑,生成php文件就是不允许的事情。那么到底怎么回事呢?用记事本执行
notepad x.php:.txt
就可以看到真实的文件路径。那么这个路径在其他文件操作函数是否可用呢?经过测试,像file_exists,include都可以使用这个路径,尽管这个路径在文件目录和dir命令下不可见,并且测试发现,在普通文件名里不允许的<>以及”等字符,在这个路径里是允许存在的,而这些字符就可能在文件操作时不注意而引发一些安全问题。

另外可以看到,这种文件可以很容易在windows系统里隐藏自己的某些代码,譬如将自己的后门代码隐藏在某个php文件里,然后可以在另外一个地方include进来执行,并且这种隐藏在脚本级别是无法查看的,必须借助相应的工具才能查看。

由于文件名的特殊性,可能可以bypass一些文件上传的安全检查,但是经过测试,我们发现并不能在apache和iis里对这种类型文件进行访问,所以即使能上传成功也许也并不能直接访问作为代码直接执行:)但是不排除一些windows下的其他http server能正确处理好这种文件名,而不发生问题,这种问题应该是windows的问题,所以在像其他脚本如asp里也应该是一样存在的。

本站内容均为原创,转载请务必保留署名与链接!
NTFS数据流和web安全[tips]:http://www.80sec.com/ntfs-web-security.html

4 条评论

  1. 评论 by 鬼仔

    第三次了。。。发出去。。

    code

  2. 评论 by benben

    可以提供模板下载吗?

  3. 评论 by admin

    回楼上
    模板我也是找朋友要的 呵呵

  4. 评论 by FlyChina

    1 不错,很好的思路,赞一个。
    2 试没试过用.做文件名的?
    3 用WinHex可以找到NTFS流信息交回给php处理,安全等级高的情况下(比如组策略等),NTFS流应该不构成漏洞。

TrackBack URI

发表您的评论

(必填)

(必填)