1. 漏洞背景与影响范围
2003年发布的Windows Server 2003 R2系统内置的IIS 6.0组件,在2017年被曝出存在一个高危漏洞。这个漏洞编号为CVE-2017-7269,本质上是WebDAV服务中的ScStoragePathFromUrl函数存在缓冲区溢出问题。当时这个漏洞影响范围相当广泛,因为很多企业还在使用这个经典的操作系统版本。
我最早接触这个漏洞是在一次内部渗透测试中。客户的一台老旧文件服务器突然让我们拿到了系统权限,排查后发现正是这个漏洞在作祟。有趣的是,微软其实早在2016年7月就监测到有攻击者在利用这个漏洞,但直到2017年3月才发布补丁。这个时间差让不少系统暴露在风险中。
漏洞的触发条件比较特殊:需要服务器开启WebDAV扩展功能。虽然IIS 6.0默认不开启这个功能,但很多企业为了方便远程文件管理,都会手动启用它。一旦开启,攻击者只需要发送一个精心构造的PROPFIND请求,就能触发缓冲区溢出,最终实现远程代码执行。
2. 漏洞技术原理剖析
2.1 关键函数分析
ScStoragePathFromUrl这个函数是整件事情的核心。它的作用是把URL路径转换成服务器本地存储路径。问题出在函数内部处理长URL时的内存拷贝操作——它没有对输入长度做严格校验,直接使用了不安全的字符串操作。
我反编译过这个函数的汇编代码,发现它在处理"if:<http://"开头的特殊header时,会进行两次路径转换。第一次转换会分配一个固定大小的栈缓冲区,第二次转换时如果URL过长,就会导致栈溢出。这种双重转换的设计缺陷,给了攻击者可乘之机。
2.2 溢出机制详解
具体来说,攻击者构造的恶意请求是这样的:
PROPFIND / HTTP/1.1 Host: target Content-Length: 0 If: <http://AAAAAAAA...[30000个A]...> (锁令牌)当这个请求到达服务器时,IIS会调用ScStoragePathFromUrl处理If头中的URL。函数第一次处理时还算正常,但第二次处理时由于缓冲区太小,超长的URL就会覆盖关键的返回地址和异常处理结构。通过精心控制溢出内容,攻击者可以劫持程序执行流程。
3. 漏洞复现环境搭建
3.1 靶机配置
要复现这个漏洞,我们需要准备以下环境:
- Windows Server 2003 R2系统(建议使用虚拟机)
- 安装IIS 6.0组件
- 启用WebDAV扩展
安装IIS时有个细节要注意:在"万维网服务"→"应用程序服务器"选项中,必须勾选"WebDAV发布"。安装完成后,还需要在IIS管理器中为默认网站启用WebDAV扩展。我遇到过不少初学者卡在这一步,因为界面选项藏得比较深。
3.2 攻击机准备
攻击机推荐使用Kali Linux,需要安装Metasploit框架。虽然网上有现成的Python版exploit,但Metasploit的模块更稳定,也方便后续的渗透操作。建议使用2018年左右的Kali版本,因为新版本可能会遇到兼容性问题。
4. 漏洞利用实战
4.1 Exploit构造
虽然可以直接使用现成的Metasploit模块,但理解exploit的构造原理更重要。核心是要构造一个特殊的PROPFIND请求,其中If头包含超长字符串。这个字符串需要精心设计:
- 前部分用大量A填充,触发溢出
- 中间放置跳转地址(如0x7ffa4512)
- 最后附上shellcode
我调试时发现,由于内存地址随机化,直接硬编码地址成功率不高。更好的做法是利用堆喷射技术,先分配大量内存填充nop sled,再跳转到这个区域执行。
4.2 手动利用步骤
不使用Metasploit的情况下,可以这样手动利用:
- 用nc发送恶意PROPFIND请求
echo -e "PROPFIND / HTTP/1.1\nHost: target\nContent-Length: 0\nIf: <http://$(python -c 'print "A"*30000')>" | nc target 80- 观察服务器响应,确认是否崩溃
- 调整溢出长度和跳转地址
- 加入shellcode实现代码执行
这个过程需要反复调试,我建议先用调试器附加到w3wp.exe进程,观察溢出时的寄存器状态,这样能更准确地确定跳转位置。
5. 防御与修复建议
5.1 临时缓解措施
如果暂时无法升级系统,可以采取这些临时措施:
- 在IIS中禁用WebDAV扩展
- 在防火墙过滤包含"PROPFIND"和"If:"头的请求
- 使用URLScan工具限制请求长度
不过这些方法都可能影响正常业务,特别是需要WebDAV功能的情况。
5.2 彻底修复方案
最根本的解决方案是安装微软官方补丁。补丁编号为MS17-016,修改了ScStoragePathFromUrl函数的内存处理逻辑。安装后需要重启IIS服务才能生效。
对于已经停止支持的Windows Server 2003,建议尽快迁移到新版操作系统。我在客户现场见过太多因为舍不得淘汰老旧系统而导致的安全事故,这个风险实在不值得冒。
6. 渗透测试中的实际应用
在真实的红队行动中,这个漏洞往往能起到意想不到的效果。我遇到过这样的情况:客户网络外围防护很严,但内网有一台老旧的Windows 2003文件服务器。通过这个漏洞,我们成功突破边界,拿到了内网立足点。
利用时需要注意几点:
- 先扫描识别IIS 6.0服务器
- 检查WebDAV是否启用(OPTIONS请求)
- 使用低流量模式,避免触发IDS
- 获得shell后立即迁移进程,防止w3wp.exe回收
这个漏洞的利用稳定性其实不算太高,在内网环境中成功率大约60-70%。但考虑到Windows 2003系统普遍缺乏防护,仍然是红队武器库中的利器。