DCOMrade 是一个 PowerShell 脚本,用于枚举可能允许横向移动、代码执行、数据泄露等的潜在易受攻击的 DCOM 应用程序。该脚本基于 PowerShell 2.0 构建,但也适用于所有更高版本。目前支持以下 Windows 操作系统(包括 x86 和 x64):
我目前在 HackDefense 实习,研究现有的 DCOM 横向移动技术,并试图找到一种自动化枚举这些技术(以及可能的新技术)的方法。这项研究促成了该脚本以及相关研究论文的诞生,论文链接如下。
该脚本基于 Matt Nelson(@enigma0x3)的研究,特别是 第二回合 博文中关于寻找可能对渗透测试人员和红队有用的 DCOM 应用程序的内容。
首先,与目标系统建立远程连接,该连接在脚本中用于多种操作。在目标系统上执行一条 PowerShell 命令,用于检索所有 DCOM 应用程序及其 AppID。然后循环遍历 Windows 注册表,检查每个 AppID 的注册表项是否设置了 LaunchPermission 子项。如果没有设置,则存储这些 AppID,并用于获取其关联的 CLSID。
脚本为每个操作系统使用特定的黑名单,因此有不同的目标操作系统选项。黑名单会跳过那些可能因 DCOM 应用程序无法激活而导致脚本挂起的 CLSID 条目,从而减少对目标系统的负载并缩短脚本完成时间。
利用 CLSID,可以激活与之关联的 DCOM 应用程序。使用 'Shortcut' 的 CLSID 来计算其关联的 MemberTypes 数量,用于检查默认数量的 MemberTypes。该数字用于检测那些 MemberTypes 数量与此不同的 CLSID。脚本使用 'Shortcut' 的 CLSID(HKEY_CLASSES_ROOT\CLSID\{00021401-0000-0000-C000-000000000046}),因为这是跨 Microsoft Windows 操作系统共享的 CLSID。MemberTypes 数量不同的 CLSID 可能包含可以(被滥用)的 Method 或 Property,这些 CLSID 会被添加到一个数组中。
数组中的 CLSID 会检查 MemberTypes 中的字符串,这些字符串可能指示可(被滥用)的方式。该字符串列表可在 VulnerableSubset 文件中找到。请注意,此列表绝非查找每个易受攻击的 DCOM 应用程序的完整列表,但作为过程中的动态部分,它应允许脚本用户查找可能指示 DCOM 应用程序功能且对其目的有用的特定字符串。
脚本的结果以 HTML 报告形式输出,可作为审计系统的预防性措施。对于攻击方面,我创建了一个 Empire 模块,在撰写本文时,该模块正在等待批准添加到主分支。如果您想自行将该模块添加到 Empire,可以通过添加位于 此处 的模块来实现。
有关该想法、脚本以及可能的检测方法的完整技术说明,您可以阅读相关的 研究论文。
该脚本(当不作为 Empire 模块使用时)存在一些限制,因为其工作方式及与目标计算机的连接方式有所不同。
Enable-PSRemoting -SkipNetworkProfilecheck -Force在 Microsoft Windows 域环境中:
.\DCOMrade.ps1 -ComputerName [计算机名 / IP] -User [本地管理员] -OS [操作系统] -Domain [域名]
不在 Microsoft Windows 域环境中:
.\DCOMrade.ps1 -ComputerName [计算机名 / IP] -User [本地管理员] -OS [操作系统]

该脚本的灵感来自 Eva Tanaskoska 提供的 DCOM 横向移动研讨会。没有这个研讨会,尝试以自动化方式枚举这些技术的整个想法永远不会产生。
感谢 Matt Nelson(又名 @enigma0x3)的研究,我得以找到足够的信息来实现一种自动化形式。
Philip Tsukerman 的 文章 总结了大多数可用于横向移动的 DCOM 技术,并深入解释了它们的工作原理。