⚠️ 2020-06-06 更新: 此技巧在最新的 Windows 10 Insider Preview 版本中已不再有效。这意味着,尽管它在 Windows 10 的主流版本上 仍然有效,但您应该预料到它在未来几个月内会被修补。
此 PoC 展示了一种可用于在 Windows 上利用特权文件写入漏洞的技术。它提供了 James Forshaw(又名 @tiraniddo)发现的 DiagHub DLL 加载“漏洞”的替代方案,该漏洞自 1903 版本起已被微软修复。
从 Windows 10 开始,微软引入了 Update Session Orchestrator 服务。作为普通用户,您可以通过 COM 与此服务交互,例如执行“更新扫描”(即检查是否有可用更新)或开始下载待处理的更新。甚至还有一个名为 usoclient.exe 的未记录的内置工具,专门用于此目的。
从攻击者的角度来看,此服务之所以有趣,是因为它以 NT AUTHORITY\System 身份运行,并且每当创建更新会话时,它都会尝试加载一个不存在的 DLL(windowscoredeviceinfo.dll)。
这意味着,如果我们发现 Windows 或某些第三方软件中存在特权文件写入漏洞,我们可以将我们自己的 windowscoredeviceinfo.dll 副本复制到 C:\Windows\Sytem32\,然后让 USO 服务加载它,从而以 NT AUTHORITY\System 身份执行任意代码。
有关更多信息:
第1部分 - https://itm4n.github.io/usodllloader-part1/
第2部分 - https://itm4n.github.io/usodllloader-part2/
该解决方案包含两个项目:WindowsCoreDeviceInfo 和 UsoDllLoader。
它提供了一个 PoC DLL,每当调用 QueryDeviceInformation() 函数时,它将在端口 1337(仅限本地主机)上启动一个绑定 shell。该函数是 USO 工作进程使用的函数名称。
它是 usoclient.exe 的简化版本。普通用户可以运行它来与 USO 服务交互,让其加载 windowscoredeviceinfo.dll。然后,它将尝试连接到绑定 shell。如果出现错误,请阅读“已知问题”部分。
该解决方案已预先配置,因此编译应该很容易。我使用的是 Visual Studio 2019。它可能不适用于旧版本。
Release 配置和 x64 架构。.\x64\Release\WindowsCoreDeviceInfo.dll 和加载器 .\x64\Release\UsoDllLoader.exe。出于测试目的,您可以:
WindowsCoreDeviceInfo.dll 复制到 C:\Windows\System32\。NT AUTHORITY\SYSTEM 权限的 shell。如果 UsoDllLoader.exe 失败,您可以手动执行上述操作。
WindowsCoreDeviceInfo.dll 复制到 C:\Windows\System32\。usoclient StartInteractiveScan。注意该命令不会提供任何反馈。nc.exe 127.0.0.1 1337 连接到绑定 shell。如果有一个或多个更新正在等待安装,或者正在安装更新,则此方法可能会失败。
根据 Windows 版本的不同,UsoDllLoader.exe 可能会 以各种错误代码失败。我没有过多调查这些问题。原因在于它只是一个 PoC,是我为了方便而开发的。最重要的是 DLL,而不是加载器。有关更多详细信息,请参见“用法 2”。