niklasb/elgoog
GitHub: niklasb/elgoog
一个Windows 10内核pwnable题目的完整源码与漏洞利用实现,演示如何从内核池单字节溢出实现权限提升。
Stars: 68 | Forks: 11
# elgoog / searchme
这是一个针对 Windows 10 的内核 pwnable 题目。该漏洞利用在 RS4 上适用于中等完整性级别。在 RS3 中,低完整性级别就足够了,因为可以使用 HMValidateHandle 来泄漏调色板对象地址。
它在 34C3 CTF 中被称为“elgoog2”,但存在一个非预期漏洞。作为“searchme”重新在 WCTF 2018 中推出。
我们有一个处理文档索引的易受攻击内核驱动程序。它允许你通过驱动程序 IOCTL 在内核态中逐步向索引添加文档,并使用[二进制插值码][1]压缩发布列表。数据结构存储在分页内核池中。
## 漏洞
在向倒排列表添加文档时,代码[试图保持列表唯一][2],但这显然是有缺陷的,因为我们只需在中间插入一个其他文档,就可以添加同一个文档两次。
然后我们可以触发插值编码的[大小计算][3]与[实际实现][4]之间的尴尬不匹配,这允许我们写入超过计算大小的数据。因此,我们可以让几乎所有的 `write_XXX` 函数接收到一个越界的 `*buf` 指针。对于 `write_bit`,这是一个问题,因为边界检查是不正确的,因此我们可以溢出一个字节。
我们可以从此漏洞中获得的原语是分页内核池中的任意单字节溢出,其中驻留着一些 NT 数据结构以及所有 elgoog 特定的数据结构。
## 预期解法
预期解法是破坏 `_POOL_HEADER` 的 `PrevSize` 字段并触发向后合并,从而导致池块重叠。借此我们可以破坏包含指针的 elgoog 自身数据结构,并实现任意写入。有关详细信息,请参阅[漏洞利用代码][5]。
然后我们利用这一点覆盖我们自己的 `SEP_TOKEN_RPIVLEGES` 并赋予我们调试权限,这允许我们将代码注入到 `winlogon.exe` 中。
标签:Binary Interpolative Code, CTF Writeup, Exploit, Kernel Pwn, Off-by-one, SIP, SSH蜜罐, Token 篡改, Web报告查看器, Windows 内核安全, 云资产清单, 任意读写, 内核提权, 客户端加密, 客户端加密, 池溢出, 漏洞利用开发, 红队技术, 进程注入, 逆向工程, 驱动漏洞挖掘