8
月
在社区成长 8 月
LEVEL 50
100 XP
ESC10 是Active Directory 证书服务(ADCS) 中强大的后利用技术,可让攻击者在不知道密码的情况下以任何用户(甚至域管理员)身份进行身份验证。它利用了两个关键弱点: 弱证书映射实施和影子(自定义证书登录)。与传统攻击不同,ESC10 滥用PKI 信任和AD 灵活性,使其在企业环境中具有隐秘性、持久性和经常被忽视的凭据。
以管理员身份使用certipy LDAP Shell 进行利用后横向移动权限提升
使用Evil-Winrm 横向移动权限升级
缓解措施
ESC10 利用AD CS 和Kerberos 基于证书的身份验证(PKINIT) 中的弱点:
弱证书映射强制(StrongCertificateBindingEnforcement=0) 禁用强绑定时,AD 仅依赖于证书的用户主体名称(UPN),而忽略安全标识符(SID)。
这允许攻击者欺骗特权用户(例如域管理员)的UPN 并使用伪造的证书获得未经授权的访问。
通过msDS-KeyCredentialLink 写入访问的影子凭据如果攻击者具有用户帐户上此属性的写入权限,他们可以注入基于自定义证书的凭据。
这使得证书传递攻击和持久的无密码访问成为可能。
通过帐户操纵进行UPN 欺骗利用GenericWrite 权限,攻击者可以更改受控帐户或目标帐户的UPN 来冒充其他用户。
与弱绑定相结合,这允许证书注册和Kerberos 身份验证作为欺骗身份。
该攻击链不需要密码破解,不需要内存注入,并且留下最少的取证痕迹。
攻击者通过任何初始访问方法(例如网络钓鱼、暴力破解、凭证转储)获得对低特权用户帐户的控制。
攻击者发现检查注册表项会削弱域基于证书的身份验证信任模型:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesKdcStrongCertificateBindingEnforcement
如果将此值设置为0,则在Kerberos 身份验证(常见的默认或旧设置)期间,域不会强制执行证书和用户帐户之间的强绑定。
使用另一个用户对象(例如管理员)的GenericWrite 权限,攻击者修改受控帐户的用户主体名称(UPN) 以匹配目标(例如[email protected])。
然后,攻击者使用任何支持注册的证书模板以该目标用户的名义请求证书。
通过此伪造的证书,攻击者可以作为特权用户进行身份验证并获得完全的域访问权限。
即使不存在特定的错误配置模板,只要存在任何可用的证书模板并且域不强制执行强证书绑定,这种攻击就会起作用。
ESC9: 依赖于特定的易受攻击的证书模板,其中启用了ENROLLEE_SUPPLIES_SUBJECT,并且攻击者对另一个用户对象具有GenericWrite。
ESC10: 通过消除证书模板限制来推广该技术,转而利用证书到用户绑定的弱执行(即StrongCertificateBindingEnforcement=0),从而显着增加攻击面。
因此,ESC10 是ESC9 的更通用和更危险的演变,允许攻击者仅控制一个用户帐户和最小权限来模拟域中的任何用户,包括域管理员。
本文将介绍完整的ESC10 漏洞利用链,包括枚举、证书滥用和实时shell 访问,同时保持隐蔽性和清晰度。
要成功执行此ESC10 攻击,目标Active Directory 环境必须满足一些条件:
证书映射强制必须设置为弱或禁用。
攻击者(raj) 必须对目标用户帐户(sanjeet) 具有写入权限(例如GenericWrite、WriteProperty)才能操纵UPN 和msDS-KeyCredentialLink 等属性。
低特权证书模板(如raj)必须可供注册。
这些情况在审计不足的ADCS 环境中非常常见。
域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
Tools: Evil-Winrm、certipy-ad
0=禁用— 证书映射仅基于UPN,并且跳过SID 验证。此设置使该域完全可以被ESC10 和其他证书滥用攻击利用。
1=兼容模式— 尽可能尝试强制执行SID 绑定,但如果缺少SID,则回退到UPN 匹配。仍然部分脆弱。
2=严格— 需要SID 映射,有效缓解ESC10。
如果该值设置为0,则域使用弱证书映射,这意味着我们可以欺骗UPN 或将影子凭据注入目标帐户并成功进行身份验证,而无需用户密码。
接下来,我们将通过让攻击者(raj) 控制代理帐户(sanjeet) 以在证书模拟链中使用来做好准备。
为什么这很重要: 有了这些权利,raj 就获得了以下能力:
使用msDS-KeyCredentialLink 将伪造的证书(影子凭证)注入sanjeet
修改sanjeet 的UPN 以匹配高权限用户(例如[email protected])的UPN。
控制证书映射的行为方式,尤其是在启用弱强制执行(StrongCertificateBindingEnforcement=0) 时。
此步骤本质上将sanjeet 转变为基于证书的模拟代理,为任何域用户的无密码身份验证奠定了基础,这是执行ESC10 攻击链的关键一步。
certipy-ad 影子自动-u r
目录
ESC10 攻击概述将ESC10ESC10 作为ESC9 扩展的工作原理先决条件实验室设置枚举利用通过影子凭证进行弱UPN 映射以管理员身份使用certipy LDAP Shell 进行利用后横向移动权限提升
使用Evil-Winrm 横向移动权限升级
缓解措施
ESC10 攻击概述
ESC10 是ESC9 攻击的强大变体,两者都会导致整个域受到损害。虽然ESC9 要求攻击者识别配置错误的证书模板和他们可以修改的帐户(通过GenericWrite),但它仅限于具有特定危险配置的模板(例如ENROLLEE_SUPPLIES_SUBJECT)。相比之下,ESC10 完全消除了这一限制,使其更加灵活且适用范围更广。它利用系统级信任假设,而不是仅仅依赖于特定的证书模板属性。ESC10 利用AD CS 和Kerberos 基于证书的身份验证(PKINIT) 中的弱点:
弱证书映射强制(StrongCertificateBindingEnforcement=0) 禁用强绑定时,AD 仅依赖于证书的用户主体名称(UPN),而忽略安全标识符(SID)。
这允许攻击者欺骗特权用户(例如域管理员)的UPN 并使用伪造的证书获得未经授权的访问。
通过msDS-KeyCredentialLink 写入访问的影子凭据如果攻击者具有用户帐户上此属性的写入权限,他们可以注入基于自定义证书的凭据。
这使得证书传递攻击和持久的无密码访问成为可能。
通过帐户操纵进行UPN 欺骗利用GenericWrite 权限,攻击者可以更改受控帐户或目标帐户的UPN 来冒充其他用户。
与弱绑定相结合,这允许证书注册和Kerberos 身份验证作为欺骗身份。
该攻击链不需要密码破解,不需要内存注入,并且留下最少的取证痕迹。
ESC10的工作原理
ESC10 技术通常涉及以下步骤:攻击者通过任何初始访问方法(例如网络钓鱼、暴力破解、凭证转储)获得对低特权用户帐户的控制。
攻击者发现检查注册表项会削弱域基于证书的身份验证信任模型:
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesKdcStrongCertificateBindingEnforcement
如果将此值设置为0,则在Kerberos 身份验证(常见的默认或旧设置)期间,域不会强制执行证书和用户帐户之间的强绑定。
使用另一个用户对象(例如管理员)的GenericWrite 权限,攻击者修改受控帐户的用户主体名称(UPN) 以匹配目标(例如[email protected])。
然后,攻击者使用任何支持注册的证书模板以该目标用户的名义请求证书。
通过此伪造的证书,攻击者可以作为特权用户进行身份验证并获得完全的域访问权限。
即使不存在特定的错误配置模板,只要存在任何可用的证书模板并且域不强制执行强证书绑定,这种攻击就会起作用。
ESC10 作为 ESC9 的扩展
ESC10 扩展了ESC9: 中引入的相同核心滥用路径ESC9: 依赖于特定的易受攻击的证书模板,其中启用了ENROLLEE_SUPPLIES_SUBJECT,并且攻击者对另一个用户对象具有GenericWrite。
ESC10: 通过消除证书模板限制来推广该技术,转而利用证书到用户绑定的弱执行(即StrongCertificateBindingEnforcement=0),从而显着增加攻击面。
因此,ESC10 是ESC9 的更通用和更危险的演变,允许攻击者仅控制一个用户帐户和最小权限来模拟域中的任何用户,包括域管理员。
本文将介绍完整的ESC10 漏洞利用链,包括枚举、证书滥用和实时shell 访问,同时保持隐蔽性和清晰度。
要成功执行此ESC10 攻击,目标Active Directory 环境必须满足一些条件:
证书映射强制必须设置为弱或禁用。
攻击者(raj) 必须对目标用户帐户(sanjeet) 具有写入权限(例如GenericWrite、WriteProperty)才能操纵UPN 和msDS-KeyCredentialLink 等属性。
低特权证书模板(如raj)必须可供注册。
这些情况在审计不足的ADCS 环境中非常常见。
先决条件
Windows Server 2019 作为支持PKINIT 的Active Directory域必须配置Active Directory 证书服务和证书颁发机构。
Kali Linux 包含各种工具
Tools: Evil-Winrm、certipy-ad
实验室设置
要在实验室中模拟ESC10 攻击,首先在域控制器上设置StrongCertificateBindingEnforcement=0 以允许弱证书映射,然后将低特权帐户(sanjeet) 上的GenericWrite 访问权限授予攻击者帐户(raj),以启用影子凭据注入和UPN 操作。修改证书映射以允许弱执行
要启用ESC10 可利用的条件,或验证环境是否存在漏洞,请检查域控制器上的以下注册表设置: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesKdc
0=禁用— 证书映射仅基于UPN,并且跳过SID 验证。此设置使该域完全可以被ESC10 和其他证书滥用攻击利用。
1=兼容模式— 尽可能尝试强制执行SID 绑定,但如果缺少SID,则回退到UPN 匹配。仍然部分脆弱。
2=严格— 需要SID 映射,有效缓解ESC10。
如果该值设置为0,则域使用弱证书映射,这意味着我们可以欺骗UPN 或将影子凭据注入目标帐户并成功进行身份验证,而无需用户密码。
接下来,我们将通过让攻击者(raj) 控制代理帐户(sanjeet) 以在证书模拟链中使用来做好准备。
授予对代理帐户的写入权限
要设置ESC10,请将目标代理帐户(例如sanjeet)上的GenericWrite 或WriteProperty 权限分配给攻击者控制的帐户(raj)。这可以使用Active Directory 用户和计算机(启用高级功能)、Active Directory ACL 编辑器或通过PowerShell 来完成。
为什么这很重要: 有了这些权利,raj 就获得了以下能力:
使用msDS-KeyCredentialLink 将伪造的证书(影子凭证)注入sanjeet
修改sanjeet 的UPN 以匹配高权限用户(例如[email protected])的UPN。
控制证书映射的行为方式,尤其是在启用弱强制执行(StrongCertificateBindingEnforcement=0) 时。
此步骤本质上将sanjeet 转变为基于证书的模拟代理,为任何域用户的无密码身份验证奠定了基础,这是执行ESC10 攻击链的关键一步。
枚举利用
通过影子凭证进行弱 UPN 映射
这允许我们将伪造的证书注入目标帐户的msDS-KeyCredentialLink 属性并以该用户身份进行身份验证,在StrongCertificateBindingEnforcement=0 时利用弱UPN 到SID 映射。让我们继续添加并使用影子凭证(自动模式)
使用Certipy,执行一行代码将影子凭证注入sanjeet 帐户并立即进行身份验证:certipy-ad 影子自动-u r