Responsive image

HackMyVM - Faust

28 septiembre 2021

Esta máquina se encuentra en la plataforma HackMyVM y ha sido creada por el usuario cromiphi.

Es una máquina linux con una temática realista basada en la explotación de un CMS. Para la resolución de esta máquina se hace uso de Metasploit aunque no es estritamente necesario.

# Dificultad
Acceso Fácil-Media
Escalada de privilegios Fácil-Media

Enumeración


Antes que nada será necesario conocer la dirección IP de la máquina objetivo para lo que se utilizará la herramienta ping-sweep.

La herramienta ha detectado 3 IP:

Como todas las máquinas se comienza con un escaneo de puertos. Primero un escaneo rápido de todos los puertos y después con un escaneo más específico habilitando la detección de servicio y utilizando unos scripts de enumeración básicos.


El escaneo descubre tres puertos abiertos el 22 SSH, 80 HTTP y 6600 otro servicio.

En el puerto 80 es un servicio HTTP con el gestor de contenidos CMS Made Simple. Consultando un poco en la web se encuentra rápidamente la versión 2.2.5.

Sabiendo la versión se utiliza seachsploit para buscar algún exploit y se encuentra uno que corresponde a la versión de un RCE.

Se descarga este exploit y se consulta su interior para saber su funcionamiento.

El exploit requiere de unas credenciales y se conecta a la url /cmsms/admin. Se procede a continuar con la enumeración para descubrir una pista acerca de estas credenciales.

Consultando el CMS se observa que la ruta /admin existe un formulario de inicio de sesión, pero serán necesarias unas credenciales.

Se utiliza netcat para hacer un banner grabbing en el puerto 6600. Y se encuetnra un mensaje para el usuario www-data de un tal Paul, este mensaje advierte de que www-data debe eliminar todo su trabajo para encontrar una recompensa en casa. Esto parace ser una pista para la escalada de privilegios no para conseguir acceso.

Consultando la web, en la sección de noticias se encuentra un mensaje de "admin" (ya se tiene un usuario para las credenciales), este mensaje indica que se ha instalado un nuevo módulo en la web.


Ganar acceso


Tras continuar con la enumeración no se encuentra ninguna pista de la contraseña. Será necesario obtenerla con una ataque de diccionario, para ello se utiliza hydra utilizando como usuario admin y de diccionario rockyou. El ataque se lanza contra el formulario de login /admin.

Hydra en cuestión de segundos encuentra la contraseña: bullshit. Con esto se modifica el script indicando el usuario, la contraseña y la ruta del login y se ejecuta el ataque. También se ha modificado para ejecutarlo con python3.

Sin embargo, el script no tiene éxito, no se habrá configurado algo bien. Lo bueno que al usar el exploit se reconoce que utiliza una vulnerabiliad arbitrary file upload. Por lo que se busca un nuevo exploit o técnica que utilice este método.

Se encuentran un método de explotación arbitrary file upload y un exploit de metasploit. Se podría utilizar el método de explotación pero se decanta por el uso de metasploit debido a que es una herramienta muy potente que todavía no se ha mostrado en C1ber_F0lio. Para no convertirse en un script kiddie es importante saber qué es lo que ejecuta el exploit y no ejecutarlo sin más. Esto es importante para convertirse en buenos pentesters no solo para saber la técnica que utiliza el exploit si no también para conocer el rango de ataque y no afectar a otros sistemas.

Se inicia metasploit, se elige el módulo y se configurarn las opciones. Finalmente se inicia el exploit.

Se inicia metasploit, se elige el módulo y se configurarn las opciones. Finalmente se inicia el exploit.

El exploit tiene éxito y se consigue acceso al sistema. Para pasar de una meterpreter a una terminal normal se utiliza la opción SHELL.

Sin embargo, se devuelve una shell sin tratar. Por lo que se realiza un tratamiento rápido para disopner de una terminal más agradable.

En este punto se es el usuario www-data y se recuerda la pista que había en el puerto 6600 que decía de eliminar todo el trabajo y que se encontrará una pista en casa de Paul.

Eliminar todo el trabajo se supone que se refiere a eliminar todo lo que hay en la carpeta /var/www.

Y Casa de Paul será el directorio /home/paul.

¡Exacto! en el directorio /home/paul aparece un archivo password.txt

Sabiendo el usuario y la clave se puede conectar por ssh y dejar de utilizar la terminal de metasploit.


Escalada de privilegios - Primera fase


Se consultan los permisos sudo de paul y se observa que se tiene permiso de ejecución como Nico del binario /usr/bin/base32.

En el directorio de nico se encuentra un archivo oculto .secret.txt.

Sin embargo, no se tienen permisos para consultar ese archivo.

Pero como se tienen permisos para el binario base32 es posible que se pueda utilizar para consultar este archivo. Primero se consulta la ayuda del binario para saber como se utiliza.

Sabiendo como se usa, se ejecuta como Nico para codidificar en base32 el archivo .secret y decodificarlo para poder ver el contenido en claro.

Parece ser que el contenido está en base64, por lo que a la salida del comando anterior se el concatena decodificarlo en base64.

Ahora sí puede verse el contenido del archivo. Y contiene lo que parece ser la clave de acceso de Nico.


Escalada de privilegios - Segunda fase


Teniendo las credenciales de Nico se escala a él y se obtiene la flag de user.


Nico no tiene privilegios destacables y no se encuentra ninguna tarea cron1 interesanet. Estando a punto de rendirse y usar linpeas se encuentra el directorio "nico", no muy bien escondido haya que decir, en el directorio base del sistema.

Dentro del directorio se encuentra una imagen que es enviada a la máquina atacante a través del servicio SCP (Secure Copy Protocol), este servicio es básicamente el protocolo RCP (Remote Copy Protocol) pero sobre SSH para hacerlo seguro.

La imagen en cuestión es la siguiente:

Los metadatos de la imagen no contienen ninguna información por lo que puede que la información esté oculta dentro de la imagen con una técnica esteganográfica. Se utiliza la herramienta steghide para desvelar si existe algún contenido. Se utiliza la herramienta Digital Invisible Ink para desvelar un posible contenido oculto, encontrando un contenido con el algoritmo BlindHide. La herramienta "steghide" en linux realiza esta misma operación.

El contenido del archivo es una pista que nos dice que existía un archivo /tmp/goodgame que era muy bueno, pero que ya no está.

Se intuye que puede existir una tarea cron que ejecute el archivo, por lo que se crea un archivo goodgame con una reverseshell y se le dan permisos de ejecución.

Al poco tiempo se recibe una conexión, esta suposición era la correcta.

Siendo root puede obtenerse el contenido de la flag y concluir así con la resolución de la máquina.