Hola a tod@s!

De vez en cuando me dejo caer por Vulnhub para ver las nuevas máquinas que van sacando, para entrenar, más que nada. Esta la tenía en el tintero, así que al lío.

Descargamos la máquina virtual del repositorio. En el que encontrareis esta OVA para máquina virtual.

Una vez desplegada, vamos al lío. Nmap nos aporta un par de puertos (lo suyo es probar con todos, parámetro -p-). Los podemos ver a continuación, el 21 (ftp) y el 80 (http):

scaneo de puertos abiertos con nmap

Comenzamos con el 80, en el raíz se muestra el directorio /site/:

Index of vulnerable en Vulnhub

Vemos el tipo de servidor web y sistema operativo que hay detrás, con ello, entramos y vemos el contenido que nos deja la propia web, para ver por donde podríamos avanzar.

Después de ver el código fuente de la página, lo interesante es una opción de Buscar que tiene la propia página:

buscar_php_vulnerable

Después de probar diferentes diccionarios y palabras vemos lo que se esconde:

Cadena en buscar.php vulnerable

Si introduces palabras, generalmente no te aporta una respuesta, o más bien, una página en blanco, ¿por qué?

Comando PWD en buscar.php

Porque lo que hay que introducirle es un comando, ni más ni menos.

Este es su código fuente:

código de la pagina buscar.php vulnerable

Tenemos una shell en esta página, comando que pongas, si existe y tienes privilegios para ejecutarlo, funcionará sin más.

Mientras, habíamos puesto otras herramientas a trabajar, por ej. Dirbuster :

Herramiente hacking Dirbuster

Vemos un wordpress, o eso parece a priori. Pero por su contenido, es un directorio señuelo:

Wordpress de señuelo para despistar

Si crees que es un Wordpress, te lías a lanzar wp-scan para sacar datos y pierdes algo de tiempo… pero por si acaso, miramos ese fichero “config.php” por si suena la flauta.

Archivo config.php de wordpress

Se trata de la cadena de conexión a Base de Datos, nos apuntamos todo esto.

Puertos a la eschucha en la máquina

Comprobamos como en el puerto 3306, de la localhost hay un Mysql. Como vemos en la url.

netstat -antopu | grep LISTEN

Además del 21 y 80 que veíamos con Nmap, está el 22. Sin embargo, se encuentra filtrado. Habrá que buscarse la forma de acceder después.

Wfuzz detectó con uno de los diccionarios, el siguiente fichero:

Herramienta WFUZZ Hacking

Otro fichero de configuración, con otras credenciales. Lo mismo que antes, lo apuntamos.

Archivo de backup oculto en la aplicación vulnerable

De momento, tenemos un par de usuarios de Base de Datos y la misma contraseña.

Ahora probamos alguno de los usuarios en el FTP para saber si no sólo son usuarios de Base de Datos.

Usuarios de FTP vulnerable con las credenciales encontradas

Podía verse este usuario directamente desde la web:

Directorio home del usuario

Genial, tenemos 1 usuario de sistema operativo, ya podríamos acceder por ssh, pero no lo tenemos directamente abierto para que accedamos, así que tendremos que buscar la manera.

Si alguno os preguntáis por qué no seguimos utilizando la shell vía web, esta es la respuesta, la limitación del usuario con el que accedemos:

Limitación del usuario en el acceso por webshell

Así que aprovechamos este FTP al que tenemos acceso para subir algún fichero que podamos aprovechar para proporcionarnos acceso al ssh o al Mysql que vimos previamente (si quisiéramos acceder a él).

Para ello, utilizaremos reGeorg . Con ello, crearemos un proxy socks en la máquina destino que nos permitirá acceder a cualquier puerto local de la máquina y que no esté accesible directamente.

Por un lado subimos el fichero “tunnel.nosocket.php”, que se encuentra ubicado dentro del directorio de reGeorg, al FTP como “tunnel.php”, en el directorio destino /tmp. Y le damos permisos para que el usuario www-data pueda copiarlo dentro de /site/. Filezilla es genial para esto. Con lectura para todos es suficiente.

Subir un fichero con filezilla para poder crear un tunel

Lo copiamos a su sitio:

Copiar el archivo al directorio correcto a fin de hacer la llamada de socket

Y ahora ya podemos acceder, mediante el proxy socks en el puerto 8080 de nuestro pc:

Tunel creado con greenend putty en el puerto 8080

En el Putty , tenéis que configurarle el proxy socks (puerto 8080) y para dentro.

Comprobamos si lo hemos hecho bien, consultando el fichero de flag:

Comprobamos consultando el fichero de flag

Ahora hay que escalar privilegios. Para saber lo que tendremos que buscar, antes vemos la versión de sistema operativo y kernel (lo habíamos hecho antes desde la misma shell):

Sistema operativo y versión de Kernell

Ubuntu 16.04.1 LTS con un kernel 4.4.0-31-generic. Hay multitud de herramientas que buscan vulnerabilidades de kernel, malas configuraciones, credenciales, etc.

Me puse a buscarlo a mano y encontré esta aplicación que me pareció curiosa:

Script del usuario en el history

Me llamó la atención porque lo vi en el histórico del usuario cuando accedí:

¿Otro señuelo?

Si lo abrimos con Ghidra , vemos una función xsh. Puede verse también key, arc4, etc. Me sonaba de haberlo visto antes.

Decompilar archivo backup con Ghidra

Se trata de una utilidad que trata de evitar que los ficheros shell scripts estén accesibles directamente, para ello generan un binario (este binario, con el contenido del script cifrado), se descifra y ejecuta. Aquí os dejo una utilidad para obtener el código fuente del script original antes de cifrarlo.

Vemos como funciona.

Herramienta de Hacking Yanncam

Ahora tenemos en backup.sh el script que tratan de ocultar.

Fichero Backup.txt

Antes de esto lo comprobé con strace, vi como se cargaba ese “cat” desde multitud de directorios

Errorres en el sistema detectados con Strace

Dicho esto, pasamos a la vulnerabilidad que nos hace root de la máquina, seguro que no es la única, pero sí la primera que se prueba, siendo el sistema operativo y kernel que es, como no, Dirty Cow .

La máquina tiene gcc para que podamos compilarlo y ejecutarlo directamente.

DirtyCow_en_Vulnhub

Comprobamos la flag para saber si todo ha ido bien y eso es todo, amigos!

Nos vemos en el próximo post.

Hasta otra!!