一, 漏洞描述
此漏洞实际是由 HTTP 请求中旧 DOS 8.3 名称约定 (SFN) 的代字符 (~) 波浪号引起的. 它允许远程攻击者在 web 根目录下公开文件和文件夹名称(不应该可被访问). 攻击者可以找到通常无法从外部直接访问的重要文件, 并获取有关应用程序基础结构的信息.
二, 漏洞原理
IIS 的短文件名机制, 可以暴力猜解短文件名, 访问构造的某个存在的短文件名, 会返回 404, 访问构造的某个不存在的短文件名, 返回 400.
漏洞成因:
为了兼容 16 位 MS-DOS 程序, Windows 为文件名较长的文件 (和文件夹) 生成了对应的 Windows 8.3 短文件名.
在 Windows 下查看对应的短文件名, 可以使用命令 dir /x
短文件名特征:
1. 只显示前 6 位的字符, 后续字符用~ 1 代替. 其中数字 1 是可以递增. 如果存在文件名类似的文件, 则前面的 6 个字符是相同的, 后面的数字进行递增
2. 后缀名最长只有 3 位, 超过 3 位的会生成短文件名, 且后缀多余的部分会截断.
3. 所有小写字母均转换成大写的字母
4. 长文件名中包含多个 "." 的时候, 以文件最后一个 "." 作为短文件名的后缀
5. 长文件名前缀 / 文件夹名字符长度符合 0-9 和 A-Z,a-z 范围且需要大于等于 9 位才会生成短文件名, 如果包含空格或者其他部分特殊字符, 不论长度均会生成短文件.
三, 漏洞环境搭建及漏洞复现
1, 测试环境为 Windows server 2003 r2, 开启 webdav 服务和 net 服务.
2, 使用 payload 验证目标是否存在 IIS 短文件名漏洞, 下图显示的 404, 说明目标存在该短文件名
- Payload: http://192.168.10.130 /*~1*/a.aspx
- http://192.168.10.130/ttt*~1*/a.aspx
注:* 可以匹配 n 个字符, n 可以为 0
3, 浏览器访问一个不存在的短文件名, 返回 "Bad Request(400)", 说明目标不存在该短文件名
4, 通过浏览器访问上面两个 payload, 根据返回的结果, 可以说明目标存在 IIS 短文件漏洞
5, 判断漏洞存在后, 接下来手工详细分析猜解 IIS 短文件名原理
5.1, 在网站根目录 (C:\Inetpub\wwwroot) 下创建一个 abcdef123456.txt 文件
5.2, 浏览器分别访问 http://192.168.10.130/a*~1*/a.aspx, http://192.168.10.130/b*~1*/a.aspx
5.3, 通过以上两个图片, 可以看出存在一个以 a 开头的短文件名
5.4, 按照上面的方法依次猜解可以得到 http://192.168.10.130/abcdef*~1*/a.aspx, 到此, 已经猜解出来短文件名, 到了这一步, 需要考虑两种情况, 以 abcdef 开头的是一个文件夹还是一个文件.
如果以 abcdef 开头的是一个文件夹, 那么浏览器访问 http://192.168.10.130/abcdef*~1/a.aspx, 将返回 404, 如果 abcdef 开头的是一个文件, 需要猜解后缀名
5.5, 浏览器访问 http://192.168.10.130/abcdef*~1/a.aspx, 根据下图返回结果说明以 abcdef 开头的不是一个文件夹, 而是一个文件
5.6, 浏览器访问 http://192.168.10.130/abcdef*~1.a*/a.aspx, 根据下图返回说明该短文件后缀的第一位不是 a
5.7, 用 a-z 的 26 个字母依次替换上述 a 的位置, 当替换成 t 时, 返回 404 页面, 说明该短文件的第一位后缀是 t
5.8, 按照上面的方法依次猜解得到该短文件名的后缀是 txt
5.9, 到此为止, 已经猜解出该短文件名为 abcdef~1.txt
6, 根据已经猜解出来的短文件名 abcdef~1.txt, 继续猜解出该短文件名的完全文件名为 abcdef123456.txt
7, 使用 IIS 短文件名扫描软件, 获取目标存在哪些短文件名
四, 漏洞防御
1, 升级. net framework
2, 修改注册表键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
修改 NtfsDisable8dot3NameCreation 为 1. 修改完成后, 需要重启系统生效.
注: 此方法只能禁止 NTFS8.3 格式文件名创建, 已经存在的文件的短文件名无法移除, 需要重新复制才会消失. 如果不重新复制, 已经存在的短文件名则是不会消失的
2.1 重启系统之后, 在网站根目录 (C:\Inetpub\wwwroot) 下创建 hhhhhhhhhhhhhhhhhhhh.txt, 然后查看是否会生成短文件名. 下图可以看到, 没有生成短文件名, 说明防御生效.
2.2, 将 wwwroot 目录下文件复制到另一个 back 文件下, 然后删除原 wwwroot 目录下所有内容, 再把 back 下的内容重新复制到 wwwroot 目录下, 这时重新查看, 则不存在短文件名了
五, 总结
该漏洞的意义:
1, 猜解后台地址
2, 猜解敏感文件, 例如备份的 rar,zip,.bak,.sql 文件等.
3, 在某些情形下, 甚至可以通过短文件名 Web 直接下载对应的文件.
该漏洞的局限性:
1, 只能猜解前六位, 以及扩展名的前三位.
2, 名称较短的文件是没有相应的短文件名的.
3, 不支持中文文件名
4, 如果文件名前 6 位带空格, 8.3 格式的短文件名会补进, 和真实文件名不匹配
5, 需要 IIS 和. net 两个条件都满足.
来源: https://www.cnblogs.com/yuzly/p/11221685.html