🟠Puppy
En esta ocasión vamos a hacer el writeup de la máquina Puppy de Hack the Box, una máquina Windows Active Directory de dificultad medium.

Información General
Nombre de la máquina:
PuppyIP:
10.10.11.70Sistema operativo:
WindowsDificultad:
🟡 MediaFecha:
26/05/2025
Pista inicial
La plataforma nos proporciona las credenciales iniciales para esta máquina:
Primer acceso
Añadimos la IP 10.10.11.70 a nuestro /etc/hosts y accedemos través del navegador.
Escaneo de puertos
Encontramos multitud de puertos abiertos, lo normal en máquinas Windows. Ademas nos encontramos con que la máquina objetivo es un Domain Controller, por la presencia de los puertos 3268 o 389, reservados para DCs.
Destacan los puertos:
111 (RPC)- Puede contener recursos compartidos o enumerar usuarios445 (SMB)- Recursos compartidos y enumeración5985 (WinRM)- Acceso con EvilWinRM con contraseña88 (Kerberos)- Posible Kerberoasting o AS-REP Roasting
Enumeración inicial
Enumeración con credenciales
Shares - Recursos compartidos
Encontramos un Share DEV interesante, pero no tenemos permisos de lectura, y analizando el resto de Shares no encontramos nada relevante. Seguramente si conseguimos un usuario del grupo DEVELOPERS podríamos acceder.
Usuarios
Añadimos los usuarios encontramos a un archivo valid-users.txt. Probar a volcar tickets Kerberos mediante ASREP-Roasting falla:
Enumeración con Bloodhound
Editar resolv.conf
Bloodhound Python
Análisis con Bloodhound
Encontramos que el usuario levi.james pertenece al grupo HR, que a su ver tiene permisos GenericWrite sobre el grupo DEVELOPERS.

En el grupo DEVELOPERS encontramos 3 miembros:
ant.edwardsadam.silverjamie.williams

Analizando a los 3 usuarios vemos que el usuario ant.edwards es miembro del grupo SENIOR DEVS y este grupo tiene permisos GenericAll sobre el usuario adam.silver

Los usuarios adam.silver y jamie.williams tienen permisos AllExtendedRights sobre el grupo ADMINISTRATORS, del cual es miembro el usuario steph.cooper.


Resumen de Relaciones de Privilegio
Levi.james → HR → DEVELOPERS → SENIOR DEVS → ADMINISTRATORS
✅
levi.james→ HR✅ HR tiene GenericWrite sobre el grupo DEVELOPERS
✅ DEVELOPERS incluye a:
ant.edwardsadam.silverjamie.williams
✅
ant.edwards→ SENIOR DEVS✅ SENIOR DEVS tiene GenericAll sobre
adam.silver✅
adam.silveryjamie.williamstienen AllExtendedRights sobre el grupo ADMINISTRATORS✅
steph.cooper→ ADMINISTRATORS
Ruta de escalada
1. Añadir a levi.james al grupo DEVELOPERS
Confirmación
Ahora tenemos acceso a SENIOR DEVS. Parece que no podemos acceder a ningún equipo, ni cambiar la contraseña de adam.silver directamente, por lo que vamos a volver a numerar los Shares:
Ahora ya si tenemos permisos de lectura en el Share DEV. Vamos a ver que hay en su interior:
Encontramos varios archivos interesantes:
KeePassXC-2.7.9-Win64.msi- Instalador de KeePassXC (gestor de contraseñas). Potencialmente indica que se usa esta app para guardar credenciales.recovery.kdbx- Archivo de base de datos de KeePass
2. Extracción de recovery.kdbx
Nos descargamos el archivo recovery.kdbx y al crackearlo con keepass2john nos da un error que significa que el archivo .kdbx fue creado con una versión más nueva del formato KeePass que keepass2john no soporta aún.
Para crackearlo usaremos la alternativa keepass4brute:
Vamos a abrirlo con keepassxc, ponemos la contraseña y vemos el contenido correctamente:

Ahora creamos un archivo de volcado XML desde Base de datos > Exportar > Archivo XML. Lo guardamos con el nombre keepass_dump.xml.
Ahora con el siguiente script en python haremos el volcado de las contraseñas de keepass_dump.xml:
Bingo! Tenemos las contraseñas. Las guardamos en un archivo de texto y haremos un Password Spraying, ya que tenemos la lista de usuarios válidos.
3. Password Spraying
Bingo! Tenemos la contraseña de ant.edwards:Antman2025!
4. Bloodhound con ant.edwards
Usando estas credenciales volvemos a ejecutar bloodhound-python para obtener más información del dominio. Observamos que ant.edwards pertenece al grupo SENIOR DEVS y tiene permisos GenericAll sobre adam.silver:

Y vemos que adam.silver tiene permisos AllExtendedRights sobre el grupo ADMINISTRATORS:

5. Confirmación de permisos de escritura
6. Cambio de contraseña
Después, cambiaremos la contraseña de Adam con la herramienta rpcclient. Sin embargo, la cuenta está deshabilitada. Por lo tanto, la habilitaremos con la herramienta bloodyAD y luego cambiaremos la contraseña con rpcclient.
Cuenta deshabilitada
Quitar el Account Disable
Cambiar contraseña con rpcclient
Confirmación
User flag
Conexión por EvilWinRM
Escalada de privilegios
En el directorio c:/ nos encontramos un directorio de Backups que podría contener credenciales:
Al descomprimir el zip encontramos un archivo de configuración en XML que contiene las credenciales de steph.cooper!
Confirmación
Conexión por EvilWinRM
Al conectarnos vemos que en el desktop no está la flag, por lo que necesitaremos el hash o contraseña del usuario administrator:
Comprobación de privilegios
A continuación, buscaremos el archivo de la clave maestra (clave de cifrado) y lo copiaremos a nuestra máquina. Después, también obtendremos el archivo blob de credenciales, que contiene las credenciales de usuario cifradas (como contraseñas o tokens).
La clave maestra es una clave secreta que se utiliza para cifrar y descifrar datos con la API de protección de datos (DPAPI). El blob de credenciales contiene las credenciales de usuario protegidas por DPAPI. Utilizaremos estos archivos para descifrar sin conexión las credenciales protegidas por DPAPI mediante el script dpapi.py de Impacket.
Para recuperar los archivos, iniciaremos un servidor SMB y nos aseguraremos de que esté en ejecución durante el proceso. Los archivos (clave maestra y blob de credenciales) se transferirán a la carpeta compartida que creamos en el recurso compartido SMB.
1. Iniciar SmbServer
2. Localizar la carpeta de credenciales
Para ver el contenido de su interior necesitamos hacer un ls -force:
3. Copia la clave maestra DPAPI al recurso compartido
4. Copia el blob de contraseñas
Ahora en nuestro directorio local /tmp/smbshare tenemos los archivos descargados
5. Conocer el SID
6. Desencriptado de clave
7. Desencriptado del credential_blob
FInalmente, obtenemos la contraseña del usuario steph.cooper_adm: FivethChipOnItsWay2025!
8. Análisis de Bloodhound
Analizando de nuevo con Bloodhound y estas credenciales, observamos que el usuario steph.cooper_adm tiene permisos AllExtendedRights sobre el dominio, lo que nos permitiría realizar un ataque DCSync y volcar todos los hashes:

9. Ataque DCSync
Tenemos el hash de Administrator!
Confirmación
Root flag
Vamos a conectarnos con psexec para ganar el Domain Admin.
Acceso a la flag
Última actualización
¿Te fue útil?