IIS短文件漏洞

介绍

简介:Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位
Windows的程序访问这些文件。在cmd下输入”dir /x”即可看到短文件名的效果。
0

原理

当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。

当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。

目前IIS支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六

IIS 8.0之后的版本只能通过OPTIONS和TRACE方法被猜测成功

复现

提醒一下 IIS8.0以下版本需要开启ASP.NET支持,IIS>=8.0版本,即使没有安装ASP.NET,通过
OPTIONS和TRACE方法也可以猜解成功。以下通过开启IIS6.0 ASP.NET后进行复现
1

短文件名特征:
1.只显示前6位的字符,后续字符用~1代替。其中数字1是可以递增。如果存在文件名类似的文件,则前面的
6个字符是相同的,后面的数字进行递增
2

2.后缀名最长只有3位,超过3位的会生成短文件名,且后缀多余的部分会截断。
3

3.所有小写字母均转换成大写的字母

4.长文件名中包含多个”.”的时候,以文件最后一个”.”作为短文件名的后缀
4

5.长文件名前缀/文件夹名字符长度符合0-9和A-Z、a-z范围且需要大于等于9位才会生成短文件名,如果包
含空格或者其他部分特殊字符,不论长度均会生成短文件。
5
.

.

使用payload验证目标是否存在IIS短文件名漏洞,下图显示的404,说明目标存在该短文件名
注:* 可以匹配n个字符, n可以为0

http://upload.moonteam.com/*~1*/a.aspx

通过浏览器访问一个存在的短文件名,会返回404状态码, 404说明该文件存在
6
通过浏览器访问一个不存在的短文件名,会返回400状态码, 400说明该文件不存在
7

通过浏览器访问上面两个payload,根据返回的结果,可以说明目标存在IIS短文件漏洞

判断漏洞存在后,接下来手工详细分析猜解IIS短文件名

在网站目录下新建一个 abcde1231111.txt文件,分别访问

http://upload.moonteam.com/a*~1*/a.aspx

http://upload.moonteam.com/b*~1*/a.aspx

8
9
通过两次的提交确认了a是404 b是400 所以存在a文件开头的短文件。

通过上面的方法接着往后猜

http://upload.moonteam.com/abcde*~1*/a.aspx

到这文件名已经出来了,接着就是判断是目录还是文件。

10
.

.

.

http://upload.moonteam.com/abcde*~1/a.aspx

````
.

.




![11](https://pic.888888.al/i/2023/08/15/z7phjg.png)
判断是文件 按照a-z进行测试 404表示存在 400表示不存在 第一个字符不是a开头的文件



```asp
http://upload.moonteam.com/abcde*~1.a*/a.aspx

12
.

.

.

第一个是字符是t开头的,接着往后测试

http://upload.moonteam.com/abcde*~1.t*/a.aspx

13
.

.

.

http://upload.moonteam.com/abcde*~1.txt*/a.aspx

14

按照上面的方法依次猜解得到该短文件名的后缀是txt 短文件名为 abcde~1.txt 可以接着猜解
abcde1231111.txt文件名

.

使用IIS短文件名扫描软件,获取目标存在哪些短文件名

python iis_shortname_Scan.py http://upload.moonteam.com/

15

防御

1、升级.net framework

2、修改注册表键值:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
修改NtfsDisable8dot3NameCreation为1。修改完成后,需要重启系统生效。

命令行关闭 fsutil behavior set disable8dot3 1

新建文件 aaaaaaaaaaaaaazzzzz.txt 已经没有短文件名了。
16
**注:**此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消
失。如果不重新复制,已经存在的短文件名则是不会消失的。

将web文件夹的内容拷贝到另一个位置,如c:\www到c:\ww,然后删除原文件夹,再重命名c:\ww到
c:\www。