IIS常见漏洞与利用方式总结
IIS是微软开发的Windows Web服务器软件,处理HTTP/HTTPS请求并调用后端资源以实现网站发布与访问。它支持多种网络服务,在企业内部系统和中小型商业网站中广泛应用。然而,其安全漏洞可能导致服务器远程控制和敏感数据泄露等严重风险。常见的安全问题包括文件名解析漏洞、目录解析漏洞、PUT文件上传漏洞、短文件名枚举漏洞等。修复方法包括升级版本、配置调整和增强安全措施以降低风险。 2025-9-21 06:58:7 Author: www.freebuf.com(查看原文) 阅读量:1 收藏

IIS是微软开发的原生 Windows Web 服务器软件,作为 Windows 生态中承载 Web 服务的核心组件,其核心功能是接收客户端的 HTTP/HTTPS 请求,调用后端资源(网页文件、数据库、Web 应用)并返回响应,实现网站与 Web 系统的发布与访问;它深度集成 Windows 系统内核及.NET Framework、ASP.NET等微软技术栈,还支持 FTP、SMTP 等多类网络服务,广泛应用于企业内部系统、中小型商业网站,全球约 15%-20% 的活跃网站依赖其部署,而正因这种广泛的应用场景与系统集成性,其安全漏洞可能引发服务器远程控制、敏感数据泄露等严重风险,对企业 Web 服务安全至关重要。

IIS6.0文件名解析漏洞

IIS在处理类似test.asp;.jpg文件时,正常情况下不会当做asp文件解析,但在IIS6.0版本,IIS会把分号之后的内容截断,变成test.asp,当做asp文件执行。iis除了会将asp解析成脚本执行文件之外,还会将 cer cdx asa扩展名解析成asp,原因是 asp cer cdx asa这四个扩展名都是由同一个dll解析,都是asp.dll。

利用方法

在IIS6.0的目录下创建一个test的目录,目录下创建一个名为test.asp;.jpg的文件访问该文件

1758436879_68cf9e0fe6d0781bc5626.png!small

访问结果:函数执行,打印出当时时间
1758436910_68cf9e2e916ae4d45ed54.png!small

修复方法

禁止创建和上传此类畸形文件;

上传文件存放目录设置成禁止脚本文件执行;

升级iis版本。

IIS6.0目录解析漏洞

IIS6.0 在网站下建立的目录名称是*.asp *.cer *.cdx *.asa时,目录下的文件都会被当做asp文件解析,原理类似文件名解析漏洞,这些文件扩展名都是由asp.dll解析。

利用方法
这里我们创建一个test.asp的文件夹,文件夹下放置ceshi1.jpg、ceshi2.txt两个文件夹,文件内容均为:<%=time()%>,文件结构如下:

1758436936_68cf9e48d7edae88b5667.png!small

测试访问:

1758436963_68cf9e6375378ff1f7d0b.png!small

1758436984_68cf9e784332c8b554f15.png!small

修复方法

禁止创建此类文件夹名称,或者直接禁止创建文件夹;

升级IIS版本。

IIS6.0 PUT文件上传

HTTP 协议中的 PUT 方法原本设计用途是 允许客户端向服务器指定路径上传文件( WebDAV 服务会依赖此方法实现文件管理)。而 IIS 6.0 在默认配置或管理员误操作下,可能存在两种启用 PUT 方法的场景:

WebDAV 服务开启:若服务器安装并启用了 WebDAV 组件(用于支持远程文件管理),PUT 方法会默认开放,攻击者可直接通过 PUT 请求向服务器上传文件;

非 WebDAV 场景的配置漏洞:即使未安装 WebDAV,若 IIS 6.0 的 Web 服务扩展 中未禁用 PUT 方法,或站点配置中允许 PUT 动词,攻击者仍可构造 PUT 请求触发上传。

正常情况下,Web 服务器应严格限制 PUT 方法的使用范围(如仅允许特定目录、特定用户),但 IIS 6.0 的默认配置或早期运维疏忽常导致该方法被过度开放,为文件上传提供了入口。

总之就是IIS Server在Web服务扩展中开启了WebDAV;IIS配置了写入权限。

利用方法

利用options方法检测是否开启WebDAV,还有支持的协议:

1758437021_68cf9e9d3c1e66cb225e8.png!small

使用put协议上传一句话木马的txt文件。

一句话木马:<%eval request("pass")%>
1758437041_68cf9eb1cbd3bcfd177e4.png!small

利用move方法修改扩展名,如果服务器返回201 Created则修改成功,即获得一个Webshell。

1758437077_68cf9ed569fca01f936b8.png!small

使用菜刀进行连接getshell

1758437097_68cf9ee95050a6e8c4922.png!small

IIS短文件名枚举漏洞

IIS 短文件名机制是为兼容 DOS 及早期 Windows 的 8.3 命名规则而保留的特性。长文件名会生成 8 字符主名 +~1+3 字符扩展名短名,重名则递增~后的数字。

利用这个机制可以暴力猜解短文件名,访问构造的某个存在的短文件名,会返回404,访问构造的某个不存在的短文件名,返回400,该漏洞在IIS全部版本中存在,除了IIS使用.Net Framework 4时不受影响, IIS8.0以下版本需要开启ASP.NET支持,IIS>=8.0版本,即使没有安装ASP.NET,通过OPTIONS和TRACE方法也可以猜解成功,不同版本在返回结果上可能存在不同。

利用方法

网站根目录存在bcadefg121.txt文件,IIS版本为6.0。

访问http://www.zero1sec.com/a*~1*/.aspx,返回400,即不存在开头为a的文件;
访问http://www.zero1sec.com/b*~1*/.aspx,返回404,即存在开头为b的文件;
访问http://www.zero1sec.com/ba*~1*/.aspx,返回400,即不存在开头为ba的文件;
访问http://www.zero1sec.com/bb*~1*/.aspx,直到找到一个返回为404的,再查询第三位;
循环访问,找到404则跳出循环,再找下一个,直到访问到该文件。

类似于sql注入中的盲注,可以编写脚本进行测试。

检测工具:https://github.com/lijiejie/IIS_shortname_Scanner,只能检测,不能猜解。

修复方法

升级.net framework或者禁用ASP.NET功能(若Web环境不需要ASP.NET支持)

关闭NTFS对8.3文件名格式的支持(此方法只能禁止NTFS8.3格式文件名创建,已经存在的文件的短文件名无法移除,需要重新复制才会消失。如果不重新复制,已经存在的短文件名则是不会消失的。) 修改注册表键值:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem修改NtfsDisable8dot3NameCreation为1。修改完成后,需要重启系统生效。

禁止在URL中使用“~”及其Unicode编码。

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

HTTP.sys 是 Windows 系统的核心组件,运行在内核模式,负责处理 HTTP 请求,为 IIS 等 Web 服务提供底层支持,承担请求解析、连接管理、缓存等功能。

HTTP.SYS远程代码执行漏洞实质是HTTP.SYS的整数溢出漏洞,当攻击者向受影响的Windows系统发送特殊设计的HTTP 请求,HTTP.sys 未正确分析时就会导致此漏洞,成功利用此漏洞的攻击者可以在系统帐户的上下文中执行任意代码,可以使IIS系统蓝屏等。

主要存在Windows+IIS的环境下,任何安装了微软IIS 7.0以上的Windows Server 2008 R2/Server2012/Server 2012 R2以及Windows 7/8/8.1操作系统都受到这个漏洞的影响。

void process_range_header(char* range_str, char* buffer, int buffer_size) {
    int start, end;
    int total_length = 1024; 

    sscanf(range_str, "bytes=%d-%d", &start, &end);
    int count = end - start + 1; 
    
    if (count > 0) {
        memcpy(buffer, resource + start, count); 
    }
}

代码分析

整数溢出未校验

代码中 count = end - start + 1 未检查 end 是否远大于 start。当攻击者构造 Range: bytes=0-18446744073709551615 时,end - start + 1 会因整数溢出变成负数或超大正数,导致 count 取值异常。

缓冲区边界未检查

memcpy 操作直接使用计算出的 count 作为复制长度,未验证其是否超过 buffer_size。若 count 因溢出变为远大于缓冲区大小的值,会导致缓冲区溢出,覆盖相邻内存区域。

内核模式下的风险放大

HTTP.sys 运行在内核态,缓冲区溢出会直接影响内核内存,攻击者可通过精心构造的 Range 头部控制溢出数据,覆盖函数返回地址或内核数据结构,最终实现远程代码执行(在内核态执行恶意指令)。

利用方法

(1)检测漏洞是否存在,在浏览器编辑请求头,增加Range: bytes=0-18446744073709551615字段,若返回码状态为416 Requested Range Not Satisfiable,则存在HTTP.SYS远程代码执行漏洞;或者使用curl工具,命令:

curl -v www.zero1sec.com -H "Host:irrelevant" -H "Range:bytes=0-18446744073709551615"

返回码状态为416 RequestedRange Not Satisfiable,即存在漏洞。

(2)对网站执行poc,目标系统会蓝屏或者卡顿;或者使用渗透框架msf搜索该漏洞利用模块,进行测试。

CVE-2017-7269 远程代码执行漏洞

WebDAV 服务在处理 HTTP 的PROPFIND 请求时,会解析请求中的 XML 数据;当攻击者发送包含特殊构造 XML 字段(如超长或畸形的<D:prop>相关内容)的请求时,服务对数据长度的校验存在缺陷,导致缓冲区溢出—— 攻击者可通过构造的恶意数据覆盖服务器内存,进而注入并执行恶意代码,实现远程控制目标 IIS 服务器。

void ScStoragePathFromUr(const char* url_path, char* local_path) {
    char decoded_path[256]; 
    
    url_decode(url_path, decoded_path); 
    
    strcpy(local_path, "/var/www/");
    strcat(local_path, decoded_path); 
}

漏洞分析

固定缓冲区与输入长度失控
函数中 decoded_path 和 local_path 采用固定大小缓冲区,但未严格校验用户输入的 url_path 解码后的长度。当攻击者构造超长 URL 路径,解码后长度超过缓冲区容量时,后续的 strcpy/strcat 操作会导致缓冲区溢出。

用户可控输入直接拼接
url_path 是攻击者可控的 HTTP 请求参数,通过精心构造超长路径,可使解码后的 decoded_path 超出缓冲区限制。strcat 函数在拼接时不会检查目标缓冲区是否足够,直接写入数据,覆盖相邻内存区域。

溢出导致代码执行
溢出数据可覆盖函数返回地址或关键内存结构,攻击者通过精准构造恶意数据,可将返回地址指向自己注入的 shellcode,当函数执行结束时,CPU 会跳转到 shellcode 所在地址,实现远程代码执行。

利用方法

(1)检测是否开启WebDAV

OPTIONS / HTTP/1.1
Host:www.zero1sec.com

若返回信息存在以下内容,说明开启了WebDAV

DAV:1,2

(2)执行exp,设置IP及其端口,监听本机端口,反弹shell

exp地址:https://github.com/g0rx/iis6-exploit-2017-CVE-2017-7269

IIS7.X解析漏洞

IIS7.x版本在Fast-CGl运行模式下(cgi.fix_pathinfo=1),在任意文件如:1.jpg/png后面加上/.php,因为php不存在,会向前解析,将1.jpg/png解析为php文件。

利用方法

创建jiexi.jpg文件,写入如下内容

<?php phpinfo();?>

正常访问该文件
1758437155_68cf9f23d748c6c998d5d.png!small

在后面加上/.php再访问
显示服务器错误

1758437174_68cf9f36d995ca6105db2.png!small

开启该解析漏洞的利用条件

在处理程序映射中双击选择FastCGI,在请求限制中叉掉映射的选项

1758437189_68cf9f45bd1f6efba872a.png!small

再次打开该页面
成功将解析jpg文件解析成php文件

1758437206_68cf9f560d4ba1d2f6bc7.png!small

修复方法

配置 cgi fix_pathinfo(php ini)为0并重启php-cgi程序;

处理程序映射->FastCGI->请求限制->映射->选择文件或文件夹->确定


文章来源: https://www.freebuf.com/articles/web/449645.html
如有侵权请联系:admin#unsafe.sh