Timelapse
Platform
HackTheBox
O.S
Windows
Level
Easy
Skills
WinRM
OpenSSL
Brute Force LAPS
Fase 1: Reconocimiento
Realizamos un escaneo profundo de todos los puertos TCP que se encuentran abiertos.
sudo nmap -sS -p- --open --min-rate 5000 -n -Pn -vv 10.10.11.152 -oN target

Antes de nada veamos a que sistema operativo exactamente nos enfrentamos.
nmap -O -n -Pn 10.10.11.152

Perfecto, una vez sabemos a que sistema nos enfrentamos, vamos a verificar su nombre de dominio, nombre de host y asegurar ya casi que al 100% el sistema operativo exacto del objetivo con ayuda de la herramienta Crackmapexec.

Procedemos a realizar una enumeración de recursos compartidos con una sesión nula ya que no tenemos credenciales válidas aún.

Bien, ahora vamos a comprobar si tenemos permisos en algún recurso compartido sin autenticación.

Con la información obtenida, vamos a realizar una conexión al recurso Shares y a descargar toda la información que se encuentre allí.

En este caso en concreto, dentro del directorio Dev, se encontraba un zip con un nombre interesante, el cual nos puede servir como posible vector de ataque.
Por otro lado, en el directorio SMB HelpDesk, se encontraba un instalador y archivos .docx con información sobre LAPS.

¿Qué es LAPS?
Local Administrator Password Solution. Es básicamente una herramienta diseñada para administrar contraseñas locales de cuentas que pertenecen al dominio. Almacena estas contraseñas de forma segura en el AD y las protege con ACLs. Genera contraseñas aleatorias y únicas para cada equipo del dominio.
Nota: Solo usuarios autorizados pueden acceder a ellas.
Bien, una vez sabemos que muy posiblemente el dominio al que pertenece nuestro target implementa LAPS, tenemos nociones un poco más claras de cara a una explotación futura.
Volviendo al fichero zip obtenido previamente, al intentar descomprimirlo nos pide una contraseña la cual no tenemos.

Fase 2: Explotación
Así que lo primero que se me ocurre es aplicar fuerza bruta con john. Para ello, extraemos los hashes del zip con zip2john para posteriormente crackearlos con el mismo john Jajajaja.

Perfecto al parecer el crackeo ha ido bastante rápido y hemos logrado obtener la contraseña para descomprimir el ZIP; como resultado obtenemos un archivo .pfx, que es resumidamente, un contenedor cifrado que suele incluir dentro un certificado digital y su clave privada correspondiente.

Bien, al intentar extraer la clave privada que existe en el contenedor, pide una contraseña diferente a la anterior. 🙂↕️
Así que adivinen que? si, efectivamente, vamos a aplicar fuerza bruta nuevamente.
Para esta tarea estaré utilizando la herramienta ‘crackpkcs12’. Dejo por aquí abajo su repositorio oficial y una breve guía de instalación :)
https://github.com/crackpkcs12/crackpkcs12
# Luego de clonar el repo y acceder a el directorio
./configure
# Instalación con make
make
sudo make install
#[ Si no tenemos instaladas las cabeceras OpenSSL]
sudo apt install libssl-dev
Una vez instalada correctamente procedemos a ejecutarla contra el objetivo y por suerte, ha obtenido la contraseña que necesitábamos exitosamente.

Ahora si, procedemos con openssl a extraer el certificado público y la clave privada correspondiente.


Echándole un vistazo al certificado, vemos que pertenece al usuario Legacyy. Concatenando esto con la idea de que el comprimido inicial tenía el nombre de WinRM, podemos intuir una posible autenticación a través de este protocolo.

Pero claro, si hemos mirado bien el escaneo inicial nos daremos cuenta de que el puerto por defecto de WinRM (5985 TCP) no se encuentra abierto. Pero bueno, ya que tenemos clave privada y certificado podríamos hacer una autenticación por el mismo protocolo que corre sobre HTTPS y que se encuentra en el puerto 5986 TCP.

Bien, podemos observar además que nos encontramos dentro del home del usuario legacyy, lo cual tiene todo el sentido del mundo ya que este usuario era el dueño del certificado. Además es casi que seguro que este usuario pertenece a un grupo de administración remota.

Siempre lo he dicho, que bien montadas están la mayoría de máquinas en HackTheBox, es una locura. 👀
Pruebo a realizar varias pruebas de identificación de posibles vectores de ataque y ya les adelanto de que no he encontrado mucho.

Bien, lo siguiente que se me ocurre es verificar la versión actual de PowerShell. Ya que si poseo una versión superior a la 5.x, esto significaría que tendremos el módulo por defecto llamado PSReadline.

Una vez comprobamos que tenemos una versión de PowerShell relativamente nueva, vamos a leer el historial que se encuentra en la siguiente ruta:
$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt

Perfecto!
Hemos encontrado algunos comandos interesantes y que nos servirán para una posible escalada de privilegios 😏.
Antes de ello, obtenemos la flag del usuario legacyy, que siempre se me olvida 😅.

Fase 3: Post-Explotación
Una vez con las credenciales en texto plano encontradas en el historial.
svc_deploy:'E3R$Q62^12p7PLlC%KWaxuaV'
Repetimos el proceso de conexión mediante WinRM sobre HTTPS (opción -S).

Una vez dentro, hacemos una enumeración de información básica sobre nuestro usuario.

Encontramos que el usuario pertenece al grupo LAPS_Readers, el cual con una breve búsqueda en Google nos damos cuenta de que:

Perfecto! Eso significa que podremos de alguna manera leer la contraseña de las cuentas gestionadas por LAPS.
Tras investigar un poco en internet he dado con el siguiente artículo que es oro puro para el tema que estamos tratando.
https://www.hackingarticles.in/credential-dumping-laps/
Bien, nos ofrece diversas formas de dumpear las contraseñas, pero en mi caso lo haré con la librería GetLAPSPassword de Impacket.

Hemos obtenido la contraseña de un usuario!
Tengan en cuenta que es muy probable que a ustedes les aparezca una contraseña distinta, ya que, como se explicó en la teoría de LAPS, este sistema genera contraseñas aleatorias para las cuentas locales que administra.
Comprobamos si la contraseña que hemos obtenido es válida a nivel de SMB para el usuario administrador.

Bingo!!
Ya tenemos credenciales como administrador, ahora repetimos por 3ra vez la conexión con WinRM (Creo que ya somos expertos en conexiones SSL por WinRM 😅).
Hacemos una breve búsqueda de la flag, ya que por alguna razón no se encontraba en el Desktop del usuario administrador, y conseguimos vulnerar al 100% la máquina.
Espero les haya ayudado este tutorial. 🫡

Last updated