-
-
[求助] Win10/11 环境下“任意地址写负数”原语的提权利用思路探讨
-
-
[求助] Win10/11 环境下“任意地址写负数”原语的提权利用思路探讨
假设我们拥有一个漏洞原语:可以向内核任意地址写入一个负数 DWORD(例如固定写入 -1 或 -2)。
从利用角度来看,这是一个受限的任意地址写原语(Limited Arbitrary Write Primitive)——它既不能写入完全可控的值,也不具备任意地址读的能力,仅能写入固定的负值。在现代 Windows 10/11 的纵深防御体系(SMEP、SMAP、KASLR、kCFG 等)下,如何将这个受限原语转化为完整的提权利用链,是我目前主要的研究困惑。
已尝试的方向及遇到的问题
I/O Ring 读写原语扩展(Win11 22H2+)
我参考了近年的公开思路,尝试通过修改 _IORING_OBJECT 中的 RegBuffers 等字段来获得更强大的读写能力。但实践中遇到了两个棘手问题:
在 Windows x64 下,地址 0x80000000 及以上似乎会被强制进行符号扩展(导致 Windbg 无法正常查看,VirtualAlloc 也无法申请此类地址),这使得我无法精确构造所需的缓冲区指针。
由于我只能写入固定的 4 字节负值,修改 RegBuffersCount 的低字节时,总会不可避免地破坏相邻的 CompletionUserEvent 字段,最终触发蓝屏。
寻找其他内核对象 / 结构体字段
我也考虑过寻找其他内核对象,通过篡改其“用于限制读写范围”的字段(例如长度、大小、指针偏移等)来扩大原语能力,从而实现任意地址读写。但目前尚未找到合适的目标。
求助方向
希望各位大佬能指点一下:
在仅具备“任意地址写固定负数”的前提下,是否有其他更稳定的利用路径(不依赖 I/O Ring)?
或者,我是否忽略了 I/O Ring 利用中的某些细节(比如如何规避符号扩展和字段破坏问题)?
有没有其他内核全局变量或对象字段,将其修改为 -1 就能产生可利用的副作用(如引用计数溢出、长度校验绕过等)?
先行谢过!任何思路或提示都对我很有帮助。
[招生]科锐逆向工程师培训(2026年7月3日实地,远程教学同时开班, 第56期)!