Valentine
Valentine es una máquina de dificultad media muy singular que se centra en la vulnerabilidad Heartbleed, que tuvo un impacto devastador en los sistemas de todo el mundo.

Reconnaissance
Realizaremos un reconocimiento con nmap para ver los puertos que están expuestos en la máquina Valentine. Este resultado lo almacenaremos en un archivo llamado allPorts.
A través de la herramienta de extractPorts, la utilizaremos para extraer los puertos del archivo que nos generó el primer escaneo a través de Nmap. Esta herramienta nos copiará en la clipboard los puertos encontrados.
Lanzaremos scripts de reconocimiento sobre los puertos encontrados y lo exportaremos en formato oN y oX para posteriormente trabajar con ellos. En el resultado, comprobamos que se encuentran abierta una página web de Apache en protocolos HTTP (80) y HTPTS (443).
Transformaremos el archivo generado targetedXML para transformar el XML en un archivo HTML para posteriormente montar un servidor web y visualizarlo.
Accederemos a http://localhost y verificaremos el resultado en un formato más cómodo para su análisis.

Añadiremos en nuestro archivo /etc/hosts la siguiente entrada correspondiente.
Web Enumeration
Accederemos a http://valentine.htb pero se nos redigie automáticamente a https://valentine.htb en la cual nos encontramos con el siguiente contenido.

Realizamos una enumeración de la aplicación web para intentar obtener archivos, directorios, etc. En el resultado se nos muestra un directorio llamado /dev el cual contiene dos archivos que deberemos explorar.
Nos descargaremos los archivos hype_key y notes.txt los cuales se encuentran en https://valentine.htb/dev/.
Initial Access
Attempting to decrypt an RSA Private Key (FAILED)
Nos encontramos con los dos siguientes archivos que deberemos analizar. En el archivo llamado notes.txt mencionan una especie de tareas que se deben realizar, sobretodo remarcan el tema de reparar un decodificador/codificador en el cual indican que solamente funcione desde el lado del cliente.
Por otro lado, el archivo hype_key contiene información codificada en lo que parece ser Hexadecimal, revisaremos a ver si podemos descodificar este archivo para obtener el archivo original.
Realizaremos una decodificación a través de la herramienta xxd y comprobaremos el siguiente resultado.
En el resultado obtenido, comprobamos que el archivo hype_key se trata de una PEM RSA Private Key.
Un PEM RSA Private Key es una clave privada RSA codificada en formato PEM (Privacy-Enhanced Mail). En este caso, la clave está cifrada con AES-128-CBC, lo que significa que para usarla necesitamos la contraseña con la que fue protegida.
Las claves privadas RSA se utilizan para el cifrado, la firma digital y la autenticación, por ejemplo, en SSH o certificados TLS/SSL. Si esta clave pertenece a un servidor o sistema crítico, podría permitir acceso no autorizado si se compromete.
Realizamos una búsqueda por Internet para encontrar la manera de desencriptar esta Private Key. En el siguiente blog, se nos menciona que una de las maneras más efectivas de desencriptar el contenido es a través de openssl.

Intentaremos desencriptar la Private Key pero nos pide contraseña, al darle al Enter (es decir dejar la contraseña en blanco), nos mostraba el siguiente mensaje de error, indicando que no había sido posible desencriptar la clave. Por lo tanto, para intentar desencriptar esta clave, deberíamos buscar alguna manera de lograr obtener credenciales.
También intentamos obtener el hash de la contraseña a través de ssh2john pero no logramos finalmente crackear la contraseña debido que esta contraseña no está dentro del diccionario rockyou.txt.
Nmap Enumeration --script vuln
Debido que se encuentra el HTTPS (443) habilitado, probamos de realizar un escaneo nuevamente con la herramienta de Nmappara realizar un escaneo con los scripts de vulnpara detectar vulnerabilidades conocidas.
En el resultado obtenido, se comprueba que es vulnerable a ssl-poodle y ssl-heartbleed y ssl-css-injection.
Heartbleed Exploitation (CVE-2014-0160)
Con la herramienta de testsl verificamos nuevamente que el servicio es vulnerable a Heartbleed.
Las implementaciones de (1) TLS y (2) DTLS en OpenSSL 1.0.1 en versiones anteriores a 1.0.1g no manejan adecuadamente paquetes Heartbeat Extension, lo que permite a atacantes remotos obtener información sensible desde la memoria de proceso a través de paquetes manipulados que desencadenan una sobrelectura del buffer, según lo demostrado mediante la lectura de claves privadas, relacionado con d1_both.c y t1_lib.c, también conocido como bug Heartbleed.
Realizando una búsqueda por Internet, nos encontramos con el siguiente repositorio de GitHub el cual nos ofrece un PoC de cómo realizar la explotación de la vulnerabilidad.
Ejecutaremos el script de heartbleed-exploit.py a través de Python2 e indicaremos el dominio vulnerable. Comprobamos que se nos ha creado un archivo llamado out.txt con la información recibida de la vulnerabilidad.
Al revisar el contenido del archivo out.txt nos encontramos con el siguiente contenido, el cual en un principio no nos ofrece nada interesante.
Ejecutaremos varias veces y comprobaremos el archivo out.txt nuevamente, para obtener más información recopilada a través de la memoria debido a la vulnerabilidad de Heartbleed.
En uno de los resultados obtenidos, comprobamos que se hace mención de un archivo llamado decode.php (algo parecido a lo que encontramos inicialmente en el archivo notes.txt). Este archivo al parecer se está tramitando una variable $text la cual contiene un contenido que parece estar codificado en Base64.
Descodificamos el contenido obtenido y nos encontramos con el siguiente contenido: heartbleedbelievethehype.
Probamos de autenticarnos con estas credenciales con el usuariohype (suponiendo que este es el nombre del usuario, debido al nombre del archivo que teníamos anteriormente hype_key), pero nos muestra un mensaje de error.
Decrypting an RSA Private Key
Con lo cual, lo que decidimos es comprobar si con esta contraseña podíamos llegar a desencriptar la RSA Private Keyalmacenada en hype_key. Por lo tanto, probamos de añadir heartbleedbelievethehype en el diccionario rockyou.txt y intentamos crackear nuevamente el hash obtenido anteriormente en el archivo hype_key.hash. Como resultado obtenido, comprobamos que ahora que la contraseña si está presente en el diccionario, si ha logrado crackear el hash de la RSA Private Key.
Una vez confirmado esa prueba, decidimos en desencriptar la RSA Private Key con las credenciales obtenidas. Comprobamos que hemos podido desencriptar la clave y le daremos los permisos necesarios para poder utilizar esa clave SSH privada.
Accessing on SSH trough SSH-RSA key rejected "no mutual signature algorithm"
Probaremos de autenticarnos con esta clave privada SSH del usuario hype, pero al intentar acceder se nos muestra el siguiente mensaje de error. Posiblemente por un problema entre nuestro OpenSSH y el del servidor.
Realizando una búsqueda por Internet, nos encontramos con el siguiente blog de Confluence en el cual nos explican la manera de solucionar este problema. Para poder corregir este error y poder acceder con la clave privada, deberemos de rehabilitar el RSA.

Aplicaremos el Workaround que se nos mencioanaba y comprobamos que finalmente logramos obtener el acceso al sistema con el usuario hypey podemos localizar la flag user.txt.
Privilege Escalation
Tmux Socket File Session
Revisando los procesos que se encuentran en ejecución en el sistema, comprobamos que el usuario root parece estar utilizando Tmux con un Tmux Socket File Sessionubicado en /.devs/dev_sess.
tmux es un multiplexor de terminal de código abierto para sistemas operativos tipo Unix. Permite acceder a múltiples sesiones de terminal simultáneamente en una sola ventana . Es útil para ejecutar más de un programa de línea de comandos al mismo tiempo.
Desde la raíz / del sistema accederemos al directorio .devs en el cual comprobamos la existencia del archivo dev_sess el cual se trata de un Socket que está siendo utilizado por el usuario root.
Revisaremos que el binario de Tmuxse encuentra habilitado en el equipo y utillizaremos el Socket File a través del parámetro -S.
Comprobamos que accedemos a la sesión de Tmux del usuario root y logramos obtener la flag root.txt.
Última actualización
¿Te fue útil?
