关于交换数据流(alternate data streams)的概念请参看bigworm翻译的文章《NTFS不利的一面》,本文只是讲一下在IIS上访问ADS的情况。
先请大家看一个很古老的漏洞:Microsoft IIS 3.0/4.0 ::$DATA请求泄露ASP源代码漏洞。大概这是能找到的ADS与IIS的最早的报告了。
$DATA是在NTFS文件系统中存储数据流的属性之一,即文件的主数据流(NTFS文件系统允许一个文件有多个流,但是至少有一个未命名流即主流),当我们访问a.asp::$DATA时就是请求的a.asp本身的数据,如果a.asp还包含了其他数据流,比如a.asp:lake2.asp,请求a.asp:lake2.asp:$DATA即是a.asp中的流数据lake2.asp的流数据内容。微软的补丁似乎解决了IIS泄漏主流数据的内容问题,但是如果我请求的是附加流数据呢?呵呵,问题变得有趣了!
IIS3和IIS4的时代已经过去,关于这个问题的测试,IIS版本是5.1,系统为Windows XP SP1。
我在web目录创建一个文本文件a.txt,又将文件cmd.asp(一个执行cmd.exe的webshell)以流的形式附加到a.txt中,现在虽然只能看到a.txt,但实际上还有一个a.txt:cmd.asp(呵呵,不能用眼睛看事物,要用心^_^)。好了,让我们在IIS里看看访问a.txt:cmd.asp及a.txt:cmd.asp:$DATA的结果吧。
【图1】执行asp文件!(注意url)
【图2】泄漏asp源代码
我们在IIS里不仅可以访问非主流文件内容,还可以执行流形式的脚本文件!呵呵,是不是想到利用这个可以做一个隐藏的webshell。嗯,我当时也相当激动,不过很快就从头寒到脚咯,因为这个只是XP下的结果——没有人拿XP做服务器吧……
在2000和2003上情况就不那么有趣了,他们都不会执行流脚本(显示找不到该页)。但是2000 SERVER版本可以访问到不用IIS解释的流(例如jpg文件;呵呵,可以拿来做一个隐藏的静态主页哦);2000 Advance SERVER 会出现“Not enough storage is available to process this command”的错误;2003以前试过,但结果忘记了。另外,stm等几种文件也是由服务端解释执行的,可以试试,嘿嘿,说不定有happy的事情发生哦。
嗯,该说的差不多了,最后来感谢一下bigworm,要是没有他的翻译只怕现在我都还不知道ADS为何物。From Internet , For Interner !
2005-1-26