漏洞原因

由HTTP请求中旧DOS8.3名称约定(SFN)的代字符(~)波浪号引起的。它允许远程攻击者在Web根目录下公开文件和文件夹名称(不应该可被访问)。攻击者可以找到通常无法从外部直接访问的重要文件,并获取有关应用程序基础结构的信息。

漏洞危害

利用“~”字符猜解暴露短文件/文件夹名 (主要危害)

Net Framework的拒绝服务攻击 (副危害)

受影响的版本:

IIS 1.0,Windows NT 3.51 IIS 3.0,Windows NT 4.0 Service Pack 2 IIS 4.0,Windows NT 4.0选项包 IIS 5.0,Windows 2000 IIS 5.1,Windows XP Professional和Windows XP Media Center Edition IIS 6.0,Windows Server 2003和Windows XP Professional x64 Edition IIS 7.0,Windows Server 2008和Windows Vista IIS 7.5,Windows 7(远程启用或没有web.config) IIS 7.5,Windows 2008(经典管道模式) IIS 8.0,Windows 8, Windows Server 2012 IIS 8.5,Windows 8.1,Windows Server 2012 R2 IIS 10.0,Windows 10, Windows Server 2016 注意:IIS使用.Net Framework 4时不受影响

IIS短文件名特征

1.只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同); 2.后缀名最长只有3位,多余的被截断,超过3位的长文件会生成短文件名; 3.所有小写字母均转换成大写字母; 4.长文件名中含有多个“.”,以文件名最后一个“.”作为短文件名后缀; 5.长文件名前缀/文件夹名字符长度符合0-9和Aa-Zz范围且需要大于等于9位才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件

本地验证,使用命令 dir /x,

远程验证

我们可以在启用.net的IIS下使用GET、OPTIONS、TRACE方法暴力列举短文件名,原因是攻击者使用通配符“*”和“?”发送一个请求到IIS,当IIS接收到一个文件路径中包含“~”请求时,它的反应是不同的,即返回的HTTP状态码和错误信息不同。基于这个特点,可以根据HTTP的响应区分一个可用或者不可用的文件。如下图所示不同IIS版本返回信息的不同:

例如:

GET方法            存在返回404;不存在返回400

OPTIONS方法 存在返回404,不存在返回200

TRACE方法      存在返回404,不存在返回501

OPTIONS方法

局限性

1) 此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解; 2) 如果文件名本身太短(无短文件名)也是无法猜解的; 3) 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配; 4) 如果文件夹名前6位字符带点“.”,扫描程序会认为是文件而不是文件夹,最终出现误报; 5) 不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测。

修复方案

1) CMD关闭NTFS 8.3文件格式的支持 其一:fsutil 8dot3name set 1 其二:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation的值设为1 2)重启电脑,把存在段文件的目录复制到新目录, 3) 关闭Web服务扩展- ASP.NET 4) 升级netFramework至4.0以上版本