IIS短文件名泄露漏洞复现

  • 前言
  • 一、漏洞描述
  • 二、漏洞原理
    • 1.什么是短文件
    • 2.短文件特征
  • 三、漏洞验证
  • 三、漏洞防御
  • 总结

前言

IIS短文件名泄露漏洞比较老了,而且只适合于windows+iis+asp的网络结构,所有如下的复现步骤看下就行了,关键是要弄懂原理


一、漏洞描述

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

二、漏洞原理

1.什么是短文件

为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3短文件名。在Windows下查看对应的短文件名,可以使用命令dir /x,具体如下:

2.短文件特征

  1. 只显示前6位的字符,后续字符用~1代替。其中数字1是可以递增。如果存在文件名类似的文件,则前面的6个字符是相同的,后面的数字进行递增
  2. 后缀名最长只有3位,超过3位的会生成短文件名,且后缀多余的部分会截断。
  3. 所有小写字母均转换成大写的字母
  4. 长文件名中包含多个”.”的时候,以文件最后一个”.”作为短文件名的后缀
  5. 长文件名前缀/文件夹名字符长度符合0-9和A-Z、a-z范围且需要大于等于9位才会生成短文件名,如果包含空格或者其他部分特殊字符,不论长度均会生成短文件。

三、漏洞验证

漏洞验证的原理就是,访问存在的短文件返回404,访问不存在的短文件返回400

import requestsheaders = {"User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) ""Chrome/116.0.0.0 Mobile Safari/537.36 Edg/116.0.1938.69 "}urls = []with open('iis.txt', 'r') as fp:contens = fp.readlines()for item in contens:response1 = requests.get(f"{item}*~1****/a.aspx")response2 = requests.get(f"{item}l1j1e*~1****/a.aspx")print(response1)if response1.status_code == 404 and response2.status_code == 400:print(item)

其中iis.txt中放url

三、漏洞防御

  1. 升级.net framework
  2. 修改注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
    修改NtfsDisable8dot3NameCreation为1。修改完成后,需要重启系统生效
  3. 重启系统之后,在网站根目录(C:\Inetpub\wwwroot)下创建hhhhhhhhhhhhhhhhhhhh.txt,然后查看是否会生成短文件名。下图可以看到,没有生成短文件名,说明防御生效。

总结

该漏洞的意义:

1、 猜解后台地址

2、 猜解敏感文件,例如备份的rar、zip、.bak、.sql文件等。

3、 在某些情形下,甚至可以通过短文件名web直接下载对应的文件。

该漏洞的局限性:

1、 只能猜解前六位,以及扩展名的前三位。

2、 名称较短的文件是没有相应的短文件名的。

3、 不支持中文文件名

4、 如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配

5、 需要IIS和.net两个条件都满足。