NTFS数据流和web安全

|=———————————————————————————————–=|
|=————————–=[ NTFS数据流和web安全 ]=————————-=|
|=———————————————————————————————–=|
|=————————————-=[ By 80sec ]=————————————=|
|=—————-=[ [email protected]&[email protected] ]=—————–=|
|=————————————————————————————————=|

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提供了如下的测试代码:

/*-----------------------------------------------------------------------------------------------------------------
$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

相关日志

楼被抢了 3 层了... 抢座Rss 2.0或者 Trackback

  • 司徒千羽

    80sec最近不错啊,看来是在打知名度呢。期待他们能够继续下去。

  • kj

    怎麽回事??
    给了everyone写权限。。。。

    Warning: fopen(x.php.txt) [function.fopen]: failed to open stream: No error in J:\Apache\htdocs\aa.php on line 2

    Fatal error: Call to undefined function fwirte() in J:\Apache\htdocs\aa.php on line 3

  • kj

    .txt
    x.php.txt
    都有

    就是没有x.php生成。。
    谢谢您,再试试。。

发表评论