[HTB write-up] Valentine

El siguiente writeup muestra el proceso que utilicé para capturar las flags de usuario y de root en la máquina Valentine en @10.10.10.79.
Este documento contiene mis notas que tomé cuando estaba trabajando en la misma.

Mi forma de pensar

El primer paso consiste en la fase de reconocimiento como escaneo de puertos, banner grabbing, configuraciones erróneas, etc. El segundo en encontrar las vulnerabilidades, es decir, el ataque en sí mismo, y finalmente la escalada de privilegios llamada "fase de post-explotación".


Aviso personal: la post-explotación fue bastante compleja, haré todo lo posible para explicar cómo rooteé la máquina de Valentine.

Subíndice: Algo estaba oculto en la imagen de bienvenida y ayuda mucho ...


Escaneo de puertos

Durante este paso vamos a identificar el objetivo para ver que hay detrás de la dirección IP. Estos son los resultados:


El sistema remoto es Linux. Tenemos abierto un servidor web y un acceso remoto mediante ssh.

Con ésto, vamos a chequear ambos servicios. Para hacer esto, primero lo veremos en el navegador y, segundo, abriremos un terminal con las credenciales básicas.


Paso 1.1 El servidor web:

El resultado de nuestra navegación es un mujer con un corazón roto!! Esto ayuda mucho porque para un hacker representa la vulnerabilidad HEARTBLEED.

Página de bienvenida

Paso 1.2 El acceso remoto:

Este es el resultado una sencilla conexión a nuestro SSH:


Identificación

Vamos a echar un vistazo a las cabeceras del servidor web:

curl -I 10.10.10.79
HTTP/1.1 200 OK
Server: Apache/2.2.22(Ubuntu)
Content-Type: text/html; charset=UTF-8


Parece que tenemos un servidor web bajo Apache 2.2.22.

Miraremos el código fuente para ver si encontramos algo interesante.


Nada interesante, así que seguimos.

Vamos a ver qué ocurre con Burp:

Captura de una petición

Enumeración

En esta  parte del reto que ya tenemos algo de info de la máquina, vamos a enumerar algunos directorios del sitio web haciendo fuerza bruta de la URL.

Para ello usaremos Dirbuster con el diccionario por defecto:

Enumeración de directorios

Enumeración de ficheros

Al final de este paso, tenemos ya una buena idea de la estructura del sitio web. Usaremos páginas para para encodear/decodear algunos datos que vamos a encontrar. 

Enumeración adicional
 

La fase de enumeración de directorios revela algunas carpetas muy interesantes.

Los directorios encontrados:

http://10.10.10.79/dev/
http://10.10.10.79/dev/hype_key
http://10.10.10.79/notes.txt
http://10.10.10.79/encode/
http://10.10.10.79/decode/


Como se puede ver, el elemento de la carpeta DEV contiene un archivo de clave (la clave privada) y una nota de texto.

La carpeta DEV

Información de qué hacer

La clave privada en formato raw

¿Qué es lo próximo?

La vulnerabilidad

Con esta parte ya podemos preparar nuestra intrusión en el sistema remoto.
La vulnerabilidad es HEARTBLEAD. Para más detalles, consultar este artículo:


http://heartbleed.com

 
Con algunas investigaciones, esta vulnerabilidad se refiere al CVE-2014-0160



Explotación

Con toda la información que hemos conseguido podemos hacer la intrusión en el sistema remoto.


Para hacerlo, lanzaremos una shell con Metasploit. Vamos a empezar el juego ;)

Antes de nada, actualizaremos el framework ya que se requiere tener una versión reciente.

Los pasos son:

- Buscar el exploit :> heartbleed
- Configurar el exploit
- Configurar el payload
- Ejecutar el exploit

Estas son las opciones:

Configuración del exploit para Valentine

Ahora nuestro exploit está listo para ser lanzado. El resultado será la obtención de varios leaks del servidor.

El siguiente paso será usar las funciones encode/decode:

conexiones SSL
Esta captura de pantalla muestra la respuesta de heartbleed con algunos leaks. La primera y la segunda captura de pantalla no son cosas muy interesantes, así que relancé el exploit para obtener una buena cantidad de información.


He subrayado los datos interesantes:


$text=aGBncRibV1&GlldmVoaGVoeXBIcg==


Decodificar el leak: decode.php

En este paso vamos a decodear el leak con la funcionalidad que he encontrado en un sitio web:


El resultado nos da el usuario (hype) y la contraseña:

El mensaje decodificado

Trabajando con: hype_key fuerza bruta

 Ya tenemos toda la información excepto la key. Tenemos que convertir hype_key a un formato correcto para entrar al servidor con el usuario hype.


Tenemos dos archivos de texto. El primero raw que encontramos en el website y el segudo ya transformado al formato correcto:

El fichero convertido

Después de la conversión el último paso es usar openssl con esta sintaxis:

openssl rsa -in < > -out < >
-in with ‘hype_convert’
-out with a name I’ve chosen ‘hype_key’


En el ultimo paso se nos pide la passphrase: heartbleedbelievethehype.


El comando con openssl
La intrusión en el sistema remoto


Este paso es el más importante del reto. Vamos a "hackear" la máquina entrando por SSH.

Nosotros tenemos estos elementos:

- La IP
- El usuario
- La clave privada

Estamos dentro

Grande, estamos dentro! El último paso es escalar privilegios para capturar las flags.


Escalado de privilegios

Una vez dentro tenemos que encontrar las flags. Primero la flag de usuario, y el segundo, la flag de root de la máquina.

- La flag de usuario fue fácil porque la encontramos el directorio de usuario y el archivo de texto en él.
- La flag de root (administrador del sistema) fue ¡más complejo! Se nos dío una pista ;)


Capturar la flag de usuario
 

Cuando entramos al sistema, estábamos en root del sitio web. Entonces, la única solución para mí era encontrar el directorio de usuario y atrapar la flag.
 
Conoce siempre dónde estás y ¡¡donde quieres ir!!



Entonces, busqué la ubicación de la flag de usuario en el sistema con el siguiente
comando:


Localización de user.txt
 Sólo tenemos que navegar al escritorio y hacer un cat:

la flag de usuario

Capturar la flag de root

Para obtener root, primero veremos los procesos corriendo en la máquina:

ps -aux  

Los procesos

Si ejecutamos tmux podemos obtener root!

Comando tmux

Finalmente, vamos al directorio y obtenemos la flag de root:

la flag de root

Contribución gracias a drx51

Comentarios