DavidCarliez/CVE-2019-9702_Symantec_Encryption_Desktop_LPE_PoC
GitHub: DavidCarliez/CVE-2019-9702_Symantec_Encryption_Desktop_LPE_PoC
针对 Symantec Encryption Desktop PGPwded.sys 驱动 CVE-2019-9702 漏洞的本地权限提升 PoC,通过 raw 磁盘读写覆盖系统服务二进制文件,实现重启后获取 SYSTEM 权限。
Stars: 0 | Forks: 0
# Symantec Encryption Desktop `PGPwded.sys` 本地权限提升 PoC
本仓库包含一个针对 Symantec Encryption Desktop 的 `PGPwded.sys` 存储过滤器的本地权限提升路径的概念验证(PoC),基于低权限的 raw 磁盘读写原语。
该 PoC 是针对 Symantec Encryption Desktop Pro 10.4.2 MP3 开发和测试的。其他版本尚未使用此实现进行测试。
此项工作受到 Kyriakos Economou / Nettitude(现为 LRQA Nettitude)原始公开研究的启发,并在此基础上构建:
- [CVE-2019-9702: Symantec Encryption Desktop 本地权限提升 - 利用基于 NTFS 的任意硬盘读写漏洞](https://www.lrqa.com/en/cyber-labs/symantec-encryption-desktop-local-privilege-escalation-exploiting-an-arbitrary-hard-disk-read-write-vulnerability-over-ntfs/)
他们的文章描述了 `PGPwded.sys` 设备访问检查、受信任的 PGP 进程注入思路、raw 读写 IOCTL 以及基于 NTFS 的利用方法。此 PoC 侧重于由重启触发的服务二进制文件覆盖变体,并包含一个只读预检工具。
## 仓库内容
```
src/
sym_portable_launcher.c # single-EXE launcher; embeds and drops the staging worker
portable_stage_worker.c # injected worker; maps C:, opens PGPwded, stages payload
spooler_payload.c # service payload run by Spooler as LocalSystem after reboot
sym_portable_precheck.c # single-EXE read-only precheck launcher
precheck_worker.c # injected read-only diagnostic worker
*_bytes.h # generated embedded payload/worker byte arrays
tools/
sym_target_diag_lite.cmd # wrapper script for collecting target diagnostics
```
## 漏洞利用的工作原理
重启阶段的漏洞利用程序是一个释放的 32 位 Windows 可执行文件。整体流程如下:
1. 低权限用户从常规可写路径(例如 `C:\Users\Public`)运行启动器。
2. 启动器定位 Symantec PGP Desktop 的安装目录。
3. 启动器将内置的 32 位工作 DLL 释放到 `%TEMP%` 中。
4. 启动器启动或使用一个受信任的 PGP Desktop 可执行文件,并将工作程序注入到该进程中。
5. 工作程序在受信任的 PGP 进程映像路径内打开 `\\.\PGPwdef`。
6. 工作程序将 `C:\Windows\System32\spoolsv.exe` 映射到其 NTFS 盘区并计算对应的物理磁盘扇区。
7. 工作程序使用 raw 读取 IOCTL 查找哪个 `\Device\000000xx` PGP 磁盘对象映射到该 C: 扇区。
8. 工作程序将当前的 Spooler 二进制文件备份到 `C:\Users\Public\spoolsv.exe.orig.portable`。
9. 工作程序使用内置的 LocalSystem 服务 payload 覆盖 `spoolsv.exe` 对应的物理扇区。
10. 重启后,Windows Spooler 服务以 LocalSystem 权限启动并运行该 payload。
11. Payload 在当前活动的控制台会话中打开一个可见的 SYSTEM 命令提示符。
只读预检程序遵循相同的受信任进程路径,但仅使用 raw 读取 IOCTL。它不会覆盖文件,也不会进行漏洞利用的部署。
## 编译
在安装了 MinGW-w64 的 Linux 主机上进行编译:
```
make
```
预期输出:
```
bin/sym_portable_reboot_stage32.exe # exploit/stager
bin/sym_portable_precheck32.exe # read-only precheck
```
## 预检程序用法
首先运行预检程序。它旨在验证当前是否满足漏洞利用条件,且不会修改受保护的文件。
```
C:\Users\Public\sym_portable_precheck32.exe
notepad C:\Users\Public\sym_portable_precheck.log
```
一个有效的目标最终应显示:
```
[OK] current reboot exploit conditions
```
如果日志显示没有可读的 PGP PDO,或者没有匹配的 C: 扇区,请勿运行漏洞利用程序。这通常意味着操作系统磁盘未受 Symantec WDE 管理/监测。
如需获取更完整的目标报告,请将以下两个文件复制到同一目录中并运行 CMD 包装脚本:
```
sym_target_diag_lite.cmd
sym_portable_precheck32.exe
```
然后运行:
```
C:\Users\Public\sym_target_diag_lite.cmd
notepad C:\Users\Public\sym_target_diag_lite.log
```
## 漏洞利用程序用法
仅在您被授权修改受保护系统文件且预检程序已通过的系统上运行此漏洞利用程序。
将 stager 复制到可写路径,并以低权限用户身份运行它:
```
C:\Users\Public\sym_portable_reboot_stage32.exe
```
检查部署日志:
```
type C:\Users\Public\sym_portable_launcher.log
type C:\Users\Public\sym_portable_stage.log
```
如果部署成功,工作程序日志将包含:
```
STAGED_OK_REBOOT_TO_TRIGGER
```
重启计算机。重启后,Spooler 服务应以 LocalSystem 权限启动 payload,并打开一个标题为以下内容的命令提示符:
```
SYSTEM_CMD_FROM_PORTABLE_REBOOT_LPE
```
## 还原
stager 在覆盖目标文件之前会创建此备份:
```
C:\Users\Public\spoolsv.exe.orig.portable
```
目前未包含公开的一键还原模式。在测试中,还原是通过将备份文件 raw 写入相同的映射扇区并重启来完成的。在发布编译好的二进制文件之前,应添加并验证安全的还原流程。
## 已知限制
- 当前的 stager 针对 `C:\Windows\System32\spoolsv.exe`。
- 操作系统磁盘必须通过 `PGPwded.sys` 暴露;仅安装 Symantec 是不够的。
- 如果 C: 由 BitLocker 管理且 Symantec 报告该磁盘为未管理状态,则此路径预计无法利用。
- 当前的目标文件必须是单盘区的;工作程序遇到碎片时会中止。
- 当前的 PoC 需要重启才能触发执行。
- 当前的 payload 是特意设计得很明显的:它会打开一个可见的 SYSTEM 命令提示符。
## 免责声明
这是用于授权测试和防御验证的研究代码。请勿在您不拥有或未获得明确评估许可的系统上运行它。
标签:API接口, CVE-2019-9702, PoC, Web报告查看器, 客户端加密, 暴力破解, 本地提权