windows文件命名特性利用
0x00
windows不能以以下这些名字命名文件或文件夹: aux、com1、com2、prn、con、nul,因为这些名称都属于设备名称,等价于DOS设备,但我们可以通过cmd来创建这样的文件
>md com2
>md \.d:com1\
>copy test.txt \.d:com1.txt
#注意文件夹名例如aux.txt也是不行的,如果通过cmd命令创建了这样的文件夹,它同样具备dos设备属性,另外
正常在GUI界面是不能删除上面创建的文件,可以通过如下的命令删除
rmdir /s \.d:com1.txt
/s表示删除目录树,即包括子文件夹和文件
del \.D:aux.txt
rmdir .aux
#这个我是直接在aux文件夹的父目录上操作的命令
rmdir F:com1
#可以加\. 也可以不加,两者区别我不清楚在哪,这个被称为UNC 路径格式,就是网上邻居的路径格式,比如d:/temp的UNC 路径为//./d:/temp
0x01
接下来这个说是windows命名漏洞,但没找到详细的说明
简单来说就是文件夹名字后面有个.
直接通过GUI操作是不能建立这样的文件夹的,windows会默认去掉后面的.
可以通过如下方式创建
>md test..
#这里是两个. 显示上也会是直接的test..,我并不明白这是怎么回事,可能是win10改了特性吧,而且它并不会不能打开
根据测试,创建的test..这个文件夹不可直接删除,如果将别的文件移入此文件夹中,系统将会自动生成test文件夹(空),并且test..文件夹里的东西不可见了,这时若删除test文件夹,tset..文件夹中内容便可见了,没有删除时,test文件夹里有什么,test..文件夹里同样会显示,但打不开,会提示不存在。
还一个有趣的发现是test文件夹的属性中占用空间大小是多少test..文件夹的也会是多少
同时如果手动创建一个test文件夹,效用和上面是一样的,这样的话如果本身就存在一个文件夹,而我们创建一个同样名字加..的文件夹,那么也会实现上面的特性
不过其也可以通过cmd删除:删除命令>rmdir /s test..
0x02
名字为空的文件夹
>md " est "
#注意 之间有一个空格,这个命令会在当前目录的根目录下创建一个test文件夹,并且里面含有一个空白文件夹,这个test文件夹也是不可直接删除
删除命令rd "D: est "
#这会删除test目录下的空白文件夹,如果空白文件夹里已经有了文件需要加/s参数,另外test文件夹里的其它所有内容也会在空白文件夹中显示。
0x03
更改文件名,在文件名后加上.{CLSID},可是我在我的win10上面试了并没有用,可能也更新修复了吧
0x04
对于. 或者空格 结尾的文件,windows会自动去除.和空格,两者相互结合也是一样
test.txt.... -> test.txt
test.txt -> test.txt #这里前面的后缀后面有一个空格
test.txt.. -> test.txt
本来应该还有其它的特殊命名,但windows命名规则改了不允许出现:符号,所以其它的也就没有用了,这些可以用来躲避上传黑名单限制
我自己测试时和网上很多其它文章描述并不一样,windows改了挺多特性,具体详细情况需要各位自己亲自试验,利用得当的话 这些对于用来上传webshell是挺好的