微软互联网信息服务(IIS)中的短文件名(8.3文件名)漏洞是一个历史悠久但曾被广泛利用的安全问题。此漏洞允许攻击者通过特定请求推断出服务器上文件和目录的短名称,即使这些文件和目录的完整名称并未直接暴露。这种信息泄露可能为后续的攻击,如文件枚举、敏感信息发现或进一步的Web应用漏洞利用提供便利。
漏洞原理与技术细节
在Windows操作系统中,为了兼容旧的MS-DOS和16位应用程序,文件系统(如FAT和NTFS)支持两种文件命名约定:长文件名(LFN)和短文件名(SFN),也被称为8.3文件名。8.3文件名格式规定文件名前缀最多8个字符,文件扩展名最多3个字符,中间用点号分隔。当一个文件或目录的长文件名不符合8.3格式时,操作系统会自动生成一个对应的短文件名。例如,一个名为“Program Files”的目录可能会有一个短名称“PROGRA~1”。
IIS服务器在处理某些畸形HTTP请求时,可能会泄露这些短文件名。攻击者通常利用通配符(如星号“*”或问号“?”)与波浪号“~”字符的组合来探测短文件名。例如,发送一个包含`~1`的请求,IIS在某些配置下会尝试匹配对应的短文件名。如果服务器返回400 Bad Request、404 Not Found或500 Internal Server Error等特定错误代码,但其行为模式与不存在的短文件名请求不同,攻击者就可以推断出短名称的存在。
Soroush Dalili在其研究中详细描述了这种漏洞的利用方式。他指出,通过发送包含特定模式的HTTP请求,例如`GET /somefolder/*~1*/a.aspx`,攻击者可以观察服务器的响应。如果服务器返回一个特定的错误页面或状态码,表明该短名称存在,而对于不存在的短名称则返回不同的响应,那么短名称就被成功枚举。这种技术被称为“短文件名枚举”或“波浪号字符漏洞”。
攻击面与影响
短文件名漏洞的主要危害在于信息泄露。攻击者可以利用此漏洞获取以下信息:
- 文件和目录名称: 即使长文件名被隐藏,攻击者也能发现其对应的短名称。这可能暴露应用程序结构、敏感文件(如备份文件、配置文件)或未公开的Web服务路径。
- 文件扩展名: 对于具有四个字母扩展名的文件(如`.aspx`),短文件名通常会显示其前两个字母和波浪号,例如`ASPNET~1`。这有助于攻击者识别Web应用程序的技术栈。
- 暴力破解: 获取短文件名后,攻击者可以尝试暴力破解这些短名称,以发现更多文件或目录,甚至绕过某些访问控制机制。
缓解措施与现代IIS版本
微软已经意识到了这个漏洞并采取了相应的缓解措施。在较新版本的IIS和.NET Framework中,此漏洞已被修复或其利用难度大大增加。例如,IIS 7.5及更高版本以及.NET Framework 4.0及更高版本通常对这类攻击具有更好的抵抗力。
主要的缓解措施包括:
- 禁用短文件名生成: 在NTFS文件系统上,可以通过修改注册表项`NtfsDisable8dot3NameCreation`来禁用8.3文件名的自动生成。这可以防止新创建的文件和目录生成短名称。
- 更新IIS和.NET版本: 确保IIS服务器和.NET Framework保持最新版本,以获得最新的安全补丁和防护。
- 配置URL重写规则: 使用IIS的URL重写模块,可以配置规则来拒绝包含特定模式(如`~`字符和通配符)的请求,从而阻止短文件名枚举尝试。
- Web应用程序防火墙(WAF): 部署WAF可以帮助检测和阻止恶意请求,包括那些试图利用短文件名漏洞的请求。
尽管现代系统已对此漏洞进行了修复,但由于遗留系统和不当配置的存在,短文件名漏洞在某些环境中仍然可能构成威胁。安全研究人员和渗透测试人员仍然会使用专门的工具(如Soroush Dalili开发的扫描器)来检测这种潜在的风险。