在这篇博客中,我将继续探索针对我的 Active Directory 实验室的攻击。在使用 CrackMapExec 获得初始访问权限后,我深入研究了使用 BloodHound 进行 AD 枚举、使用 Kerbrute 进行暴力破解以及使用 Impacket 利用错误配置。我还解释了使用 GetUserSPN 的 Kerberoasting,并解释了使用 krbtgt 帐户的传递哈希 (PTH) 攻击和 DCSync。请注意,这是为了教育目的,我的 AD 环境故意存在漏洞,模拟了一些最糟糕的配置来演示这些攻击。这篇博客只是我在 AD 实验室设置和攻击过程中探索的内容的反映,而不是全面的分步演练。在下一篇博客中,我将重点介绍如何使用 EDR、防火墙等工具防御这些类型的攻击。
工具文档:
-
CrackMapExec:一种用于网络枚举和横向移动的后利用工具,有助于在获得初始访问权限后发现共享、用户和密码。
-
BloodHound:一种用于 Active Directory 枚举和权限提升的工具,可映射攻击路径并确定指向域管理员的攻击媒介。
-
Kerbrute:一种通过 Kerberos 身份验证发现有效用户名和密码的暴力破解工具,可用于测试登录凭据。
-
Impacket:一套 Python 工具,用于利用 SMB 和 MS-RPC 等网络协议执行传递哈希 (PTH) 和 DCSync 等攻击。
-
GetUserSPNs.py:Impacket提供 的一种工具,用于从 Active Directory 中提取服务主体名称 (SPN) 哈希,以便通过 Kerberoasting 进行离线破解。
-
传递哈希 (PTH):一种允许攻击者使用受损的 NTLM 哈希而不是纯文本密码向远程系统进行身份验证的技术。
攻击者机器设置:
对于攻击者的机器,我们可以使用我们自己的本地 Kali VM 并允许与 NSG 中的 DC 机器进行通信,但我已在 Azure 中创建了一个单独的 Kali VM,并通过安装 xrdp 将其 RDP 连接到它以提高速度。我们可以更改 Kali 机器上的 DNS 设置以指向 DC,模拟在网络内部(内部渗透测试 — 不是吗 :))。
BloodHound设置:
现在,从 BloodHound 开始,正如我们在上一篇博客中已经介绍过的域管理员权限,您可以安装 BloodHound-Python,以便暴力破解期间获得的凭据可用于映射 AD 环境。这有助于了解基础设施并相应地提升权限。
下载文件
通过将用户、计算机、域、组等下载为 JSON 文件,我们可以将它们上传到使用 Neo4j 控制台创建的 localhost BloodHound 网站,以可视化 AD 的结构。我们几乎可以看到 AD 中的所有内容。
外观示例
使用 Kerbrute 进行凭证验证:
在转到 Impacket 之前,我们可以使用 Kerbrute 来验证凭据(可选)。
验证用户名
在 impacket 之前使用 crackmapexec 进行枚举
Impacket 的利用:
现在,博客的主角是 Impacket。它用于利用 SMB 等易受攻击的服务来获取初始访问权限,甚至可以用于窃取数据。我尝试使用“impacket-smbexec”来枚举 SMB 服务。我们还可以使用 WinRM(Windows 远程管理/WSMan)检查可用的服务。以 NT AUTHORITYSystem 帐户身份获得管理员访问权限后,我们可以在域控制器内做任何我们想做的事情,因为我们现在已经加入了 DC 计算机。
域管理员的权限
我考虑从域计算机中窃取一个文本文件,因此我使用 `smbclient` 在 Kali 中创建了一个共享文件夹,并使用它来下载我在 DC 计算机上创建的文本文件。但请注意,要在 DC 上执行此操作,应启用“启用不安全的来宾登录”(正如我所提到的,对于本实验而言,这是配置最错误的 AD 环境之一)。
或者,我们可以在端口 4444 上创建一个 Netcat 监听器,并在 DC 上连接到它以在终端本身中输出文件。
了解凭证转储:
显然,我不擅长红队测试,我这样做只是为了了解密码存储在哪里,攻击者可能潜入哪里进行凭据转储或嗅探,这样我就能更好地了解 Windows、Kali 和 Linux 机器的工作原理并改进检测方法。所以如果我在这个过程中犯了任何新手错误,请原谅我。
攻击者会采用不同的方法来实现其目标,SOC 环境中的关键警报之一是凭据转储/嗅探,因为这些通常是攻击者执行的最终操作。一旦成功登录,他们就会继续执行下一步,例如使用 RMM 进行数据泄露或滥用已知服务,甚至启动勒索软件。
我想分享 Windows 密码存储方法的工作原理,并解释 Kerberos 身份验证和传递哈希 (PTH) 攻击。TLDR:
本地 Windows 身份验证:当用户登录本地 Windows 计算机时,Winlogon 会将凭据发送到 LSASS,后者会检查本地 SAM 数据库中的哈希密码。如果哈希匹配,则用户通过身份验证。SAM 数据库存储本地用户和管理员的 NTLM 或 LM 哈希,确保密码绝不会以明文形式存储。
来自 Microsoft 文档
域身份验证:对于域用户和管理员,该过程类似,但涉及域控制器。LSASS 使用 Kerberos 向 DC 请求身份验证。如果成功,则发出票证授予票证 (TGT),并授予访问权限。然后使用 LDAP 从 Active Directory 获取用户详细信息,包括组成员身份和安全属性。域身份验证依赖 Kerberos 和 NTLM 作为安全访问的后备。NTDS.dit:这是存储所有 Active Directory 数据(包括用户凭据(哈希))的主要数据库文件。
来自微软文档
官方文档:https ://learn.microsoft.com/en-us/windows-server/security/windows-authentication/credentials-processes-in-windows-authentication
票证授予流程:
如果域用户尝试登录,他们会将用户名、服务主体名称 (SPN) 和时间戳作为加密的 AS-REQ 发送。DC 解密 AS-REQ 并将响应连同信息和 TGT(票证授予票证)作为 AS-REP 发送回去。
由于用户是服务的一部分,因此他们需要 TGT 和 SPN 来请求服务的 TGS。例如,要连接到 SQL 服务,我们需要使用 SPN 请求 TGS。
使用 GetUserSPN 进行 Kerberoasting:
在这里,我创建了一个用户并编辑了他们的属性以将其作为服务运行,这样我就可以拥有一个 SPN 来请求 TGS。我使用“GetUserSPNs.py”获取用户的 TGS 并检索哈希。
得到哈希值之后,我们就可以使用Hashcat来破解密码了。
使用TGS密码
传递哈希(PTH)攻击说明:
传递哈希 (PTH) 是一种旧技术,用于获取用户密码的 NTLM 哈希并登录以获取访问权限。这只有在启用 NTLM 身份验证的情况下才能完成,这可能发生在使用依赖 NTLM 或不使用 Kerberos 身份验证的旧系统的企业中。
假设我们有一个具有 NTLM 哈希的本地管理员帐户。通过使用 Mimikatz,我们可以使用 `lsadump::dcsync` 来获取 krbtgt 帐户的哈希。
-
LSADump:一种从 LSA(本地安全机构)转储密码哈希和其他敏感信息(包括缓存的域凭据)的工具。
-
DCSync:攻击者用来从域控制器请求和提取密码哈希(包括 KRBTGT 帐户哈希)的一种技术。
-
KRBTGT:Active Directory 中 Kerberos 使用的服务帐户,其哈希对于 Kerberoasting 或 Golden Ticket 攻击至关重要。
获取 krbtgt 帐户的哈希值后,我们可以执行黄金票证攻击并在域内秘密创建用户,因为这是一个已知的过程。攻击者会执行这些攻击,但进入域并不像看起来那么容易。在这里,我故意让环境变得脆弱,以便进一步探索这一点。
获取票证文件(.kirbi)后,我们可以使用`kerberos::ptt ticket.kirbi`来访问DC上的资源。
结论:
通过执行所有这些操作,我想感谢所有正确配置这些系统以阻止威胁行为者的系统管理员,因为这些是攻击的初始点,易受攻击的错误配置可能导致环境严重损坏。在下一篇博客中,我将重点介绍如何使用 EDR、防火墙或我能想到的任何其他工具来保护 DC 机器,以便我们了解整体层次结构。
现在我们知道了这些凭据转储攻击和 AD 中的错误配置的重要性,以及 Windows DC 机器的底层概念。但相信我,这是一片大海,我们只探索了一桶水。
感谢您的阅读!保持好奇心!干杯。
原文始发于微信公众号(Ots安全):破解 Active Directory — CrackMapExec 传递哈希值:探索 AD 攻击技术
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论