HTB - Eighteen Writeup

HTB - Eighteen Writeup

EnchanterW Lv3

[HTB-Eighteen] Writeup

机器名称 [Eighteen]
IP 地址 10.10.11.95
操作系统 Windows
难度 Easy
发布日期 11-16-2025
关键词 [MSSQL, Active Directory, Kerberoasting, Tunneling, DMSA]

1. Reconnaissance (信息收集)

Nmap 扫描

点击查看 Nmap 详细扫描结果
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
Nmap scan report for 10.129.132.84
Host is up (0.45s latency).
PORT STATE SERVICE VERSION
80/tcp open http Microsoft IIS httpd 10.0
|_http-server-header: Microsoft-IIS/10.0
|_http-title: Did not follow redirect to [http://eighteen.htb/](http://eighteen.htb/)
1433/tcp open ms-sql-s Microsoft SQL Server 2022 16.00.1000.00; RTM
| ms-sql-info:
| 10.129.132.84:1433:
| Version:
| name: Microsoft SQL Server 2022 RTM
| number: 16.00.1000.00
| Product: Microsoft SQL Server 2022
| Service pack level: RTM
| Post-SP patches applied: false
|_ TCP port: 1433
| ssl-cert: Subject: commonName=SSL_Self_Signed_Fallback
| Not valid before: 2025-11-16T09:50:57
|_Not valid after: 2055-11-16T09:50:57
|_ssl-date: 2025-11-16T13:40:24+00:00; +7h00m02s from scanner time.
| ms-sql-ntlm-info:
| 10.129.132.84:1433:
| Target_Name: EIGHTEEN
| NetBIOS_Domain_Name: EIGHTEEN
| NetBIOS_Computer_Name: DC01
| DNS_Domain_Name: eighteen.htb
| DNS_Computer_Name: DC01.eighteen.htb
| DNS_Tree_Name: eighteen.htb
|_ Product_Version: 10.0.26100
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
6666/tcp filtered irc
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running (JUST GUESSING): Microsoft Windows 2022|2012|2016 (88%)
OS CPE: cpe:/o:microsoft:windows_server_2022 cpe:/o:microsoft:windows_server_2012:r2 cpe:/o:microsoft:windows_server_2016
Aggressive OS guesses: Microsoft Windows Server 2022 (88%), Microsoft Windows Server 2012 R2 (85%), Microsoft Windows Server 2016 (85%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: 7h00m01s, deviation: 0s, median: 7h00m00s

TRACEROUTE (using proto 1/icmp)
HOP RTT ADDRESS
1 236.09 ms 10.10.16.1
2 487.15 ms 10.129.132.84

OS and Service detection performed. Please report any incorrect results at [https://nmap.org/submit/](https://nmap.org/submit/) .
# Nmap done at Sun Nov 16 01:40:22 2025 -- 1 IP address (1 host up) scanned in 31.51 seconds

Note: 1433 端口开着,对应 MSSQL 服务,我们初始靶机提供了一组账号密码可能就是用在这里。

2. Enumeration (服务枚举)

Web Enumeration (Port 80)

image-20251120213859761

  • 技术栈识别 (Wappalyzer): IIS
  • 目录扫描:
点击查看 Gobuster 扫描结果

Bash

1
2
3
4
5
6
7
8
gobuster dir -u [http://eighteen.htb](http://eighteen.htb) -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,zip,js
———————————————————————————————————————————————————————————————————————————————————————————————————————————————
/login (Status: 200) [Size: 1961]
/register (Status: 200) [Size: 2421]
/features (Status: 200) [Size: 2822]
/admin (Status: 302) [Size: 199] [--> /login]
/logout (Status: 302) [Size: 189] [--> /]
/dashboard (Status: 302) [Size: 199] [--> /login]
  • 发现: 一个预算管理的网页,有一个 admin 面板但是需要登录,允许 user 注册。没有 SQL 注入的点位,鉴于我有 MSSQL 的凭据的话我想要先看一下 MSSQL。

Service Enumeration

利用靶机提供的凭据登录一下:

image-20251120214721662

发现了 financial_planner 这个库名,但是 kevin 没有权限。尝试去看看有没有 impersonate 的可能。

image-20251120214938331

发现可以切换到 appdev,并且这个用户能够访问 financial_planner 库。用 PayloadAllTheThing 的命令列出一下数据库的表名,发现有一个 user 表,查出来看看有什么。

image-20251120215939002

MSSQL Injection CheatSheet

发现有一个 admin 的用户以及一个 passhash:

1
pbkdf2:sha256:600000$AMtzteQIG7yAbZIa$0673ad90a0b4afb19d662336f0fce3a9edd0b7b19193717be28ce4d66c887133

这个 hash 是 10900 | PBKDF2-HMAC-SHA256,但是格式并不正确,需要将后半部分转换成 base64,用脚本转换一下然后用 hashcat 来破解一下。

image-20251120220642189

PBKDF2 Hash Converter

3. Initial Foothold (获取立足点)

漏洞利用 (Exploitation)

这下子我们有了一个密码,但是没有用户名,怎么办?nxc (NetExec) 的 mssql 模块也是可以 rid-brute 的,跑一下 rid-brute 拿到一个 userlist,而后用 userlist 进行密码喷洒。

image-20251120220950185

得到了一个可以 WinRM 登录的用户 adam.scott

image-20251120221959372

image-20251120223110867

先上 SharpHound 看一眼 AD 有什么。

image-20251120225021323

似乎没什么东西,当前用户什么都干不了。先把靶机的 LDAP 代理过来看看吧。

4. Privilege Escalation (权限提升)

Information Gathering (内部侦察)

通过 BloodHound 枚举 Writable 权限:

image-20251120225934775

可以发现我们拥有对 Staff 的 create_child 权限。再详细看看。

image-20251120233338919

可以看到有 msDS-DelegatedManagedServiceAccount: CREATE_CHILD,查阅资料得知这个可以利用 BadSuccessor 攻击。

BadSuccessor?

DMSA (Delegated Managed Service Account) 是 Windows Server 2025(以及部分 Server 2022 更新)引入的概念。它的核心目的是实现 “无缝迁移”“身份解耦”

  • 设计目标:让服务账号不再死板地绑定在某台机器上,并且允许旧账号平滑过渡到新账号。
  • 核心特性
    • 短期凭据:DMSA 使用基于 Kerberos 的短期凭据,而不是长期静态密码。
    • 身份继承 (Identity Inheritance):这是万恶之源。为了让旧服务无缝切换到新服务,DMSA 允许被配置为“继承”另一个账户(Predecessor/Legacy Account)的身份和权限。

BadSuccessor 利用了这种迁移流。通常创建 dMSA 以替换现有旧服务帐户。若要实现无缝转换,dMSA 可以通过执行迁移过程来“继承”旧帐户的权限。

Exploitation (提权过程)

参考这两篇文章来进行利用:

Akamai Research Kreep.in - BadSuccessor

首先上传 BadSuccessor 上去进行利用。

image-20251120235729871

当我想继续按照上面利用的时候产生了这个报错,在这个地方卡了我很多时间。

Error Encountered:

PowerShell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*Evil-WinRM* PS C:\programdata> ./Rubeus.exe dump /luid:0xf12ab7 /service:krbtgt /nowrap
Action: Dump Kerberos Ticket Data (Current User)
[X] You need to be in high integrity for the actions specified.
[!] Unhandled Rubeus exception:
System.NullReferenceException: Object reference not set to an instance of an object.
at Rubeus.LSA.DisplaySessionCreds(List`1 sessionCreds, TicketDisplayFormat displayFormat, Boolean showAll)
at Rubeus.Commands.Dump.Execute(Dictionary`2 arguments)
at Rubeus.Domain.CommandCollection.ExecuteCommand(String commandName, Dictionary`2 arguments)
at Rubeus.Program.MainExecute(String commandName, Dictionary`2 parsedArgs)
*Evil-WinRM* PS C:\programdata> ./r.exe triage
Action: Triage Kerberos Tickets (Current User)
[*] Current LUID : 0xf12ab7
---------------------------------------
| LUID | UserName | Service | EndTime |
---------------------------------------
---------------------------------------

我们已经创建了一个名为 enc_dmsa 的账户并将它设置成为继承 admin 的 badsuccessor 的利用状态,我们下一步手动请求它的 TGS。

image-20251121001551560

这个票据就具有和 administrator 相同的权限了,所以 secretsdump 出来 hash。

image-20251121002254410

接下来以 admin 登录就能获取到 root.txt。

5. Conclusion (总结与复盘)

攻击路径回顾

  1. 端口探测与服务发现: 通过 Nmap 扫描发现 1433 (MSSQL)80 (Web)5985 (WinRM) 端口。
  2. 数据库渗透与哈希破解: 使用初始凭据登录 MSSQL,利用 Impersonation (用户模拟) 提权至 appdev 用户。获取 Web Admin 的 PBKDF2 哈希并破解。
  3. 横向移动: 利用 NetExec 进行 RID Brute-force 枚举域用户列表。配合破解得到的密码进行 Password Spraying,获取 adam.scott 权限。
  4. 域内权限分析: 发现当前用户在 Staff 容器上拥有 CreateChild 权限,且具备操作 DMSA 的相关属性。
  5. DMSA 漏洞提权: 利用 BadSuccessor 创建恶意的 dMSA 账户并“继承”域管权限。
  6. 最终提权: 导出域控制器哈希(DCSync),获取 Administrator 权限。

知识点 (Key Learnings)

知识点总结

  • MSSQL Impersonation (用户模拟): MSSQL 中的 EXECUTE AS 语句允许用户模拟其他数据库用户。如果低权限数据库账户被授予了高权限账户的 IMPERSONATE 权限,攻击者可以在数据库内部横向移动甚至提权。
  • 非标准 Hash 格式处理: Web 框架(如 Flask/Werkzeug)生成的 PBKDF2 哈希格式可能与 Hashcat 的标准格式不同。在破解失败时,应检查哈希各字段的编码格式,必要时使用脚本进行转换(Base64 解码/编码)。
  • RID Brute-force (RID 爆破): 在拥有有效凭据但不知道有效用户名列表时,可以通过枚举 SID 的最后一部分(RID)来反查对应的用户名。
  • DMSA (Delegated Managed Service Account) 安全风险: 利用 msDS-DelegatedManagedServiceAccount 属性和 CreateChild 权限,创建一个新的 dMSA 并将其“前任”设置为高权限账户。由于逻辑缺陷,系统会允许这个新账户获取旧账户的权限凭据(TGS)。
    • 关键工具: BadSuccessor, Rubeus, impacket-secretsdump
  • Title: HTB - Eighteen Writeup
  • Author: EnchanterW
  • Created at : 2025-11-21 01:00:00
  • Updated at : 2025-11-21 01:17:53
  • Link: https://enchanter-w.github.io/2025/11/21/HTB_eighteen/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments