CVE-2025-7771 的概念验证。ThrottleStop.sys 暴露了两个 IOCTL 处理程序,允许在没有任何访问控制的情况下任意读写物理内存 — 任何管理员进程都可以读取或写入物理 RAM 中的任意位置。
已在 Windows 10 22H2 和 Windows 11 23H2 x64 上测试。
首先将驱动程序二进制加载到 IDA Pro 中,以弄清其内部工作原理。找到了 IRP_MJ_DEVICE_CONTROL 分发例程,并追踪到两个 IOCTL 代码:
0x80006498 — 从物理地址读取0x8000649C — 向物理地址写入两者都直接调用 MmMapIoSpace,传入什么地址就映射什么地址。没有边界检查,没有调用方验证,什么都没有。这就是漏洞所在。
从那里开始,利用路径相当直接:
\\.\ThrottleStop 的句柄NtQuerySystemInformation 类 79)构建虚拟地址→物理地址转换映射NtQuerySystemInformation 类 11 泄露 ntoskrnl 基址ntoskrnl.exe 以解析 PsInitialSystemProcess 导出 RVA,加上运行时基址得到内核 VAEPROCESS+0x4b8 读取 SYSTEM tokenActiveProcessLinks 找到我们自己的 EPROCESStoken 字段是 _EX_FAST_REF,因此低 4 位是引用计数,不是指针的一部分。读取 SYSTEM token 时要屏蔽这些位,写入时要保留我们自己的引用计数位,否则有蓝屏风险。
cl /std:c++20 /EHsc /O2 exploit_single.cpp /link ntdll.lib advapi32.lib
需要 MSVC(VS2022+)且已加载驱动程序。以管理员身份运行。
这些偏移量适用于 Windows 10 20H2 至 22H2 以及 Windows 11 22H2/23H2 x64。如果你使用的是其他版本,请在 WinDbg 中用 dt nt!_EPROCESS 检查。
| 字段 | 偏移量 |
|---|---|
| UniqueProcessId | 0x440 |
| ActiveProcessLinks | 0x448 |
| Token | 0x4b8 |
仅用于教育和研究目的。已在个人虚拟机上测试。