返回介绍

第十九篇:内核利用程序之 Razer

发布于 2025-01-03 23:32:57 字数 1813 浏览 0 评论 0 收藏

fuzzySecurity 于 16 年更新了数篇 Windows 内核 exp 的教程,本文是内核篇的第十篇,也是目前为止的最后一篇。 点击查看原文

欢迎回到另一个 Windows 内核 exp 开发系列教程!今天我们看些不同寻常的东西。不久前 @zeroSteiner 在 rzpnk.sys 中挖掘出了两个 bug( CVE-2017-9770 & CVE-2017-9769 ),该驱动由 Razer Synapse 所用。此后不久我决定看看这两个 bug 并且。。。我还发现了可以本地提权的另外一个逻辑 bug( CVE-2017-14398 )!

本文我们将简要的阐述 CVE-2017-9769,此后我们会针对我发现的 bug CVE-2017-14398 写一个 exp。开始之前我想大声疾呼 @aionescu ,他总是说我根本不知道我在做什么,但这一次我可以挺直腰板了!我也曾一度在玩 Binary Ninja,截图就是从那里获取的,如果有人对此感兴趣的话。

Resources:

  • Razer Rzpnk.Sys IOCTL 0x226048 OOB Read (CVE-2017-9770) ( @zeroSteiner ) - here
  • Razer Rzpnk.Sys IOCTL 0x22a050 ZwOpenProcess (CVE-2017-9769) ( @zeroSteiner ) - here
  • MSI ntiolib.sys/winio.sys local privilege escalation ( @rwfpl ) - here

##永不屈服

在开始之前我想先快速的展示一下,这些漏洞函数在调用图示上有多么的接近。对于分发函数来说,它们字面上是相邻的。

这些调用分支源于上面同一个决策点,我们可以看到它从 IOCTL 中减掉了 0x10,当该值是 0 的时候,就跳转到 ZwOpenProcess 调用处,如果值为 0x14 的话,就跳转到 ZwMapViewOfSection 调用处。

同时注意到该驱动会检查输入和输出缓冲区的尺寸,如果提供的输入参数不够或输出缓冲区不够大的话,分支会落入失败的情景。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。