# 如何彻底修复IIS短文件漏洞？

- Link: https://www.xuepaijie.com/html/skill/devops/757.html
- Published: 2016-12-02T21:21:22+08:00
- Author: Admin

Windows 还以 8.3 格式生成与 MS-DOS 兼容的（短）文件名，以允许基于 MS-DOS 或 16 位
Windows的程序访问这些文件。在cmd下输入“dir /x”即可看到短文件名的效果。

通配符”*” 和 “?”发送一个请求到iis，当IIS接收到一个文件路径中包含”~”的请求时，它的
反应是不同的。基于这个特点，可以根据http的响应区分一个可用或者不可用的文件。

如下图所示不同IIS版本返回信息的不同：

![IIS短文件](https://www.xuepaijie.com/wp-content/uploads/2019/01/a519390c7446a4d5b317e9e64d5178a4.
png)

其实， 也就只能确定前6个字符，如果后面的字符太长、包含特殊字符，那么就很难猜解。
另外如果文件本身太短也是无法猜解的。

**补充一点额外的资料：**

acunetix研究指出当Apache运行在windows下，如果创建了一个长文件，那么无需猜解长文件，
直接用短文件就可以下载了。例如一个backup-08211f66c.sql的长文件，其短文件是BACKUP
~1.SQL，攻击者只需要提交BACKUP~1.SQL就可以直接访问该文件。原文http://www.acunetix.
com/blog/web-security-zone/articles/windows-short-8-3-filenames-web-security-problem/。

另外可以绕过Basic and Windows认证，猜解认证目录下的文件。以下是II5.0绕过认证的方法：

    ```html;
    # 详细可见原文研究http://soroush.secproject.com/blog/2010/07/iis5-1-directory-authentication-bypass-by-using-i30index_allocation/ 

    “/AuthNeeded:$i30:$INDEX_ALLOCATION/secretfile.asp”
    Instead of:
    “/AuthNeeded/secretfile.asp”
    ```

但是并不是所有版本的IIS都能够绕过认证。应该是在可绕过的前提下猜解，形式如下：

    ```html;
    /AuthNeeded::$Index_Allocation/*~1*/.aspx 
    或者
    /AuthNeeded:$I30:$Index_Allocation/*~1*/.aspx
    ```

2).Net Framework的拒绝服务攻击
Soroush Dalilide研究发现，当请求文件夹名称包含~1的
请求，会导致不存在该文件的.Net framework去递归所有根目录。特别是第一次请求时，会
造成的文件读取特别多。

**修复建议：**

禁止url中使用“~”或它的Unicode编码。

关闭windows的8.3格式功能。

附：网上有建议将.net Farrmework升级至4.0能修复此漏洞，但系统框架已为4.0版本，经扫描
漏洞依然存在。那怎么办？试试下面的。

    ```html;
    1、修改注册表项：（重启服务器生效）

    HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation

    值为1。

    2、执行DOS命令， fsutil behavior set disable8dot3 1

    3、删除现有的IIS目录重新部署，完成此步骤才能完全修复。
    ```
