一、漏洞描述
csc.sys驱动程序中带有METHOD_NEITHER I/O控制代码的IOCTL地址验证不正确,导致任意地址写入漏洞。
METHOD_NEITHER是 Windows 驱动程序中的一种 I/O 控制代码数据传输方法。它允许驱动程序在处理 I/O 请求时,直接从用户模式缓冲区读取或向其写入数据,而不需要操作系统提供的中间缓冲区,CVE-2024-26229使得攻击者可以通过构造恶意的 IOCTL 请求来将任意地址写入零值,进而修改内核数据结构。
二、漏洞利用
利用条件
需要主机开启csc
服务,使用sc qc csc命令查询
显示SYSTEM_START
即为开启。
下载漏洞EXP
https://github.com/RalfHacker/CVE-2024-26229-exploit
注意:在不同的Windows版本中EXP中的Token是不一样的,即代码中的 KTHREAD_PREVIOUS_MODE_OFFSET
Win10 1909 是0x360,Win10 20H2是0x4b8
Win11 22H2,23H2都是 0x4b8
代码生成的运行库选择MTD
使用Release x64方法进行编译生成CVE-2024-26229.exe
测试运行结果:
三、问题解决
错误 LNK1104 无法打开文件"ntdllp.lib"
作者在代码的注释中提及
I use ntdllp.lib private library from WDK to avoid GetProcAddress for Nt* functions
——我使用 WDK 的私有库 ntdllp.lib,以避免使用 GetProcAddress 获取 Nt* 函数。
"Nt*" 函数是指 Windows NT 内核提供的系统调用接口,通常以 "Nt" 开头。这些函数用于执行各种系统级操作,例如:
- NtCreateFile:创建或打开文件。
- NtWriteVirtualMemory:写入虚拟内存。
- NtQuerySystemInformation:查询系统信息。
- NtFsControlFile:对文件执行控制操作。
- NtReadVirtualMemory:读取虚拟内存。
- NtClose:关闭一个打开的句柄。
所以我们要下载这个WDK使用ntdllp.lib
Download the Windows Driver Kit (WDK) - Windows drivers | Microsoft Learn
也可以把ntdllp.lib换成ntdll.lib也可以成功编译
参考文献
Windows CSC服务权限提升漏洞(CVE-2024-26229)_windwos提权漏洞-CSDN博客
PostExpKit - CVE-2024-26229提权复现测试_cve-2024-26229 bof-CSDN博客
https://www.ddosi.org/cve-2024-26229/