目录
PUT漏洞
漏洞原理
IIS Server 在 Web 服务扩展中开启了 WebDAV之后,支持多种请求,配合写入权限,可造成任意文件写入。
WebDav(Web-based Distributed Authoring and Versioning)是一种基于HTTP 1.1协议的通信协议,它扩展了HTTP协议,在GET、POST、HEAD等几个HTTP标准方法外添加了一些新的方法。
复现
Win 2003 + IIS 6.0
修复
关闭WebDAV 和 写权限
短文件名猜解
Windows 以 8.3 格式生成与 MS-DOS 兼容的(短)文件名,以允许基于 MS-DOS 或 16 位 Windows的程序访问这些文件。在cmd下输入"dir /x"即可看到短文件名的效果。
漏洞原理
IIS的短文件名机制,可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400。
IIS短文件名产生
1.当后缀小于4时,短文件名产生需要文件(夹)名前缀字符长度大于等于9位。
2.当后缀大于等于4时,文件名前缀字符长度即使为1,也会产生短文件名。
目前IIS支持短文件名猜测的HTTP方法主要包括:DEBUG、OPTIONS、GET、POST、HEAD、TRACE六种。 IIS 8.0之后的版本只能通过OPTIONS和TRACE方法被猜测成功。
复现
IIS8.0以下版本需要开启ASP.NET支持,IIS大于等于8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功。 以下通过开启IIS6.0 ASP.NET后进行复现。
猜解格式:
http://192.168.11.148/短文件名/.aspx -> 短文件名格式:*~*
当访问构造的某个存在的短文件名,会返回404
当访问构造的某个不存在的短文件名,会返回400
短文件漏洞的局限性
1.如果文件名本身太短也是无法猜解的。
2.此漏洞只能确定前6个字符,如果后面的字符太长、包含特殊字符,很难猜解。
3.如果文件名前6位带空格,8.3格式的短文件名会补进,和真实文件名不匹配。
4.如果文件夹名前6位字符带点".",扫描程序会认为是文件而不是文件夹,最终出现误报。
5.不支持中文文件名,包括中文文件和中文文件夹。一个中文相当于两个英文字符,故超过4个中文字会产生短文件名,但是IIS不支持中文猜测。
IIS短文件名扫描工具
https://github.com/irsdl/IIS-ShortName-Scanner
修复
1.从CMD命令关闭NTFS 8.3文件格式的支持
Windows Server 2003: (1代表关闭,0代表开启)
关闭该功能:fsutil behavior set disable8dot3 1
Windows Server 2008 R2:
查询是否开启短文件名功能:fsutil 8dot3name query
关闭该功能:fsutil 8dot3name set 1
不同系统关闭命令稍有区别,该功能默认是开启的.
2.从修改注册表关闭NTFS 8.3文件格式的支持
快捷键Win+R打开命令窗口,输入regedit打开注册表窗口
找到路径: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem,将其中的 NtfsDisable8dot3NameCreation这一项的值设为 1,1代表不创建短文件名格式。
注:
以上两种方式修改完成后,均需要重启系统生效。
Note:此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失。 例:将web文件夹的内容拷贝到另一个位置,如c:\www到c:\ww,然后删除原文件夹,再重命名c:\ww到c:\www。
远程代码执行
解析漏洞
IIS 6.0
测试代码:
<%
response.write(now())
%>
基于文件名
只要文件名中包含有 .asp .asa .cer .cdx 会优先按照 asp 格式来解析。 eg:Test.asp;.jpg
原理:IIS服务器默认不解析; 号及其后面的内容,相当于截断。
基于目录名
如果目录名以 .asp .asa .cer .cdx 字符串结尾,那么这个目录下的所有文件都会按照 asp 格式去解析。 eg:Test.asp/Test.jpg
IIS 7.0/7.5
IIS7.0/7.5 是对 php 解析时有一个类似 Nginx 的解析漏洞,对任意文件名只要在 URL 后追加上字符串 /任意文件名.php 就会按照 php 的方式去解析。
该漏洞适用于 IIS7.x版本 在Fast-CGI运行模式下。
eg:http://www.test.com/Test/test.txt/xx.php
IIS PHP文件解析配置
复现
漏洞修复
配置 cgi.fix_pathinfo(php.ini中) 为 0 并重启 php-cgi 程序