Forest [EASY🟢]

Dificultad: Fácil

1- Reconocimiento y escaneo

1.1 Ping

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

1.2 Nmap

Podemos ver que estamos frente a un entorno de directorio activo de Windows, concretamente Windows Server 2016 Standard compilación 14393, tenemos los puertos comunes de directorio activo como el 88(Kerberos), 135, 139, 389(LDAP) y 445(SMB)

1.3 enum4linux

2- Explotación

2.1 Enumeración de usuarios

Nos da mucha información la herramienta enum4linux, vemos una lista de usuarios dentro del escaneo:

Almacenamos esta lista de usuarios en un archivo llamado users.txt:

Vamos a utilizar expresiones regulares y filtros para obtener los usuarios limpios

2.2 impacket-GetNPUsers

Una vez obtenido los usuarios, vamos a obtener los hashes de los usuarios y mediante Kerberos obtener los hashes, mediante la obtención de los tickets

Para eso, utilizaremos la herramienta "impacket-GetNPUsers", con el siguiente comando:

A este comando primero le especificamos el dominio, que si recordamos, Nmap, nos había arrojado el dominio "htb.local/" que se aloja en el puerto 53, luego le especificamos que no tenemos la contraseña, luego el archivo donde almacenamos los usuarios del entorno de directorio activo, y por ultimo le especificamos la IP de la maquina

Ejecutamos:

Kerberos nos devolvio el ticket del usuario "svc-alfresco"

Vamos a almacenarlo en un archivo de texto:

2.3 John The Ripper con el hash obtenido del ticket de Kerberos

Una vez obtenido el hash del usuario "svc-alfresco", vamos a utilizar John The Ripper para obtener la contraseña del mismo en texto plano:

(Utilizamos el diccionario de rockyou)

Obtuvimos la contraseña

2.4 Reverse shell con evil-winrm

Ahora vamos a utilizar crackmapexec para verificar las credenciales obtenidas, para logearnos mediante "evil-winrm", pero vamos a agregarle el parámetro "-d" para especificar el dominio:

Ahora vamos a logearnos con "evil-winrm", ya que sabemos que las credenciales son validas:

2.5 Obtención de la flag user

La flag de usuario se encuentra dentro de la ruta absoluta "C:\Users\svc-alfresco\Desktop":

3- Escalado de privilegios

3.1 BloodHound

Para escalar privilegios, vamos a utilizar BloodHound, una herramienta para entornos de directorio activo, que nos enumera los permisos de los usuarios del directorio activo mas detalladamente

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)

3.2 SharpHound

Para extraer la información de la maquina objetivo, vamos a utilizar "SharpHound", donde nos va a extraer y enumerar la información del entorno de directorio activo y lo va a comprimir un .ZIP, que luego se lo pasaremos a la herramienta "BloodHound", SharpHound pertenece a la suite de herramientas de BloodHound

Repositorio de SharpHound

Podemos descargarnos SharpHound del repositorio de GitHub oficial, en mi caso utilizare la ultima versión a la fecha de SharpHound, la release 2.6.0:

Una vez descargado, vamos a pasar este archivo "SharpHound" a la maquina objetivo donde obtuvimos una shell con "evil-winrm", para eso utilizaremos el comando integrado de "Upload" de la misma herramienta "evil-winrm" utilizando el siguiente comando:

En mi caso

Y lo ejecutaremos:

Listamos directorios:

Y para bajarnos ese archivo .ZIP que nos genero la herramienta, utilizaremos el comando "download" que ya viene integrada en "evil-winrm":

Y ahora podemos importar el archivo .ZIP a BloodHound con el siguiente boton a la derecha del panel de BloodHound:

Y vamos a esperar a que termine de subir los datos del archivo ZIP:

Una vez subido todo, en el campo de busqueda, vamos a buscar el usuario "svc-alfresco":

Le damos click derecho al usuario y "Mark User as Owned" y a "Set as Starting Node":

Nos va a aparecer toda la topologia de los grupos y los usuarios dentro del directorio activo:

Investigando en BloodHound, me di cuenta que el uusario "svc-alfresco" tiene permisos para crear usuarios(ACCOUNT OPERATORS@HTB.LOCAL) dentro del entorno de directorio activo(SERVICE ACCOUNTS@HTB.LOCAL)

Podemos ver que el usuario que comprometimos "svc_alfresco" pertenece al grupo "SERVICE ACCOUNTS@HTB.LOCAL" y que a su vez pertence a "PRIVILEGED IT ACCOUNTS@HTB.LOCAL"

Y que además a la vez el grupo "PRIVILEGED IT ACCOUNTS@HTB.LOCAL" pertenece a "ACCOUNT OPERATORS@HTB.LOCAL"

3.3 Ataque DCSync - WriteAcl

Vamos a realizar un ataque DCSync para obtener los hashes de los usuarios, entre ellos el usuario "Administrator"

Como pudimos ver el usuario "svc-alfresco" podia crear usuarios, asi que vamos a crear uno dentro de la shell de "evil-winrm" y vamos a listar información sobre el mismo:

Y ahora, vamos a asignarle el grupo "Exchange Windows Permissions" al usuario que acabamos de crear:

Ahora vamos a asignarle el privilegio DCSync al usuario que acabamos de crear, para eso utilizamos el siguiente comando:

Y por otro lado vamos a definir una credencial en un objeto con el siguiente comando:

Y ahora para manipular este objeto "$Cred" que acabamos de crear, vamos a utilizar "PowerView.ps1" del repositorio de PowerSploit, asi que vamos a bajarnos el siguiente script:

PowerView.ps1

Lo bajamos con "wget":

Vamos a alojar un servidor we con Python para pasarnos el archivo a la maquina objetivo:

Y vamos a irnos a "evil-winrm" nuevamente para bajarnos el archivo con el comando:

En mi caso, la IP que me asigno la VPN de Hack The Box es la 10.10.10.14.12, en tu caso deberias poner la IP que te asigno Hack The Box

Y ahora si, vamos a asignarle el permiso DCSync al usuario que creamos con el siguiente comando:

Por ultimo, vamos a obtener la credencial del usuario "Administrator" hasheada, para eso vamos a utilizar "impacket-secretsdump", con el siguiente comando indicandole el dominio, el usuario y la IP:

Como podemos ver nos dumpeo todos los hashes de las contraseñas de todos los usuarios del entorno de directorio activo de esta maquina

A nostros el hash que nos interesa es el hash del usuario "Administrator":

Podemos ver que tambien tenemos el hash NTDS:

3.4 Pass-The-Hash

Ahora vamos a realizar un Pass-The-Hash con este Hash NTDS del usuario Administrator, para eso vamos a verificar si con el hash NTDS podemos logearnos mediante "evil-winrm", para eso utilizaremos la herramienta "crackmapexec":

(Recordar utilizar el parametro -H y no el -p, ya que estamos especificandole el hash, no la contraseña)

Podemos ver que nos dice que es el hash correcto, por lo que ahora mismo, podríamos entrar con "evil-winrm" con este hash NTDS, y aqui es donde entra el pass-the-hash, en vez de pasarle la contraseña como parámetro a evil-winrm, le especificamos con el parámetro -H, el hash NTDS

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":

Con esto, concluimos la maquina "Forest" 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