1)利用“~”字符猜解暴露短文件/文件夹名。
2).Net Framework的拒绝服务攻击。
现在看大部分的分析讨论都是第一个的。第二个比较少。
这里简单复述一下其他研究人员的分析。
1)利用“~”字符猜解暴露短文件/文件夹名
Windows 还以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。在cmd下输入“dir /x”即可看到短文件名的效果。
Soroush Dalili的说法是,通配符”*” 和 “?”发送一个请求到iis,当IIS接收到一个文件路径中包含”~”的请求时,它的反应是不同的.基于这个特点,可以根据http的响应区分一个可用或者不可用的文件。如下图所示不同IIS版本返回信息的不同。
1
下图为Soroush Dalili通过短文件名猜解长文件名的过程。
其实, 也就只能确定前6个字符,如果后面的字符太长、包含特殊字符,那么就很难猜解。另外如果文件本身太短也是无法猜解的。Soroush Dalilide研究是通过对目标网站或同类型网站爬虫,爬出建立一个字典库,再与得到的短文件名来猜剩下的字符。第二是可以利用fuzzdb(一个应用程序模糊测试(fuzzing)数据库)来猜解。第三个是结合OWASP的dirbuster(一款路径及网页暴力破解的工具)。
最后Soroush Dalilide给出了运用他研究的方法猜解的测试PoC代码:http://code.google.com/p/iis-shortname-scanner-poc/
##以下部分为其他报道较少提及的。
还是这个短文件/文件夹名暴露漏洞,acunetix研究指出当Apache运行在windows下,如果创建了一个长文件,那么无需猜解长文件,直接用短文件就可以下载了。例如一个backup-082119f75623eb7abd7bf357698ff66c.sql的长文件,其短文件是BACKUP~1.SQL,攻击者只需要提交BACKUP~1.SQL就可以直接访问该文件。原文http://www.acunetix.com/blog/web-security-zone/articles/windows-short-8-3-filenames-web-security-problem/
另外,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
修复建议:
禁止url中使用“~”或它的Unicode编码。
关闭windows的8.3格式功能。
背景知识:
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 将文件名及扩展名中的所有字符转为大写。
有话要说