现在的位置: 首页 > 综合 > 正文

NTFS数据流和web安全[tips]

2013年10月17日 ⁄ 综合 ⁄ 共 1458字 ⁄ 字号 评论关闭

导读:
  |=———————————————————————————————–=|
  |=————————–=[ NTFS数据流和web安全 ]=————————-=|
  |=———————————————————————————————–=|
  |=————————————-=[ By 80sec ]=————————————=|
  |=—————-=[ xy7@80sec.com&jianxin@80sec.com ]=—————–=|
  |=————————————————————————————————=|
  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

抱歉!评论已关闭.