漏洞的成因与分析:

1)利用“~”字符猜解暴露短文件/文件夹名。

2).Net Framework的拒绝服务攻击。

现在看大部分的分析讨论都是第一个的。第二个比较少。这里简单复述一下其他研究人员的分析。

1)利用“~”字符猜解暴露短文件/文件夹名

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

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

aegis_inst.exe对应的短文件名为aegis_~1.exe。根据此特性,我们能够通过访问短文件名间接访问它对应的文件。

由于短文件名的长度固定(xxxxxx~xxxx),因此黑客可直接对短文件名进行暴力破解 ,从而访问对应的文件。

举个例子,有一个数据库备份文件 backup_www.abc.com_20150101.sql ,它对应的短文件名是backup~1.sql 。因此黑客只要暴力破解出backup~1.sql即可下载该文件,

而无需破解完整的文件名。

其实, 也就只能确定前6个字符,如果后面的字符太长、包含特殊字符,那么就很难猜解。另外如果文件本身太短也是无法猜解的。Soroush Dalilide研究是通过对目标网站或同类型网站

爬虫,爬出建立一个字典库,再与得到的短文件名来猜剩下的字符。第二是可以利用fuzzdb(一个应用程序模糊测试(fuzzing)数据库)来猜解。第三个是结合OWASP的 dirbuster(一款路径

及网页暴力破解的工具)。

另外,Soroush Dalilide研究中还提到可以绕过Basic and Windows认证,猜解认证目录下的文件。以下是II5.0绕过认证的方法:详细可见原文研究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都能够绕过认证。应该是在可绕过的前提下猜解,形式如下:

/AuthNeeded::$Index_Allocation/*~1*/.aspx

或者

/AuthNeeded:$I30:$Index_Allocation/*~1*/.aspx

2).Net Framework的拒绝服务攻击

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

漏洞利用代码:

http://www.exploit-id.com/dospoc/net-framework-tilde-character-dos

在wooyun网站上也有相关的讨论。

http://zone.wooyun.org/content/487

其中完美世界那个漏洞就是用的这种手法。

http://www.wooyun.org/bugs/wooyun-2010-09202

关于windows文件名背景知识:
Windows 支持的长文件名最多为 255 个字符。Windows 还以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows 的程序访问这些文件。

Windows 按以下方式从长文件名生成短文件名:

Windows 删除文件名中的任何无效字符和空格。无效字符包括:. ” / \ [ ] : ; = ,

由于短文件名只能包含一个英文句点 (.),因此,Windows 将删除文件名中的其他英文句点,即使文件名中最后一个英文句点后面是有效的非空格字符,也是如此。

例如,

Windows 从长文件名 This is a really long filename.123.456.789.txt    生成短文件名: Thisis~1.txt

否则,

Windows 将忽略最后一个英文句点,而使用倒数第二个英文句点。例如,Windows 从长文件名

This is a really long filename.123.456.789.       生成短文件名:  Thisis~1.789

生成短文件名如果需要的话,Windows 将文件名截断为 6 个字符,并在后边附加一个波形符 (~) 和一个数字。例如,创建的每个以”~1″结尾的唯一文件名。复制文件名以”~2″、”~3″等结尾。

生成短文件名Windows 将文件扩展名截断为 3 个字符或更短。

生成短文件名Windows 将文件名及扩展名中的所有字符转为大写。

例如:假设 http://www.f4ck.net/iloveyou.txt 这个文件是存在的

暴力猜解:

1.访问 http://www.f4ck.net/*~1*/.aspx

404   存在短文件名~的文件/文件夹

400   不存在短文件名~的文件/文件夹

2.访问 http://www.f4ck.net/a*~1*/.aspx

404   存在a开头的短文件名~的文件/文件夹

400   不存在a开头的短文件名~的文件/文件夹

以此类推,直到猜解到第六位为止,猜出来应该为ilovey~1

猜解后缀名,即可猜解出ilovey~1.txt

这样的话在 IIS 环境下,可以继续总结规则+字典爆破猜解出文件全名

若在apache环境下,可以直接访问 http://www.f4ck.net/ilovey~1.txt

 

漏洞的利用:

漏洞的利用,需要使用到通配符。在windows中,可以匹配n个字符,n可以为0. 判断某站点是否存在IIS短文件名暴力破解,构造payload,分别访问如下两个URL:

1. http://www.target.com/*~1****/a.aspx
2. http://www.target.com/l1j1e*~1****/a.aspx

这里我使用了4个星号,主要是为了程序自动化猜解,逐个猜解后缀名中的3个字符,实际上,一个星号与4个星号没有任何区别(上面已经提到,*号可以匹配空)。

如果访问第一个URL,返回404,
而访问第二个URL,返回400,
则目标站点存在漏洞。

判断漏洞存在后,继续猜解目录下是否存在一个a开头的文件或文件夹,访问:

http://www.target.com/a*~1****/a.aspx

如果存在,将返回404。 如此反复,不断向下猜解完所有的6个字符。
猜解完之后,得到的序列应该类似:

http://www.target.com/abcdef*~1****/a.aspx

到了这一步,需要考虑两种情况,如果以abcdef开头的是一个文件夹,则

http://www.target.com/abcdef*~1/a.aspx

将返回404.
如果abcdef开头的是一个文件,则自动提交

http://www.target.com/abcdef*~1*g**/a.aspx

用a-z的26个字母替换上述g的位置,应该能得到多个404页面。(记住一点,404代表的是存在。)如果下面的地址返回404,

http://www.target.com/abcde*~1*g**/a.aspx

则代表扩展名中肯定存在g。
按照上面的思路,继续猜解g后面的字符,直到后缀名中的3个字符都猜解完,就可以了。

以上介绍了怎么手工猜解,这个漏洞的意义何在:

1. 猜解后台地址
2. 猜解敏感文件,例如备份的rar、zip、.bak、.SQL文件等。
3. 在某些情形下,甚至可以通过短文件名web直接下载对应的文件。比如下载备份SQL文件。

该短文件名有以下特征:

1. 只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同)。

2. 后缀名最长只有3位,多余的被截断。

我们可以在启用.net的IIS下暴力列举短文件名,原因是:

3. 访问构造的某个存在的短文件名,会返回404

4. 访问构造的某个不存在的短文件名,会返回400

漏洞的局限性:

这个漏洞的局限有几点:

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

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

3)需要IIS和.net两个条件都满足

IIS短文件名泄漏漏洞危害:

Microsoft IIS在实现上存在文件枚举漏洞,***者可利用此漏洞枚举网络服务器根目录中的文件。
危害:***者可以利用“~”字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务***。

修复建议:

1)通用有效方法:

禁用windows系统中的短文件名功能。

打开注册表,并打开此目录:HKLM\SYSTEM\CurrentControlSet\Control\FileSystem

      修改目录下 NtfsDisable8dot3NameCreation的值为1

或者直接使用cmd命令:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem" /v NtfsDisable8dot3NameCreation /d  /t REG_DWORD /f

修改完成后,重新启动系统生效,不过此修改只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除

2)简单有效方法:CMD命令:

Windows Server 2008 R2

查询是否开启短文件名功能:fsutil 8dot3name query

关闭该功能 :fsutil 8dot3name set 1

Windows Server 2003

关闭该功能 :fsutil behavior set disable8dot3 1

3)手动验证:

新建文件夹并创建几个文件,打开CMD进入该文件夹呢执行dir /x 检测,看不到有显示短文件名则成功。

4)  其他方法:

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

关闭NTFS 8.3文件格式的支持。该功能默认是开启的,对于大多数用户来说无需开启。

如果是虚拟主机空间用户,可采用以下修复方案:

如果你的web环境不需要asp.net的支持你可以进入Internet 信息服务(IIS)管理器 --- Web 服务扩展 - ASP.NET 选择禁止此功能。

升级net framework 至4.0以上版本。将web文件夹的内容拷贝到另一个位置,比如 D:\www 到 D:\www.back,然后删除原文件夹D:\www,再重命名D:\www.back到D:\www。如果不重新复制,已经存在的短文件名则是不会消失的。 攻击者可以利用“~”字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击。

注: 1.windows Server 2003修改后需要重新启动服务器才能生效!

2.已存在的文件短文件名不会取消,只对以后创建的文件有效

参考链接:

http://www.freebuf.com/articles/4908.html

https://blog.csdn.net/baidu_38795342/article/details/79483865

https://segmentfault.com/a/1190000006225568

7. IIS短文件/文件夹漏洞(汇总整理)的更多相关文章

  1. IIS短文件漏洞修复

    近期网站系统被扫描出漏洞:IIS短文件/文件夹漏洞 漏洞级别:中危漏洞 漏洞地址:全网站 漏洞描述:IIS短文件名泄露漏洞,IIS上实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举获取服务器根目录中的文 ...

  2. IIS短文件漏洞(搬运整理)

    0x01. IIS短文件漏洞的由来 Microsoft IIS 短文件/文件夹名称信息泄漏最开始由Vulnerability Research Team(漏洞研究团队)的Soroush Dalili在 ...

  3. IIS短文件猜解

    1.IIS短文件漏洞 Microsoft IIS 短文件/文件夹名称信息泄漏最开始由Vulnerability Research Team(漏洞研究团队)的Soroush Dalili在2010年8月 ...

  4. C#文件夹权限操作整理

    using System.Security.AccessControl; using System.IO; using System.Security.Principal; 取得目录的访问控制和审核安 ...

  5. Android-----------国际化多国语言文件夹命名汇总

    *如果不区分地区,则不加后面的-rxx内容 Arabic, Egypt (ar_rEG) —————————–阿拉伯语,埃及      Arabic, Israel (ar_rIL) ———————— ...

  6. struts2远程代码执行漏洞汇总整理

    一.S2-001 1.漏洞原理 在默认配置下,如果用户所提交的表单出现验证错误,后端会对用户的输入进行解析处理,然后返回并显示处理结果. 举个例子,当你提交的登录表单为username=xishir& ...

  7. 【Mac系统 + Git】之上传项目代码到github上以及删除某个文件夹

    之前做开发的时候,用过一段时间git代码管理工具,用命令行操作感觉十分高大上,今天我想从头总结一篇Mac系统下如何利用git上传代码到github上的学习. 目录 一.安装Git 二.创建.ssh文件 ...

  8. Java 递归算法,遍历文件夹下的所有文件。

    用递归算法遍历文件下的所有子文件夹和子文件 文件夹遍历方法 public void getFileList(String strPath){ File f=new File(strPath); try ...

  9. 走进Linux01-磁盘分区与文件夹结构

    近期学习Linux,首先安装系统,遇到了磁盘分区.之前仅仅知道Linux分区是从/(根文件夹)開始的,至于磁盘格式,多块盘怎样挂载全然不了解,系统的查询了一下Linux磁盘分区和文件夹结构,整理一下. ...

随机推荐

  1. Vim 命令记录与回放

    步骤如下: q+(a..z)寄存器名: 执行你要执行的操作: q 结束操作: 调用为@+寄存器: 列子如下: 在写PHP 程序时用的比较多的是创建函数: 如 function add_in(){ } ...

  2. poj 1328 Radar Installatio【贪心】

    题目地址:http://poj.org/problem?id=1328 Sample Input 3 2 1 2 -3 1 2 1 1 2 0 2 0 0 Sample Output Case 1: ...

  3. HDU2544最短路模板,

    #include<iostream> #include<stdio.h> #include<stdlib.h> #include<algorithm> ...

  4. linux 软件包的命名规则

     linux软件包的命名规则 eg:主包       bind-9.7.1-1.el7.i586.rpm 子包 bind-libs-9.7.1-1.el7.i586.rpm bind-utils-9. ...

  5. Raft 为什么是更易理解的分布式一致性算法——(1)Leader在时,由Leader向Follower同步日志 (2)Leader挂掉了,选一个新Leader,Leader选举算法。

    转自:http://www.cnblogs.com/mindwind/p/5231986.html Raft 协议的易理解性描述 虽然 Raft 的论文比 Paxos 简单版论文还容易读了,但论文依然 ...

  6. Linux-tcpdump command

    简介 用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具. tcpdump可以将网络中传送的数据包的 ...

  7. MFC实现普通DLL

    库有两种:动态链接库和静态链接库. 一,使用动态链接库: 通过项目——属性——配置属性——常规——项目默认值——配置类型下,选择动态库(.dll)选项 这样会生成.lib和.dll两种文件. 只是该. ...

  8. 【leetcode刷题笔记】Validate Binary Search Tree

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  9. CH6802 車的放置 和 CH6B24 Place the Robots

    6802 車的放置 0x60「图论」例题 描述 给定一个N行M列的棋盘,已知某些格子禁止放置.问棋盘上最多能放多少个不能互相攻击的車.車放在格子里,攻击范围与中国象棋的"車"一致. ...

  10. bzoj 2969: 矩形粉刷 概率期望

    题目: 为了庆祝新的一年到来,小M决定要粉刷一个大木板.大木板实际上是一个W*H的方阵.小M得到了一个神奇的工具,这个工具只需要指定方阵中两个格子,就可以把这两格子为对角的,平行于木板边界的一个子矩形 ...