漏洞研究

关注公众号 jb51net

关闭
首页 > 实用技巧 > 漏洞研究 >

深入了解以“.”结尾的文件夹

作者:

深入了解以“.”结尾的文件夹

没见过这样的文件夹或是不知道我要说什么?看下面这张图就会知道了。

其中有六个文件夹是以 . 结尾的。你可以试着在windows模式下直接创建这样的文件夹,但是你会发现你永远无法得到以 . 结尾的文件夹。这是为什么?你可以在cmd下输入 md x..\ 来创建 x. 文件夹,而不是 x.. 文件夹,这又是为什么?我敢保证如果你能在windows模式下创建一个文件夹并且成功输入 x..\ 这些字符的话,文件夹的名字必定是 x. !不过遗憾的是windows会在你按下键盘的 \ 符号时提示“文件名不能包含下列任何字符之一:\ / : * ? " < > | ”。

在cmd下你可以输入“\ / : * ? " < > | ”任意字符而不会被终止。当你使用md命令来创建一个文件夹时,如果输入 md x..     时,将创建出 x 文件夹而不是 x. 也不是 x.. !这和在windows下直接创建这样的文件夹是一个道理:尾部的几个 . 被过滤了!到此我们就可以知道 \ 这个符号在特殊文件夹的创建起了很重要的作用。从上面的分析我们已经知道在windows模式下命名文件夹时是是无法输入 \ 这样的特殊字符的!于是在cmd下输入 md x..\ 时,以一个点 . 结尾的文件夹就创建出来了。由此可知 \ 符号防止了那些 . 被过滤掉。然而为什么还有一个点被过滤掉了呢?UMU的文章《[Windows 文件系统]U..\ 无法正常访问的真正原因》会带来些启示。下面来看些“奇怪”的现象……

根据上面的原理,我们可以在cmd下输入 md x...\     创建出以两个点 . 结尾的文件夹,接着三个点、四个点、五个点……看上图以 x 开头的5个空文件夹(注意是空文件夹),不论你删除哪个文件夹(而且你最多只能删除一个文件夹,这不是我要求你这样,不信你试试?)都将成功,并且在你刷新窗口时你会发现最终消失的文件夹居然是不以点结尾的文件夹 x ,而其他四个结尾带点的文件夹“安然无恙”!这是不是说明我们在任意一个文件夹上的任意操作最终都将反应到x文件夹上?这5个文件夹本质上也就是一个即文件夹 x ?下面的非空文件夹的现象会推翻这些疑问。

当你在文件夹 x(或x.)创建一个文本文件1.txt时,x.(或x)也将出现1.txt,然而在其他三个文件夹 x.. , x...      , x.... 中并没有发现1.txt文件,有的人可能会说:“其实你在地址栏输入C:\x..\1.txt,或C:\x...\1.txt,或C:\x....\1.txt都将成功访问1.txt文件,这说明1.txt文件其实是存在于那三个文件夹中的”但是我建议先看下面这张图(注意地址栏):

当我在地址栏输入C:\x....................................\1.txt也将成功访问1.txt文件,其实不论x后点的个数有多少(当然肯定有个上限)都将成功访问1.txt文件,且这个规律适合任何有权限访问的文件夹!并且在cmd下也是这样的情况,如下图:
这个现象我们可以理解为操作系统在这这样的情况下过滤了结尾的 . 或 \ (如果 \ 后不带文件名的话)。也许这就能说明上面讨论的那5个文件夹并不是一体的!当我们试图删除上面提到的“其他三个文件夹”(即x.. , x... , x....)时,发生了错误,如下图:
它提示“无法删除 1: 找不到指定文件。请确定指定的路径及文件名是否正确”然而删除文件夹 x 或 x. 时却可以正常删除!看来 x 与 x. 的关系更加密切……为了证实“其他三个文件夹”的“独立性”,我分别成功地在这三个文件夹里创建文本文件1.txt。要是他们是相同的或“一体”的,那肯定会报错!不过从以上的分析可知它们也并不具有完全的独立性!它们是有联系的!再看下面现象:我在cmd下输入 md x........\ 创建了以7个点结尾的文件夹,然而当我双击试图打开它时发生了如下错误:
但是在我创建以6个点结尾的文件夹后,它就可以正常访问了。不过这时由于不存在以5个点结尾的文件夹,以6个点结尾的文件夹也将不能通过双击访问了!以此类推……我用下面这张图来表示这样的“信息结构”!
我知道我这样的表示方法肯定不能说明许多问题,希望大家能给点意见。最后我还要指出很重要的一点!当带点结尾的文件夹被孤立时,即不存在上图那样的任何联系时,此文件夹表现出文件的一些性质!限于篇幅我就不进一步讨论了,有兴趣的朋友也来研究研究吧:-)。大家互相补充补充。当然要想研究深透那就必须对windows这个操作系统了如指掌了……
噢,对了,要删除以点 . 结尾的文件夹在cmd下删除,比如:输入 rd x...\ 就可以删除 x.. 文件夹!以此类推了……注意保持命令的完整!
一个没有探究价值的问题,以上所有文件夹都是独立的。
当我们创建一个..结尾的文件夹时,只显示一个.,原因是在windows识别时过滤了一个.,当我们试图访问或操作这个目录时,windows又过滤了一个.,那么这时我们实际访问的是一个没有.的目录--一个不存在的目录,所以无法访问。
但如果我们创建一个没有.的目录在同样的父目录下,那么这个访问就有效,也就是说这个..的文件夹波及了没有.的文件夹,而实际上这不是同一个文件夹。
而当这个.增加到2个以上时,目标文件夹就会带有一个或以上.,也是不可访问的了。
阅读全文