我爱电脑技术论坛's Archiver

65006 发表于 2008-6-16 09:41

NTFS数据流和web安全

|=———————————————————————————————–=|?x d!PEz-U.C
|=————————–=[ NTFS数据流和web安全 ]=————————-=|+n+bH s1@!m/lSJ7A
|=———————————————————————————————–=|
"d)WrA Cz;Y |=————————————-=[ By 80sec ]=————————————=|
+?m)aJ q |=—————-=[ [email]xy7@80sec.com[/email]&[email]jianxin@80sec.com[/email] ]=—————–=|*m4P@QBx1?3c|qm
|=————————————————————————————————=|
8MU.L{e^j
`&L3b2IIq NTFS流简单介绍:
_%]6v/s l$l:k
n#Ix yA%p S NTFS因为它的稳定性 强大的功能 以及它所提供的安全性而成为一种更优越的文件系统,NTFS交换数据流(ADSs)是为了和Macintosh的HFS文件系统兼容而设计的,它使用资源派生(resource forks)来维持与文件相关的信息,比如说图标及其他的东西。创建ADSs的语法相对比较简单和直接,比如说创建和文件myfile.txt相关联的ADSs,只需简单的用冒号把文件名和ADSs名分开即可如:
AG(g~ ok\*x -{&x bnm m h#L2X2t

4~,LBk!S"C ^zgHk
D:\ads>echo This is an ADS > myfile.txt:hidden4kE9[Mf1el

r MZa9`_B 那么这种问题和脚本安全有什么关系呢?80sec的xy7提供了如下的测试代码:
-Sx|R|n #{ `1? L?C
/*-----------------------------------------------------------------------------------------------------------------
l$lm"N @,ni0V:ixEq $fp = fopen ("$_GET[a].txt", "a");)b!Gh gm$VFR&^
fwirte($fp,'80sec.com'); _:ELZ rk7M0u
?>\U$^ x5Z)\!q
——————————————————————————————————————-*/8q#W}5Us+\

*kk8O nhLA 当提供一个80sec.php?a=x.php:的时候,在windows系统下会发现在当前目录创建了一个x.php文件,但是内容为空:)但是实际上这已经扰乱了程序的逻辑,生成php文件就是不允许的事情。那么到底怎么回事呢?用记事本执行
;w~?|.^ notepad x.php:.txtA P~/B*m8Yu_4KI
就可以看到真实的文件路径。那么这个路径在其他文件操作函数是否可用呢?经过测试,像file_exists,include都可以使用这个路径,尽管这个路径在文件目录和dir命令下不可见,并且测试发现,在普通文件名里不允许的<>以及”等字符,在这个路径里是允许存在的,而这些字符就可能在文件操作时不注意而引发一些安全问题。
D)y.w$\+e R*O%jG*W
另外可以看到,这种文件可以很容易在windows系统里隐藏自己的某些代码,譬如将自己的后门代码隐藏在某个php文件里,然后可以在另外一个地方include进来执行,并且这种隐藏在脚本级别是无法查看的,必须借助相应的工具才能查看。
!Kv*Kt!T?y1Cb`"Z
'w}SQ1y:_^%A]#i5r 由于文件名的特殊性,可能可以bypass一些文件上传的安全检查,但是经过测试,我们发现并不能在apache和iis里对这种类型文件进行访问,所以即使能上传成功也许也并不能直接访问作为代码直接执行:)但是不排除一些windows下的其他http server能正确处理好这种文件名,而不发生问题,这种问题应该是windows的问题,所以在像其他脚本如asp里也应该是一样存在的。

页: [1]
   

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.