mein-0/cve-2025-7771
GitHub: mein-0/cve-2025-7771
CVE-2025-7771 的 PoC,通过 ThrottleStop.sys 驱动的任意物理内存读写漏洞实现从管理员到 SYSTEM 的本地提权。
Stars: 0 | Forks: 0
# CVE-2025-7771 — ThrottleStop.sys LPE
CVE-2025-7771 的概念验证。ThrottleStop.sys 暴露了两个 IOCTL 处理程序,允许无访问控制的任意物理内存读写——任何管理员进程都可以读取或写入物理 RAM 中的任意位置。
已在 Windows 10 22H2 和 Windows 11 23H2 x64 上测试。
## 我的操作
首先将驱动程序二进制文件加载到 IDA Pro 中,以了解其内部工作原理。找到了 `IRP_MJ_DEVICE_CONTROL` 分发例程,并追踪到两个 IOCTL 代码:
- `0x80006498` — 从物理地址读取
- `0x8000649C` — 向物理地址写入
两者都直接使用传入的地址调用 `MmMapIoSpace`。没有边界检查,没有调用者验证,什么都没有。这就是漏洞所在。
由此,利用路径就非常直接了:
1. 打开 `\\.\ThrottleStop` 的句柄
2. 使用 Superfetch PFN 查询(`NtQuerySystemInformation` 类 79)建立虚拟地址到物理地址的转换映射
3. 通过 `NtQuerySystemInformation` 类 11 泄露 ntoskrnl 基址
4. 从磁盘加载 `ntoskrnl.exe`,解析 `PsInitialSystemProcess` 导出 RVA,加上运行时基址得到内核 VA
5. 将该 VA 转换为物理地址并读取——得到 SYSTEM EPROCESS 指针
6. 从 `EPROCESS+0x4b8` 读取 SYSTEM 令牌
7. 遍历 `ActiveProcessLinks` 找到我们自己的 EPROCESS
8. 将 SYSTEM 令牌写入我们自己的令牌字段(物理写入,绕过所有虚拟内存保护)
9. 启动 cmd.exe——它将继承我们现在的 SYSTEM 令牌
令牌字段是 `_EX_FAST_REF`,因此低 4 位是引用计数,不是指针的一部分。读取 SYSTEM 令牌时屏蔽这些位,写入时保留我们自己的引用计数位,否则可能导致蓝屏。
## 构建
```
cl /std:c++20 /EHsc /O2 exploit_single.cpp /link ntdll.lib advapi32.lib
```
需要 MSVC(VS2022+)并且已加载驱动程序。以管理员身份运行。
## EPROCESS 偏移量
以下适用于 Windows 10 20H2 至 22H2 以及 Windows 11 22H2/23H2 x64。如果使用其他版本,请使用 WinDbg 中的 `dt nt!_EPROCESS` 检查。
| 字段 | 偏移量 |
|---|---|
| UniqueProcessId | 0x440 |
| ActiveProcessLinks | 0x448 |
| Token | 0x4b8 |
## 参考
- CVE-2025-7771
- 卡巴斯基关于野外主动利用的研究
- [jonomango/superfetch](https://github.com/jonomango/superfetch)
*仅用于教育和研究目的。已在个人虚拟机上测试。*
标签:C++, CVE-2025-7771, EPROCESS, IDA Pro, IOCTL, LPE, MmMapIoSpace, MSVC, PoC, SYSTEM token, ThrottleStop.sys, Token stealing, Web报告查看器, Windows 10, Windows 11, Windows内核, 任意物理内存读写, 内核提权, 内核漏洞, 威胁模拟, 安全意识培训, 安全漏洞, 提权漏洞, 攻击提权, 数据擦除, 暴力破解, 物理内存, 白帽子, 驱动漏洞, 驱动漏洞利用