Jarvis - HackTheBox

6 minute read

En este post se explicarán los pasos que se han seguido para conseguir vulnerar la seguridad de la máquina Jarvis en Hack The Box, tal y como se refleja, es un sistema Linux con un nivel de dificultad medio (4.7).

Ilustración 1: Jarvis.

Se procedió a realizar un escaneo de servicios y puertos haciendo uso de NMAP:

Ilustración 2: Comando NMAP usado.

Ilustración 3: Resultados de la ejecución del comando NMAP.

Como se puede observar existen dos puertos en los que se ejecuta un servicio Apache (80 y 64999) y el puerto 22 está habilitado para SSH.

La web que se muestra en el puerto 80 es la siguiente:

Ilustración 4: Web stark hotel.

En el puerto 64999 aparece el siguiente mensaje:

Ilustración 5: Mensaje que aparece realizando una petición GET en el puerto 64999.

Se hizo una primera revisión en la web que se ejecuta en el puerto 80 para intentar recabar más información o hallar alguna vulnerabilidad, pero a simple vista no se detectaba nada reseñable. Así que se ejecutaron las herramientas DIRB y Nikto en los dos servicios Apache.

  • DIRB:

Ilustración 6: DIRB en 10.10.10.143:80.

Ilustración 7: DIRB en 10.10.10.143:64999.

  • Nikto:

Ilustración 8: Nikto en 10.10.10.143:80.

Ilustración 9: Nikto en 10.10.10.143:64999.

Lo más destacado de las pruebas que se realizaron, fue el descubrimiento de la ruta de la herramienta phpMyAdmin (permite administrar una base de datos MySQL desde el navegador) en la web que da servicio en el puerto 80. Además, el DIRB proporcionó rutas de interés, propias de esta herramienta, como son setup y sql.

Ilustración 10: Panel de login de la herramienta phpMyAdmin en 10.10.10.143:80/phpmyadmin/.

Ilustración 11: Posibilidad de acceder a las opciones que se encuentran en 10.10.10.143:80/phpmyadmin/setup/.

Ilustración 12: Acceso a los ficheros almacenados en 10.10.10.143:80/phpmyadmin/sql/.

En un principio se intentó vulnerar la seguridad del phpMyAdmin modificando la configuración de éste desde la ruta 10.10.10.143:80/phpmyadmin/setup/, puesto que tener acceso a dicha ruta presenta una gran vulnerabilidad para el sistema, tal y como se explica en este post:. No se consiguió obtener nada por esta vía así que se buscó algún CVE para la versión de la herramienta (4.8.0).

Ilustración 13: Versión de phpmyadmin (4.8.0).

Para la versión de phpMyAdmin que está instalada en la máquina Jarvis se encuentra el CVE-2018-12613 (https://nvd.nist.gov/vuln/detail/CVE-2018-12613), del cual hay bastante información de como se puede realizar y en qué consiste (https://medium.com/@happyholic1203/phpmyadmin-4-8-0-4-8-1-remote-code-execution-257bcc146f8e, https://www.youtube.com/watch?v=bT-00ZUTq0o, https://www.exploit-db.com/exploits/4502 y https://www.rapid7.com/db/modules/exploit/multi/http/phpmyadmin_lfi_rce). El primer escoyo para llevar a cabo la explotación de esta vulnerabilidad es la obtención del usuario y contraseña que permiten el acceso a la herramienta.

Se investigó más en profundidad la web Stark Hotel en busca de información que pudiera servir para conseguir los requerimientos mínimos de explotación de la vulnerabilidad encontrada. Se observó que cuando se accede a la página web de las habitaciones de hotel, el código de selección de la habitación seleccionada se envía por un parámetro (cod) en la url a un fichero con extensión PHP (room.php), lo que puede dar la posibilidad de que exista una inyección SQL en el parámetro mencionado si se realiza una consulta a la base de datos sin filtrar el contenido introducido vía url.

Ilustración 14: Posible inyección SQL en la url http://10.10.10.143/room.php?cod=1.

Por tanto, se lanzó sqlmap para comprobar la existencia de alguna inyección SQL:

Ilustración 15: Ejecución de sqlmap parte 1.

Ilustración 16: Ejecución de sqlmap parte 2.

Una vez obtenida las bases de datos se procedió a obtener las tablas de la base de datos mysql:

Ilustración 17: Segunda ejecución sqlmap parte 1.

Ilustración 18: Segunda ejecución sqlmap parte 2.

Ilustración 19: Segunda ejecución sqlmap parte 3.

Obtenidas las tablas de la base de datos se procedió a realizar un dump de la tabla user:

Ilustración 20: Tercera ejecución sqlmap parte 1.

Ilustración 21: Tercera ejecución sqlmap parte 2.

Ilustración 22:: Tercera ejecución sqlmap parte 3.

Ilustración 23: Tercera ejecución sqlmap parte 4.

Ilustración 24: Tercera ejecución sqlmap parte 5.

La inyección SQL resultó exitosa y se obtuvo un usuario (DBadmin) y contraseña (imissyou) que permite el acceso a la herramienta phpMyAdmin con privilegios de administrador:

Ilustración 25: Usuario y contraseña de phpMyAdmin.

Ilustración 26: Panel principal de phpMyAdmin.

Teniendo acceso al panel de phpMyAdmin se explotó la vulnerabilidad CVE-2018-12613, existe un exploit en metasploit (https://www.rapid7.com/db/modules/exploit/multi/http/phpmyadmin_lfi_rce) que lo realiza automáticamente, pero como hay que intentar alejarse de lo que haría un script kiddie, se explotó de forma manual y entendiendo los pasos que se realizaban.

Creación del payload que se ejecutará en la maquina víctima:

Ilustración 27: Haciendo uso de msfvenom para la creación del payload.

Creación de una base de datos en phpMyAdmin donde se introduzca el código malicioso:

Ilustración 28: Creación de la base de datos mrtux y la tabla mrtux con un campo varchar.

Ilustración 29: Copiando el ID de la sesión para su uso posteriormente.

Ilustración 30: Ejecución de la creación de la base de datos correctamente.

Se realiza una petición GET a la ruta del sistema donde se encuentra el fichero PHP con la sesión abierta en la cual se ha creado la base de datos con el código malicioso:

Ilustración 31: Ejecución del exploit.

Ilustración 32: Sesión de meterpreter abierta.

Se ejecutó correctamente y se obtuvo una sesión de meterpreter que permanecía a la escucha. Pero se tenía acceso al sistema con el usuario www-data que no poseía ningún privilegio para obtener ninguna flag.

Haciendo un reconocimiento interno se podía vislumbrar la siguiente información:

Ilustración 33: Puertos a la escucha en el sistema.

Ilustración 34: Ficheros en los que se tiene permisos privilegiados.

Ilustración 35: Procesos que se ejecutan en el sistema.

Existe un fichero (/var/www/Admin-Utilities/simpler.py) que es un programa escrito en Python, el cual pude ser ejecutado por el usuario www-data con permisos del usuario pepper. Analizando el código se puede ver:

Ilustración 36: Código en python parte 1.

Ilustración 37: Código en python parte 2.

Por tanto, si se realiza lo siguiente se obtiene la flag del user.txt:

Ilustración 38: Flag del user.

Lo siguiente fue obtener una shell del usuario pepper:

Ilustración 39: Ejecución del script que establece la comunicación de la shell.

Ilustración 40: Shell como usuario pepper.

Teniendo acceso al sistema como el usuario pepper se procedió a realizar otro reconocimiento en la máquina para determinar las opciones que se tenían para llevar a cabo una escalada de privilegios hasta conseguir acceso como usuario administrador (ejecutando LinEnum.sh).

Ilustración 41: Ficheros con el SUID habilitado.

El ejecutable /bin/systemctl tiene el SUID habilitado y permite ser ejecutado por el usuario pepper, esto quiere decir, que éste puede crear un servicio en el sistema que se ejecute con los privilegios del usuario administrador.

Para realizar lo explicado anteriormente se tomó apoyo de las siguientes referencias:

Primero se creo un servicio de prueba en el que se consiguió la flag del usuario root:

Ilustración 42: Creación de un servicio, ejecución y obtención de la flag de root.txt.

Por último, se ejecutó el mismo proceso para obtener una shell como usuario root y así ser administradores del sistema:

Ilustración 43: Creación y ejecución de un servicio para obtener una shell como usuario root.

Ilustración 44: Obtención de la shell como usuario root.

Como conclusión se podría decir que es una máquina que aporta muchos conocimientos centrados en la post explotación, permitiendo ser creativos y seguramente elegir entre varios caminos. En general una muy buena máquina como siempre.