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。函数第一次处理


327

被折叠的 条评论
为什么被折叠?



