关于交换数据流(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.