Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2018-0952-SystemCollector — 用于 Windows 10 诊断中心标准收集器服务中权限提升的 PoC | Kitploit
工具/GitHubGitHub/atredispartners/cve-2018-0952-systemcollector
权限提升漏洞分析漏洞利用渗透测试红队二进制利用
GitHubatredispartners/cve-2018-0952-systemcollector

CVE-2018-0952-SystemCollector

用于 Windows 10 诊断中心标准收集器服务中权限提升的 PoC

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库
1113118年前Kitploit 审核通过

SystemCollector

Windows 10 诊断中心标准收集器服务中权限提升的概念验证(PoC)

受影响产品

  • Windows 10
  • Windows Server
  • Windows Server 2016
  • Visual Studio 2015 Update 3
  • Visual Studio 2017

摘要

由于 DiagnosticsHub.StandardCollector.Runtime.dll 中缺少客户端模拟功能,Windows 标准收集器服务所使用的诊断中心打包库可以被强制将任意文件复制到任意位置。

以下是关于如何发现和利用此漏洞的详细说明:Windows 标准收集器服务中的权限提升漏洞

技术细节

标准收集器服务在配置诊断会话时允许定义多个值,包括暂存目录和会话 ID。会话 ID 可以是任意 GUID,暂存目录可以是用户具有写入权限的任何位置。如果将收集会话配置为 ID c13851b2-b1e1-438f-bf73-949df897f1bf 和暂存路径 C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\,则在调用 ICollectionSession 对象的 GetCurrentResult 方法时会发生以下事件:

  1. 在暂存路径中创建一个事件跟踪日志 (.etl) 文件:C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl
  2. 在暂存路径中还会创建一个报告文件夹:C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1
  3. 在报告文件夹中创建一个随机 GUID 的文件夹:C:\Users\Bob\AppData\Local\Temp\Microsoft\F12\perftools\visualprofiler\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65

这些文件夹和 ETL 文件由收集器服务为 .diagsession 包创建,该包通常在会话结束时创建。调用 ICollectionSession 对象的 Stop 方法会导致收集器服务通过调用 Microsoft::DiagnosticsHub::Packaging::DhPackageDirectory::CommitPackage 来提交诊断包。CommitPackage 函数会将原始 {scratch path}\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl 文件复制或移动到随机 GUID 文件夹:{scratch path}\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl

由 DiagnosticsHub.StandardCollector.Runtime.dll 中的 CommitPackagingResult 函数触发的复制/移动操作在没有模拟用户的情况下执行(与初始文件/文件夹创建不同),如果目标文件夹被替换为将复制重定向到任意位置的挂载点,则可能导致 TOCTOU 问题。为了以有用的方式利用此问题,攻击者需要在复制之前替换 ETL 文件的内容。这可以通过在服务释放文件句柄后利用 OpLock 赢得竞争条件来完成。

尽管我们不能完全控制被复制的 .etl 文件的名称,但我们可以使用对象目录符号链接技巧来控制它。挂载点+符号链接的设置大致如下:

  • 挂载点:{scratch path}\Report.c13851b2-b1e1-438f-bf73-949df897f1bf.1\EAD6A227-31D4-4EA2-94A9-5DF276F69E65\ -> \RPC Control\
  • 符号链接:\RPC Control\c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl -> C:\Windows\System32\anything.dll

控制文件内容、复制位置和文件名给攻击者提供了多种 DLL 加载的可能性。然而,所包含的 PoC 演示了不需要控制文件名,因为只要 DLL 位于 C:\Windows\System32 或 C:\Windows\System32\DiagSvcs 目录中,收集器服务就会愉快地加载任何文件名的 DLL。这是通过启动一个新的收集器会话,使用一个程序集名称与复制的 DLL 名称 c13851b2-b1e1-438f-bf73-949df897f1bf.1.m.etl 相匹配的代理来实现的。

所包含的 PoC 是一个 VS 解决方案,包含一个用于弹出 notepad.exe 有效负载的 C++ DLL 项目和一个用于与服务交互并利用 NtApiDotNet 库利用漏洞的 C# 项目。

重现步骤:

  1. 构建 Visual Studio 解决方案
  2. 以普通用户身份执行 SystemCollector.exe

预期结果:

包提交操作模拟用户,并在尝试复制文件时失败。

实际结果:

文件被复制到挂载点目标文件夹 C:\Windows\System32,然后作为收集器代理加载,最后以 SYSTEM 权限生成 notepad.exe。

其他参考

  • https://www.atredis.com/blog/cve-2018-0952-privilege-escalation-vulnerability-in-windows-standard-collector-service
  • https://portal.msrc.microsoft.com/en-US/security-guidance/advisory/CVE-2018-0952
  • https://github.com/atredispartners/advisories/blob/master/ATREDIS-2018-0004.md
下载工具