8
月
在社区成长 8 月
LEVEL 50
100 XP
ESC14 针对Active Directory 中的弱证书映射,利用altSecurityIdentities 属性允许攻击者欺骗主题CN 或颁发者DN 字段。这使得未经授权的PKI 身份验证成为特权用户或域控制器,从而导致权限升级和潜在的域危害。正确的证书验证对于防止ESC14 攻击至关重要。
通过Evil-WinRM 进行后利用完整的SYSTEM Shell
缓解措施
ESC14 不像ESC1 或ESC8 等攻击那样依赖UPN 映射,而是滥用证书和AD 用户帐户之间的直接手动映射。通过将伪造的映射注入目标用户(例如raj)的altSecurityIdentities 属性,攻击者可以欺骗Active Directory 接受与Kerberos 身份验证映射匹配的任何证书。
当:
攻击者可以创建机器帐户或获取具有可控字段的证书。
该环境使用发行者-主题或仅主题映射(弱选项)。
在此场景中,我们将展示如何从低特权用户(sanjeet) 升级到全域攻击,通过证书滥用、显式映射以及最终提取管理员凭据。
显式映射漏洞- 通过编辑altSecurityIdentities,我们直接将证书绑定到另一个帐户。
机器证书滥用– 利用机器证书有助于绕过基于UPN 的控制。
PKINIT 身份验证流程– AD 信任映射来颁发票证,从而实现基于票证的模拟。
权限升级至管理员– 一旦可以进行身份验证,DCSync 和哈希提取技术就变得可行。
总之,ESC14 利用错误配置的显式证书映射来模拟高权限帐户。通过更改altSecurityIdentities 属性并使用计算机证书,攻击者可以通过PKINIT 获取Kerberos 票证,从而通过DCSync 等工具实现权限升级,最终获得域管理员访问权限。这强调了保护证书映射和实施强有力的PKI 实践的必要性。
域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
工具: Certipy、OpenSSL、Ldeep、用于altSecurityIdentities 操作的Python 脚本、Impacket 和Evil-WinRM
一个工作域(在我们的例子中是ignite.local)
在我们的例子中,域控制器位于168.220.138
配置的证书颁发机构(启用机器模板)
两个域用户(根据您的情况可能有所不同):
raj(目标)sanjeet(攻击者)我们将纯粹关注利用流程,从用户枚举到完全域管理员接管。
网络用户raj
net用户sanjeet
首先,我们验证域中存在raj(目标)和sanjeet(攻击者)。这确保了我们的受害者和攻击者的身份都可以用于即将到来的滥用。
此步骤是ESC14 的关键先决条件。如果没有对raj 属性的写访问权限,攻击者(sanjeet) 就无法操纵altSecurityIdentities 字段。
certipy-ad account -u sanjeet -p 密码@1 -dc-ip 192.168.220.138 -target dc01.ignite.local -user badpc$ -pass 密码@3 create
我们创建一个机器帐户(例如badpc$),因为机器帐户可以使用机器模板注册证书,其中包括PKINIT 所需的客户端身份验证EKU。
certipy-ad req -target dc01.ignite.local -u badpc$ -p 密码@3 -dc-ip 192.168.220.138 -template Machine -ca ignite-DC01-CA
这为我们提供了一个合法的、由CA 签名的证书,可用于身份验证。
certipy-ad cert -pfx badpc.pfx -nokey -out 'badpc.crt
我们关心的关键字段有:
发行人名称序列号openssl x509 -in badpc.crt -noout -text
这两部分对于构建有效的altSecurityIdentities X509 映射字符串至关重要。
这可以避免覆盖合法映射或与合法映射发生冲突。
python x509_issuer_serial_number_format.py
Note: 我们使用此工具生成流氓证书的映射字符串(来自badpc$),然后将其注入目标用户的(raj) altSecurityIdentities 属性。
目录
概述ESC14 攻击ESC14先决条件实验室设置枚举利用通过altSecurityIdentities 滥用弱显式证书映射通过Evil-WinRM 进行后利用完整的SYSTEM Shell
缓解措施
ESC14 攻击概述
ESC14 是一种强大的后利用技术,针对显式证书映射(altSecurityIdentities) 配置较弱或监控不善的Active Directory 证书服务(AD CS) 环境。ESC14 不像ESC1 或ESC8 等攻击那样依赖UPN 映射,而是滥用证书和AD 用户帐户之间的直接手动映射。通过将伪造的映射注入目标用户(例如raj)的altSecurityIdentities 属性,攻击者可以欺骗Active Directory 接受与Kerberos 身份验证映射匹配的任何证书。
当:
攻击者可以创建机器帐户或获取具有可控字段的证书。
该环境使用发行者-主题或仅主题映射(弱选项)。
在此场景中,我们将展示如何从低特权用户(sanjeet) 升级到全域攻击,通过证书滥用、显式映射以及最终提取管理员凭据。
ESC14的工作原理
ESC14 技术通常涉及以下步骤:显式映射漏洞- 通过编辑altSecurityIdentities,我们直接将证书绑定到另一个帐户。
机器证书滥用– 利用机器证书有助于绕过基于UPN 的控制。
PKINIT 身份验证流程– AD 信任映射来颁发票证,从而实现基于票证的模拟。
权限升级至管理员– 一旦可以进行身份验证,DCSync 和哈希提取技术就变得可行。
总之,ESC14 利用错误配置的显式证书映射来模拟高权限帐户。通过更改altSecurityIdentities 属性并使用计算机证书,攻击者可以通过PKINIT 获取Kerberos 票证,从而通过DCSync 等工具实现权限升级,最终获得域管理员访问权限。这强调了保护证书映射和实施强有力的PKI 实践的必要性。
先决条件
Windows Server 2019 作为支持PKINIT 的Active Directory域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
工具: Certipy、OpenSSL、Ldeep、用于altSecurityIdentities 操作的Python 脚本、Impacket 和Evil-WinRM
实验室设置
在本文中,我们将跳过完整的Active Directory 和CA 设置说明,假设您已经有了:一个工作域(在我们的例子中是ignite.local)
在我们的例子中,域控制器位于168.220.138
配置的证书颁发机构(启用机器模板)
两个域用户(根据您的情况可能有所不同):
raj(目标)sanjeet(攻击者)我们将纯粹关注利用流程,从用户枚举到完全域管理员接管。
枚举利用
通过 altSecurityIdentities 滥用弱显式证书映射
确认现有用户帐户
开始之前,验证raj 和sanjeet 是否存在于域:中网络用户raj
首先,我们验证域中存在raj(目标)和sanjeet(攻击者)。这确保了我们的受害者和攻击者的身份都可以用于即将到来的滥用。
授予 raj 对 sanjeet 的完全控制权
在Active Directory 用户和计算机(ADUC) 中:打开raj → 属性→ 安全性→ 高级添加完全控制的sanjeet(可能因您的情况而异)
此步骤是ESC14 的关键先决条件。如果没有对raj 属性的写访问权限,攻击者(sanjeet) 就无法操纵altSecurityIdentities 字段。
创建一个流氓机器帐户 (badpc$)
为了获得受信任的PKINIT 证书,我们创建一个计算机帐户(例如badpc$)来注册机器身份验证证书。certipy-ad account -u sanjeet -p 密码@1 -dc-ip 192.168.220.138 -target dc01.ignite.local -user badpc$ -pass 密码@3 create
我们创建一个机器帐户(例如badpc$),因为机器帐户可以使用机器模板注册证书,其中包括PKINIT 所需的客户端身份验证EKU。
请求机器帐户的证书
我们使用机器模板请求badpc$ 的证书certipy-ad req -target dc01.ignite.local -u badpc$ -p 密码@3 -dc-ip 192.168.220.138 -template Machine -ca ignite-DC01-CA
这为我们提供了一个合法的、由CA 签名的证书,可用于身份验证。
提取并分析公共证书
我们导出证书的公共部分并使用OpenSSL 检查它。certipy-ad cert -pfx badpc.pfx -nokey -out 'badpc.crt
我们关心的关键字段有:
发行人名称序列号openssl x509 -in badpc.crt -noout -text
这两部分对于构建有效的altSecurityIdentities X509 映射字符串至关重要。
检查目标的现有映射
在注入我们的映射之前,我们检查raj 是否已经有任何基于证书的登录映射sldeep ldap -u sanjeet -d ignite.local -p Password@1 -s ldap://192.168.220.138 search '(samaccountname=raj)' altSecurityIdentities这可以避免覆盖合法映射或与合法映射发生冲突。
生成正确的映射格式(发行者+序列号)
此自定义Python 工具生成以下格式的精确X509 映射字符串:
python x509_issuer_serial_number_format.py
Note: 我们使用此工具生成流氓证书的映射字符串(来自badpc$),然后将其注入目标用户的(raj) altSecurityIdentities 属性。