🆕Blackfield [HARD🟠]

Dificultad: Dificil

1- Reconocimiento y escaneo

1.1 Ping

Podemos notar que se trata de una maquina Windows, debido al TTL:

1.2 Nmap

Esta maquina corresponde a un entorno de directorio activo o Active Directory, con un DC

Podemos ver los siguientes puertos ---> correspondientes a:

1.3 crackmapexec

El nombre del Domain Controller es DC01, estamos ante un Windows Server 2019, concretamente en su compilación 17763 de 64bits, el DNS del DC es "BLACKFIELD.LOCAL", el servicio SMB se encuentra firmado y no soporta SMBv1, por lo que trabajaremos con SMBv2

Vamos a agregar el dominio del DC al archivo /etc/hosts:

2- Explotación

2.1 Recurso compartido profiles$

Vamos a investigar con smbmap que recursos compartidos existen dentro del servidor SMB que se encuentra en el puerto 445 y tambien listar los permisos sobre cada recurso compartido:

Tenemos permisos de lectura sobre el recurso compartido "profiles$", por lo que el mismo nombre lo indica, esto podría ser una vía potencial para conseguir nombres de usuarios del dominio para posteriormente realizar algún ataque

Ahora vamos a listar los directorios que se encuentran dentro de este recurso compartido:

Podemos ver una lista larga de directorios que parecen ser usuarios dentro del dominio del entorno de directorio activo, vamos a aplicar filtros para con "awk" quedarnos con el ultimo argumento de cada linea:

Con esto restaría guardarlo en un archivo llamado "users" y luego editarlo para eliminar las primeras lineas que no corresponden con usuarios:

Ya con esto, podríamos utilizar una herramienta llamda "kerbrute" para realizar un enumeramiento de los usuarios correctos que se encuentran dentro de esta lista del usuarios interactuando con Kerberos

Repositorio de kerbrute

Vamos a enumerar usuarios que sean correctos dentro del DC con esta herramienta, de la siguiente manera:

Primero vamos a especificarle que queremos enumerar usuarios, luego le especificamos la IP del domain controller, luego el dominio y por ultimo la lista de usuarios que extraimos del recurso compartido "profiles$"

Una vez obtenido los nombres de usuarios que realmente corresponden al DC del directorio activo, vamos a realizar un ataque clásico en entornos de directorio activo

2.2 Ataque ASREPROast

El ataque AS-REP Roasting es una técnica dirigida a Kerberos, un protocolo de autenticación de red utilizado en diversas infraestructuras de TI. Este ataque se centra en las cuentas de usuario que tienen desactivada la función de preautenticación de Kerberos.

Vamos a realizar un ataque llamado "ASREPROast" con los usuarios obtenidos, para esto vamos a utilizar "impacket-GetNPUsers", esta herramienta por lo general se utilizar para obtener tickets(TGT o TGS) del servidor Kerberos para pasarle la lista de usuarios que hemos encontrado anteriormente y obtener un ticket de alguno de los usuarios si es que los usuarios dentro del entorno de directorio activo tienen activada la función de preautenticación de Kerberos(Don't Require Preauth)

Para eso vamos a guardar la lista de usuarios encontrados:

Un ejemplo de como utilizar "impacket-GetNPUsers" para este caso en concreto:

De tal manera que:

Podemos ver que el usuario "support" cuenta con la preautenticación de Kerberos activada, de tal manera que ahora, con este hash que nos dio como output la herramienta, podriamos crackearlo con "john" para obtener la contraseña en texto plano:

Tenemos credenciales:

Ahora vamos a verificar si estas credenciales son validas con crackmapexec:

Son validas, pero no nos mostro el "PWNED", por lo que no podemos utilizar psexec o evil-winrm para obtener una shell, ahora vamos a ver que permisos tenemos sobre los recursos compartidos del servidor SMB con estas credenciales utilizando smbmap:

Parece que solo tenemos permisos de lectura en recursos compartidos no tan interesantes, "profiles$" ya lo revisamos

2.3 ldapdomaindump

Ahora, mediante el servidor LDAP, vamos a obtener información de los grupos, permisos y usuarios que se encuentran dentro del directorio activo, para eso utilizaremos la herramienta "ldapdomaindump"

Vamos a dirigirnos a /var/www/html

Y vamos a ejecutar "ldapdomaindump" especificandole las credenciales encontradas, ademas del dominio del DC

Y ahora vamos a alojar un servidor web con Python en nuestro kali, mediante el puerto 80:

Y nos vamos a ir a Firefox, al siguiente enlace:

Podemos ver que al ni bien entrar, el usuario "svc_backup" del DC, esta dentro del grupo "Remote Management Users", lo cual es interesante, y nos indica que tendríamos que apuntar hacia ese usuario para conseguir una shell con evil-winrm o psexec

2.4 neo4j y Bloodhound

Para utilizar BloodHound vamos a necesitar abrir un servicio en Kali, llamado neo4j, que es el servicio que nos permite utilizar BloodHound, neo4j es un servicio de base de datos, que se aloja en el puerto 7687, vamos a instalar la herramienta con el gestor de paquetes "apt":

Y para poner en marcha neo4j, vamos a utilizar el comando "neo4j console":

Vemos que el servicio se encuentra corriendo el servicio "neo4j" correctamente y que esta alojado en local "localhost", por el puerto 7687, "http://localhost:7474/", asi que vamos a irnos a nuestro navegador de preferencia dentro de Kali y vamos a ingresar a "neo4j":

Tenemos un panel de login, las credenciales por default son "neo4j/neo4j":

Nos va a pedir una password nueva:

La ingresamos:

Y ahora por ultimo, vamos a instalar BloodHund con "apt", que ya viene dentro de los repositorios oficiales de Kali:

Ejecutamos BloodHound:

Y ingresamos las credenciales de neo4j, incluyendo la password nueva que ingresamos dentro del panel de neo4j:

(El usuario sigue siendo "neo4j" y la contraseña es la que ingresamos anteriormente para cambiarla cuando instalamos neo4j)

2.5 bloodhound-python

Cuando instalamos Bloodhound, nos instala tambien "bloodhound-python", que nos sirve para cargar información dentro de Bloodhound y dentro de la misma tener una visualización mas clara de vías potenciales de entrada al entorno de directorio activo, para eso utilizaremos el siguiente comando:

Con este comando le estamos diciendo a la herramienta que queremos extraer toda la información del directorio activo

Nos deja varios archivos JSON donde hayamos ejecutado la herramienta:

Estos archivos JSON hay que subirlos a BloodHound, en "Upload Data":

Esto nos empezara a subir toda la información extraida del directorio activo para subirlo a BloodHound:

Y una vez cargado, vamos a buscar el usuario anteriormente comprometido(support) en la barra desplegable de la esquina superior derecha:

Se nos va a poner el usuario en la pantalla, y vamos a darle click derecho "Mark User as owned"

Ahora vamos a irnos a la pestaña "Node Info" del menu desplegable de la esquina superior derecha, que contiene información relevante sobre el usuario anteriormente comprometido y ademas cosas que podriamos realizar con este usuario, ademas de los privilegios y grupos a los que pertenece el usuario:

Si bajamos abajo del todo, veremos un "First Degree Object Control"

Lo clickeamos y vamos a ver de que trata:

Podemos ver a simple vista que podemos forzar el cambio de contraseña del usuario "audit2020" con el usuario que comprometimos(support)

2.6 Cambio de contraseña del usuario audit2020 con net rpc

Si recordamos en el escaneo de Nmap, teníamos el servicio RPC habilitado, por lo que tenemos una herramienta llamada "net rpc" con el que podemos realizar el cambio de contraseña de este usuario(audit2020) con las credenciales del usuario comprometido(support)

Utilizaremos el siguiente comando:

Que luego nos pedirá la contraseña( #00^BlackKnight )

En mi caso, al usuario "audit2020" le cambiare la contraseña a "test321!"

Luego de cambiar la contraseña, vamos a validar con crackmapexec si podemos conectar mediante SMB, al usuario "audit2020" con la contraseña que le proporcione "test321!"

Podemos ver que la contraseña se cambio correctamente, ahora vamos a verificar que permisos tenemos sobre los recursos compartidos del servicio SMB con estas credenciales mencionadas:

Ahora tenemos permisos de escritura sobre el recurso compartido "forensic", vamos a ver que directorios contiene este recurso compartido:

Tenemos 3 directorios, vamos a entrar a "memory_analysis":

Parece que por lógica y nombre de los archivos del recurso compartido, tenemos el dumpeo de memoria de un proceso llamado "lsass", que por lo general suele contener hashes

lsass.exe es el servicio de subsistema de autoridad de seguridad local de Windows

Vamos a bajarnos este archivo "lsass.zip":

Se nos descargo con un nombre que le asigna smbmap, nosotros vamos a cambiarselo a lsass.zip:

Vamos a descomprimirlo con unzip:

Se nos extrajo un archivo de extensión "DMP" correspondiente a DUMPEO, vamos a ver el tipo de archivo que es con "file":

Se trata de un archivo "Mini DuMP"

2.7 pypykatz

Para leer este archivo "Mini DuMP", vamos a utilizar la herramienta "pypykatz", con el siguiente comando:

Nos extrae mucha información, nosotros nos vamos a quedar con la información de "svc_backup" que era el usuario que estaba dentro del grupo "Remote Management Users"

Podemos ver el hash NT del usuario

2.8 Pass-The-Hash al usuario svc_backup

Como tenemos el hash NT del usuario svc_backup, podriamos probar realizar un Pass-The-Hash para ver si nos podemos conectar directamente con un hash el usuario mediante evil-winrm, pero antes vamos a validar que esto sea posible con "crackmapexec":

Podemos ver que ya nos podemos conectar con evil-winrm:

2.9 Obtención de la flag user

La flag de user se encuentra dentro de la ruta absoluta "C:\Users\svc_backup\Desktop\user.txt", vamos a visualizar la flag:

3- Escalado de privilegios

3.1 Privilegios del usuario svc_backup

Vamos a ver los privilegios que contiene este usuario que acabamos de comprometer con un Pass-The-Hash

3.2 DiskShadow

Tenemos permisos para realizar backups a nivel de sistema(en todo el sistema)

Con esto, podríamos realizar un backup de los hashes NTDS del sistema, para luego obtener el hash del Administrator

Para eso, vamos a necesitar crear una unidad lógica de almacenamiento dentro de la maquina con "DiskShadow"

En este blog, queda mas que explicado como utilizando DiskShadow, realizar una copia del sistema:

Una vez realizada la copia, ya podremos obtener los hashes NTDS que se encuentran en un archivo NTDS.dit

Entonces, vamos a realizar la copia del sistema, primeramente vamos a crear un archivo que contenga lo siguiente:

(Recordar siempre ponerle espacios en cada linea al final, por que DiskShadow, borra siempre el ultimo caracter del final de cada linea)

En mi caso:

Y ahora vamos a subirlo a la maquina victima, pero vamos a subirlo en el directorio "C:\Temp", la carpeta "Temp" vamos a crearla con mkdir:

Y ahora vamos a ejecutar el siguiente comando de DiskShadow, para que se efectué la copia en una unidad Z:

Y ya con esto, tendremos la unidad lógica de almacenamiento Z creada, si vamos a "Z:"

Vamos a volver a al disco C: y vamos a irnos a la carpeta "Temp" de vuelta, de tal manera que ahora podemos copiar el archivo "Z:\Windows\NTDS\ntds.dit" que contiene los hashes NTDS, pero no utilizando el comando "copy", porque no va a funcionar, si no que tenemos que usar "robocopy"

Ahí podemos ver que nos da error al copiar con el comando "copy", asi que utilizaremos robocopy, con el siguiente comando:

Una vez bajado, ahora podríamos bajarnos este archivo a nuestra maquina local con "download"

Pero tambien tenemos que bajarnos el archivo "system" para utilizar "impacket-secretsdump", dumpear el hash en texto claro

Para eso tenemos que traernos el archivo "system" a nuestro directorio Temp, no utilizaremos "copy", esta vez haremos un backup del archivo y que el backup se almacene en la carpeta "Temp" que nosotros previamente creamos:

Y luego nos lo bajaremos en nuestra maquina local con "download":

3.3 impacket-secretsdump

Ahora vamos a utilizar la herramienta "impacket-secretsdump" para ver los hashes NTDS del DC, pasandole como parametro el "system" y el archivo "ntds.dit":

Tenemos el hash NTDS del usuario Administrator:

Con esto ya tendriamos el hash NTDS del usuario Administrator, ahora vamos a verificar con crackmapexec si podemos utilizar este hash para realizar un Pass-The-Hash para conectarnos con evil-winrm:

Podemos ver que es factible conectarnos con este hash NTDS para realizar Pass-The-Hash

3.4 Pass-The-Hash con el hash NTDS del usuario Administrator

Ahora vamos a probar conectarnos con evil-winrm con el hash NTDS anteriormente obtenido:

Ya tendremos acceso total sobre el entorno de directorio activo y del sistema

3.5 Obtención de la flag root

La flag de root se encuentra dentro de la ruta absoluta "C:\Users\Administrator\Desktop\root.txt", vamos a visualizar la flag:

Con esto, concluimos la maquina "Blackfield" de Hack The Box

Espero te haya sido de ayuda este Write Up :)

Si tuviste alguna dificultad a la hora de resolverlo, no olvides contactarme en mis redes sociales

Última actualización