Administrator - HackTheBox
Máquina Windows nivel Medium de la plataforma HackTheBox que forma parte del path CPTS.

Como de costumbre en todo proceso de pentesting comenzaremos realizando la fase de reconocimiento, que es de las más importantes de cara a las siguientes fases.
Es importante destacar que en este CTF contamos con credenciales iniciales como en los procesos de pentesting Windows reales.
Olivia / ichliebedich
Enumeración
Reconocimiento de Puertos
Comenzaremos realizando la enumeración de puertos y servicios en el endpoint utilizando la herramienta nmap.
Disponemos de un gran listado de puertos, pero desconocemos que servicios se ejecutan en cada uno, por lo que lanzaremos un escaneo más avanzado que ejecuta los scripts por defecto de NSE (Nmap Scripting Engine).
Estos scripts harán comprobaciones automáticas como:
Detección de vulnerabilidades básicas
Enumeración de servicios
Información adicional (usuarios, versiones, configuraciones, etc.)
Y además ejecutaremos la detección de versiones de servicios para intentar identificar qué software y versión está corriendo en cada puerto abierto.
Analizamos detenidamente la información relevante obtenida del escaneo.
FTP
Kerberos (Puerto 88)
LDAP
WINRM
RPC
Dominio
administrator.htb
Añadimos el dominio al archivo hosts.
echo "10.129.11.184 administrator.htb" | sudo tee -a /etc/hosts
echo "10.129.11.184 dc.administrator.htb" | sudo tee -a /etc/hosts
Importante generar el archivo krb5.conf, se puede hacer con netexec con
--generate-krb5-file krb5.conf
Con esta información ya podemos continuar con la enumeración.
Validación de Credenciales
Disponemos de credenciales iniciales, por lo que primero debemos validarlas para averiguar cómo y para qué podemos usarlas.
En primer lugar las validaré para el protocolo SMB y LDAP.
Las credenciales son válidas pero no hay recursos smb que nos puedan servir, por lo que pruebo a validar las credenciales para LDAP.
También son válidas, por lo que directamente voy a lanzar bloodhound para realizar una enumeración más exhaustiva.
Enumeración con Bloodhound
Lanzamos bloodhound-python para obtener los archivos json necesarios para subir a BloodHound CE.
bloodhound-python -c all -d administrator.htb -u olivia -p 'ichliebedich' -ns 10.129.11.184
Subimos los archivos a BloodHound CE.
Comenzamos enumerando por el usuario olivia, lo definimos como owned en Bloodhound y buscamos por Outbound Object Control (control saliente sobre objetos) que nos servirá para entender qué objetos de Active Directory puede controlar un usuario o grupo hacia afuera.
El usuario Olivia posee permisos GenericAll sobre el usuario Michael.
GenericAll - Usuario Michael
Si un usuario o grupo tiene GenericAll sobre otro objeto (usuario, grupo, equipo, etc.), significa que puede hacer literalmente cualquier acción sobre él.
- GenericAll -> control total sobre un objeto.
Podemos realizar diferentes acciones al disponer de este privilegio.
Efectuar un ataque kerberoasting dirigido y obtener el hash del usuario Michael.
Forzar el cambio de contraseña del usuario.
Ataque Shadow Credential.
- En este caso vamos a realizar el ataque kerberoasting para obtener el hash del usuario Michael.
python3 targetedKerberoast.py -v -d 'administrator.htb' -u 'olivia' -p 'ichliebedich'
Guardamos el hash en un archivo y lo intentamos craqueamos con hashcat sin éxito, por lo que solo nos queda modificar la contraseña del usuario.
net rpc password "michael" "P@ssw0rd1234" -U "DOMAIN"/"olivia"%"ichliebedich" -S "dc.administrator.htb"
Y después validamos las credenciales.
Michael posee acceso a winrm, pero si volvemos a bloodhound veremos lo siguiente:
El usuario Michael posee el privilegio ForceChangePassword sobre el usuario Benjamin, por lo que puede modificar su contraseña.
ForceChangePassword - Usuario Benjamin
net rpc password "benjamin" "P@ssw0rd1234" -U "administrator.htb"/"michael"%"P@ssw0rd1234" -S "dc.administrator.htb"
Modificamos su contraseña y validamos sus credenciales utilizando netexec en diferentes protocolos, entre ellos FTP, ya que el puerto está abierto.
Podemos ver que las credenciales son correctas para ftp, así que me conecto.
Dentro encuentro un archivo llamado Backup.psafe3, que me descargo en mi máquina.
La extensión .psafe3 es un formato de archivo usado por el gestor de contraseñas Password Safe.
Para poder acceder a las credenciales que almacena este archivo primero debemos obtener su hash y después craquearlo para conseguir la contraseña maestra.
Por suerte disponemos de la utilidad pwsafe2john de John The Ripper.
Ahora solo debemos craquear el hash con John.
john --wordlist=/usr/share/wordlists/rockyou.txt hash-psafe
Obtenemos la contraseña maestra, ahora debemos importar el archivo al gestor Password Safe y ver su contenido.
Anotamos las credenciales de cada usuario y sus nombres y los validamos de nuevo con netxec.
GenericWrite - Usuario Ethan
Nos conectamos vía WINRM y leemos la flag de user.
Si volvemos otra vez a bloodhound y partimos desde el usuario emily, lo definimos como owned en Bloodhound y buscamos por Outbound Object Control (control saliente sobre objetos) que nos servirá para entender qué objetos de Active Directory puede controlar un usuario o grupo hacia afuera.
Vemos que el usuario emily posee el privilegio GenericWrite sobre el usaurio ethan.
Por lo tanto, podemos realizar un ataque kerberoasting con la herramienta targetedkerberoasting y obtener su hash.
Esta herramienta busca usuarios con SPN (Service Principal Name)
Si un usuario tiene un SPN, se puede solicitar un ticket Kerberos asociado y extraer sus hashes.
Si un usuario NO tiene SPN, normalmente no sería vulnerable, peor targetedkerberoast hace lo siguiente:
TargetedKerberoast intenta añadir un SPN temporal (si tiene permisos).
Solicita el ticket Kerberos → obtiene el hash.
Elimina el SPN para no dejar rastro evidente.
python3 targetedKerberoast.py -v -d 'administrator.htb' -u 'emily' -p 'PASSWORD'
Guardamos el hash en un archivo y lo craqueamos con hashcat.
hashcat -m 13100 hash.hash /usr/share/wordlists/rockyou.txt
Tras craquear el hash obtenemos la contraseña del usuario ethan, y para averiguar cuál será el siguiente paso, volvemos a Bloodhound.
Escalada de Privilegios
Volvemos otra vez a bloodhound y partimos desde el usuario ethan, lo definimos como owned en Bloodhound y buscamos por Outbound Object Control (control saliente sobre objetos) que nos servirá para entender qué objetos de Active Directory puede controlar un usuario o grupo hacia afuera.
El privilegio GetChangesAll permite realizar un ataque DCSync para obtener el hash de la contraseña de cualquier usuario utilizando el script de ejemplo secretsdump.py de Impacket.
Es decir, podemos realizar un volcado de todos los hashes.
impacket-secretsdump 'administrator.htb'/'ethan':'PASSWORD'@'dc.administrator.htb'
Obtenemos el hash NTLM del usuario Administrador que podemos utilizar para conectarnos a través de winrm y obtener la flag final.




