MS15-034 (CVE-2015-1635) 漏洞复现报告(超详细)
1. 基本信息
| 项目 | 内容 |
|---|---|
| 漏洞编号 | MS15-034 / CVE-2015-1635 |
| 漏洞名称 | HTTP.sys 远程代码执行漏洞 |
| 漏洞类型 | 整数溢出 |
| 影响组件 | Windows HTTP 协议栈驱动 HTTP.sys |
| 理论危害 | 拒绝服务、信息泄露、远程代码执行 |
2. 实验环境
| 角色 | 操作系统 | IP 地址 | 说明 |
|---|---|---|---|
| 攻击机 | Kali Linux 2023 | 192.168.10.224 | 安装 curl、Nmap、Metasploit |
| 靶机 | Windows Server 2008 R2 SP1 | 192.168.10.142 | IIS 7.5,未打补丁 (KB3042553) |
3. 漏洞检测
发送恶意 Range 头验证漏洞:
返回 416 Requested Range Not Satisfiable,确认漏洞存在。
4. 危害复现情况
| 危害类型 | 复现结果 | 说明 |
|---|---|---|
| 拒绝服务(蓝屏) | ✅ 成功 | 使用 Metasploit DoS 模块,靶机立即蓝屏,错误代码 IRQL_NOT_LESS_OR_EQUAL |
| 信息泄露 | ❌ 未成功 | 在 Windows Server 2008 R2 上使用 MSF 内存读取模块及手动 curl 均未获得额外数据 |
| 远程代码执行 | ❌ 未尝试 | 无公开稳定利用代码,理论风险极高,实际难以利用 |
4.1 拒绝服务复现步骤
查询漏洞MS15-034,返回了两个工具,工具1也可以用来检测漏洞的存在
返回选择工具0,使用工具0,设置靶机ip后运行完成了蓝屏攻击。
执行后靶机蓝屏(截图见附件)。复现成功。
4.2 信息泄露尝试说明
为尝试信息泄露,在靶机 C:\inetpub\wwwroot 下创建 10MB 文件 large.txt,然后执行:
bash
curl http://192.168.10.142/large.txt -H "Range: bytes=0-18446744073709551615" --output dump.bin
仅返回 416 错误页面,无内存数据。Metasploit 的 ms15_034_http_sys_memory_dump 模块也只输出漏洞存在提示,未返回数据。判断在 Windows Server 2008 R2 上信息泄露难以复现。
5. 漏洞原理简述
HTTP.sys 在处理 Range: bytes=0-N 时计算长度 length = N - 0 + 1。当 N = 2^64-1 时,length = 2^64,超出 64 位整数范围,溢出为 0。但代码缺陷导致仍使用原始 N 值去读取内存,从而越界访问:若访问不可读区域则蓝屏,若访问可读区域则信息泄露。
攻击者利用了 Range 头的计算逻辑缺陷,发送了一个不可能满足的区间:
Range: bytes=0-18446744073709551615
这个结束值 18446744073709551615 是 64 位无符号整数的最大值(2^64 - 1)。
服务器在处理时,需要计算要发送的数据长度:
长度 = 结束 - 开始 + 1 = (2^64 - 1) - 0 + 1 = 2^64
但服务器内部用来存储长度的变量是 64 位无符号整数,最大只能表示 2^64 - 1。2^64 超出了这个范围,发生整数溢出,实际存储的值变成了 0。
正常情况下,计算出长度为 0 时,服务器应该返回 416 Requested Range Not Satisfiable(范围不满足)。但是,Windows 的 HTTP.sys 驱动中存在一个缺陷:它没有正确处理这个溢出情况,反而错误地使用了原始的、没有溢出的 end 值(2^64 - 1)作为要复制的字节数。
于是,HTTP.sys 从文件缓存的起始地址开始,尝试读取 2^64 字节的数据——这远远超出了实际文件大小。它会一直读到文件缓存后面的内核内存区域。如果那片内存区域是可读的,就会把数据返回给攻击者(信息泄露);如果不可读,就会触发页错误,导致系统蓝屏(拒绝服务)。
IIS 内核缓存的作用
-
正常功能:
HTTP.sys将静态文件内容缓存到内核内存中,加速后续请求。 -
漏洞中的角色:攻击者触发溢出后,
HTTP.sys错误地使用原始的N值作为读取长度,从内核缓存起始地址开始越界读取。- 若越界区域可读 → 信息泄露
- 若不可读 → 蓝屏
因此,IIS 内核缓存是信息泄露能够成功的“放大镜”和“通道” 。关闭内核缓存可切断该通道,但整数溢出缺陷依然存在(仍可能蓝屏)。
四、总结
- 正常:
Range头用来请求文件的一部分,服务器返回 206。 - 恶意:攻击者构造一个超大范围,让服务器计算溢出,利用代码缺陷读取不该访问的内存。
- 你的实验中:发送恶意
Range后,服务器返回 416(它检测到了范围无效,但没有泄露数据),是因为 Windows Server 2008 R2 上的 HTTP.sys 实现可能更早地拦截了这种请求,或者内存布局使得越界读取落入了不可读区域,只触发了蓝屏。
如果你想更直观地理解,可以这样类比:
Range 头就像你去餐厅点“只要第 3 口到第 5 口菜”。
攻击者点的是“从第 0 口吃到第 100 亿口”,餐厅厨师算错账,结果从厨房里搬出了别人桌的菜(信息泄露),或者撞到墙上把厨房砸了(蓝屏)。
6. 修复建议
- 安装微软补丁 KB3042553
- 临时缓解:IIS 管理器中禁用内核缓存
7.漏洞修复
临时缓解:IIS 管理器中禁用内核缓存 在下图位置关闭内核缓存,在关闭之后再次返回kali尝试攻击,发现无法触发蓝屏了。但是通过查阅资料发现,关闭内核缓存后并不能完全修复漏洞,仍有几率触发漏洞,并且关闭内核缓存后会导致服务器性能下降,所以这个修复方式并不完美。
安装微软补丁 KB3042553,在微软官网下载补丁后传入win2008靶机中,运行补丁程序重启后自动就打上了补丁(打补丁的时候忘记截图了,反正也没什么好看的),重新返回kali中再次尝试攻击,发现攻击失败,再次运行漏洞查询程序,得到结果如第二张图片,漏洞不存在了,证明漏洞修复成功。
8.参考资料
| 标题/描述 | 链接 |
|---|---|
| 微软安全公告 MS15-034 | technet.microsoft.com/library/sec… |
| 绿盟科技:Windows HTTP.sys远程代码执行漏洞跟踪进展 | www.nsfocus.com.cn/html/2015/2… |
| IT168技术分析:Windows HTTP.sys将令网站面临安全威胁 | net.it168.com/a2015/0427/… |
| CSDN漏洞复现教程 | blog.csdn.net/ec_carrot/a… |
| 博客园漏洞复现与修复 | www.cnblogs.com/luuxiaoming… |
| 网络系统安全——MS15_034漏洞利用与安全加固 | ncsimple.blog.csdn.net/article/det… |
| 腾讯云漏洞修复文章 | cloud.tencent.cn/developer/a… |
| CN-SEC漏洞复现 | cn-sec.com/archives/41… |
| KB3042553 补丁下载 (Windows Server 2008 R2) | www.microsoft.com/zh-cn/downl… |
| 补丁依赖说明 | blog.csdn.net/y_66666666/… |
9. 结论
本次实验成功复现了 MS15-034 漏洞的拒绝服务危害,验证了 Windows Server 2008 R2 系统存在该漏洞且可被远程利用导致蓝屏。信息泄露和远程代码执行因环境和技术限制未成功复现,但理论上仍然存在风险,在理论上存在信息泄露和远程代码执行。