Serve - Walkthrough
Introducción

Fase de reconocimiento
Lanzamos un escaneo ARP dentro de la red para identificar su dirección IP. En este caso al ser una máquina Linux virtualizada en VMware se ve claro por el OUI de la MAC que tiene la dirección IP 192.168.1.41 asignada.
Escaneamos los puertos de la máquina víctima y encontramos que tanto el puerto 22 (SSH) como el 80 (HTTP) están abiertos.
Enumeramos los servicios de los puertos abiertos en busca de versiones e información adicional.
Ahora con la herramienta whatweb realizaremos una enumeración de las tecnologías web. No se encuentra nada interesante.
Fase de explotación
Empezaremos realizando una búsqueda de directorios y archivos potencialmente sospechosos en busca de alguna fuga de información. Encontramos dos directorios llamados webdav y secrets más un fichero de texto plano llamado notes.txt.
Accedemos al directorio web webdav y nos encontramos con una autenticación HTTP básica. Al no tener unas credenciales válidas poco podemos hacer.

Revisamos el contenido del archivo notes.txt. Por el mensaje, es probable que exista algún tipo de base de datos que guarde credenciales en el directorio secrets.
Realizaremos una búsqueda de archivos con extensiones SQL o KDBX dentro del directorio secrets. Estas extensiones suelen ser las mas comunes en cuanto a bases de datos. Encontramos un archivo con extensión KeePass.
Para confirmar de que tipo de archivo se trata, lo descargamos y con la herramienta file confirmamos que se trata de KeePass.
En este punto nos encontramos que no tenemos la contraseña maestra para poder abrir la base de datos KeePass por lo que no podremos acceder.
Existe una utilizad llamada keepass2john que viene junto a la herramienta john, donde es posible sacar el hash de la contraseña maestra de una base de datos kdbx y volcarlo en un archivo de texto plano.
Con john ya podemos probar de romper el hash mediante el diccionario rockyou.txt (no se publica la contraseña encontrada).
Con el cliente KeePassXC se procede a abrir la base de datos kdbx encontrada. El cliente se instala con el siguiente comando.

Introducimos la contraseña encontrada para acceder.

Encontramos las credenciales del usuario admin que según el mensaje del archivo notes.txt son las credenciales para acceder al recurso webdav.

El mensaje del archivo notes.txt también incluía lo siguiente.
Esto hace entender que hay que sustituir las X por números. Crearemos un diccionario que incluya en un archivo todos los números de 000 a 999. Para ello creamos un script en python que nos automatice esta acción y vaya volcando todo en un archivo llamado diccionario.txt.
Ejecutamos el script y tenemos el diccionario de 1000 lineas donde se incluyen todos los números del 000 al 999.

Con el diccionario hecho, procederemos a realizar fuerza bruta contra el directorio webdav. Para ello utilizaremos hydra (no se publica la contraseña encontrada).
Accedemos al recurso web y realizamos el login con las credenciales.

Teniendo acceso al directorio, probamos de subir un archivo de prueba y saber si sería posible subir una reverse shell para entablar una conexión.
Creamos el archivo prueba.txt y con la herramienta curl podemos hacer uso de la opción -T para hacer la subida del archivo. Añadimos las credenciales mediante el parámetro -u ya que el recurso esta protegido por autenticación HTTP básica. El recurso ha sido creado, buena señal.
Procedemos a copiar una reverse shell que viene por defecto en Kali para su modificación y posterior subida. En este caso se modificará el nombre de la reverse shell a shell.php.
Modificamos los campos IP (dirección IP Kali) y port.

Abrimos el puerto 4444 con netcat.
Subimos al recurso webdav la reverse shell PHP modificada.
Accedemos vía navegador al recurso webdav y abrimos al archivo shell.php para que se ejecute el fichero PHP y recibir la reverse shell.

Una vez ganado el acceso, realizamos el tratamiento de la tty.
Para conocer el tamaño de las filas y columnas, puedes ejecutar el siguiente comando en un terminal básico de tu máquina Kali.
En la primera fase de reconocimiento, parece que el usuario www-data tiene permisos para ejecutar el comando wget como el usuario teo sin necesidad de proporcionar una contraseña, interesante.
En wget existen unos parámetros llamados --post-data y --post-file los cuales con el primero es posible enviar una cadena de texto y el segundo un archivo mediante una petición wget.
Abrimos el puerto 2323 de nuestra máquina para recibir los datos enviados mediante el parámetro --post-data de wget.
Realizamos una prueba enviando una cadena de texto a través de una petición POST con wget.
Recibimos correctamente la petición POST con la cadena de texto.
Viendo que el servicio SSH esta abierto y existe un usuario llamado teo, trataremos de obtener la clave privada id_rsa del usuario. Utilizamos el parámetro --post-file para pasar el contenido del fichero mediante una petición POST a nuestra máquina Kali.
Recibimos la petición POST con la clave privada.

Antes de probar una conexión con la llave privada se recomienda modificar los permisos del archivo id_rsa. Para ello ejecutar chmod 400 id_rsa para que solo pueda ser leído por el propietario y no por grupos ni otros.
Probamos la conexión pero al no tener la passphrase.
Con la herramienta ssh2john podemos generar un hash de la clave privada id_rsa.
Con john romperemos el hash y sacamos la contraseña de la clave privada del usuario teo.
Accedemos vía SSH.
Escalada de privilegios
Listamos que tipo de ejecuciones puede lanzar el usuario teo con privilegios de sudo. Es curioso que pueda ejecutar algo llamado bro como root.
Obtenemos mas información acerca de que tipo de archivo se trata. Nos encontramos ante un script programado en Ruby.
Este script en Ruby es un archivo ejecutable que se utiliza para correr una aplicación llamada bropages, la cual probablemente proporciona una interfaz para acceder a las páginas de manual (man pages) de forma más amigable o interactiva.
Ejecutamos el script sin pasarle ningún tipo de parámetro.
Ejecutamos el script pasandole como parámeto la herramienta curl.
Nos damos cuenta que el script nos muestra una especie de shell o algo por el estilo parecido a vim.

Ejecutamos una bash dada su ruta absoluta y al ser un script ejecutado con permisos de sudo, nos dará una bash root.
Encontramos las 2 flags tanto del usuario teo como de root.
Última actualización