Jack - TryHackMe

SUMMARY

Debemos encontrar 2 banderas. Primero, a partir de un escaneo de puertos pude saber que un servidor web se estaba ejecutando en el puerto 80 y que alojaba un sitio web desarrollado con el CMS WordPress. Luego, utilice WPScan para enumerar plugins, themes, y usernames del sitio web, logrando encontrar tres usernames válidos para acceder al portal de gestión CMS. Luego, realice un ataque de fuerza bruta de contraseñas contra el login del CMS logrando encontrar las credenciales de un usuario que no tenia el rol de Administrador, pero debido a la vulnerabilidad asociada con la versión del Plugin User Role Editor es que pude asignarle el rol de Administrador logrando modificar el código fuente de un archivo PHP de uno de los plugins utilizados por el sitio web con el fin ejecutara una reverse Shell. Luego, en la escalada privilegio horizontal, logre encontrar una clave privada SSH del usuario local Jack. Luego, en la escalada vertical, logre asignar el bit SUID al archivo binario bash mediante la vulnerabilidad Python Library Hijacking a partir de un script Python que era ejecutado de manera periódica y automatizada.

RECONOCIMIENTO ACTIVO

En este caso debemos acceder al sistema destino y obtener dos banderas. Primero, empezaremos utilizando el comando openvpn y el archivo de configuración OpenVPN con el fin de establecer una conexión VPN y poder acceder a los laboratorios donde están las máquinas virtuales y vulnerables.

Además, la plataforma de Tryhackme nos muestra la dirección IP de la máquina Python Playground.

FASE ESCANEO Y ENUMERACION

Ahora pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del sistema destino. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo del sistema destino.

Los resultados que obtenemos son:

  • Un programa servidor SSH que se ejecuta en el puerto 22.
  • Un programa servidor Apache que se ejecuta en el puerto 80 y que aloja un sitio web desarrollado con el CMS WordPress.

Ahora accederemos a la pagina de inicio del sitio web mediante el navegador web.

Podemos observar que nos topamos con un mensaje de error con un nombre de dominio desconocidos. Ademas, este error suele aparecer cuando los registros DNS asociados al nombre de dominio no estan alojados en un servidor DNS publico por lo que debemos indicarle a nuestro navegador web que ese nombre de dominio esta asociado con la dirrecion IP del sistema destino. Esto lo hacemos en el archivo /etc/hosts de nuestro sistema.

Podemos observar que el sitio web se trata de un blog personal del usuario Jack donde realizar diversas posts.

FASE GANAR ACCESSO

Ahora aprovecharemos que el sitio web ha sido desarollado mediante el CMS WordPress para utilizar WPSCan y realizar una enumeracion de usernames, plugins y themes utilizados.

Podemos observar que la herramienta logro obtener algunos usernames validos que podemos utilizar en el login del CMS WordPress para acceder a su portal de gestion. Ademas, no enumerar ningun plugin utilizado por el sitio web, y logro enumerar un theme poco conocido.

Ahora realizaremos un ataque de fuerza bruta de contraseñas contra el login con WPScan pero lo mas logico seria utilizar un wordlist pequeño porque si utilizo rockyou seria algo de 3 millones de combinaciones por los tres usernames que tendria que probar la herramienta. Por tal motivo utilizare el wordllist fasttrack que viene por defecto en la distribucion Kali Linux y que tiene 222 lineas, y las combinaciones a probar por los tres usernames serian 666.

Podemos observar que la herramienta logro encontrar la credencial de wendy, pero al acceder al portal de gestion con los privilegios de wendy nos damos cuenta de que no tiene los privilegios para modificar o subir algun theme o plugin. Ademas, la herramienta no pudo enumerarnos ningun plugin utilizado en el sitio web, y solo nos enumero un theme que esta desctualizado en su version pero no tienen ninguna vulnerabilidad asociada a su version y que tenga un exploit documentado en Internet.

Debido a que no tengo mas vectores de ataque, tendre que recurrir a la pista brindada en el enunciado del laboratorio.

Podemos observar que en la pista hace mencion sobre un termino desconocido llamado user_other_roles, pero si buscamos exploit de WordPress relacionados con este termino nos topamos con una vulnerabilidad que se presenta cuando un sitio web utiliza el plugin User Role Editor en versiones inferiores 4.25. Ademas, esta vulnerabilidad le permite a un usuario autenticado con privilegios minimos poder tener los privielgos de un admin dentro del panel de gestion del CMS. Para ello debemos capturar la solicitud POST realizada cuando queremos actualizar nuestro perfil desde la ruta /wp-admin/profile.php. Luego, en la solicitud POST debemos agregar el parametro user_other_rules con el valor administrator para asignarlos el rol de admin en el panel de gestion del CMS.

Ahora comprobaremos de manera manual a pesar de que WPScan no detecto el plugin User Role Editor.

Podemos observar que logramos aignar el rol Adminsitrador al usuario wendy en el panel de gestion del CMS exitosamente. Ademas, comprobamos que el sitio web si utilizaba el plugin User Role Editor en una version vulnerable.

Ahora modificaremos el codigo fuente del archivo askimet.php del Plugin Akismet utilizado en el sitio web. Todo ello con el fin de ejecutar una reverse shell cuando se ejecute su contenido cuando lo observemos a traves del navegador web.

De esta manera logramos acceder al sistema destino mediante la vulnerabilidas en el Plugin User Role Editor y un Plugin Injection.

Ahora realizaremos un tratamiento de nuestra reverse shell con el fin de hacerlo mas interactiva y estable.

FASE ESCALADA PRIVILEGIOS

Ahora debemos buscar vectores de escalada de privilegios de manera manual en el sistema de archivos.

Podemos observar que en el directorio home del usuario local jack se encontro la primera bandera en el archivo user.txt. Luego, en un archivo llamado reminder.txt, me encontre un mensaje que hace referencia a unos backups. Por tal motivo es que revise el sudirectorio backups del directorio var, logrando encontrar la clave privada SSH del usuario jack. Esto ultimo lo deduje debido a que en el directorio home del usuario jack habia el directorio oculto .ssh.

Ahora accederemos al sistema destino mediante el servicio SSH y con la clave privada del usuario local jack.

De esta manera realizamos una escalada de privilegios vertical siendo el usuario local jack.

Otra cosa que se me vino a la mente cuando lei el archivo reminder.txt, es que podia ejecutarse un script de manera automatizado para generar los backups. Por tal razon utilice la herramienta pspy64 para observar los procesos que se ejecutan en tiempo real.

Podemos observar que se ejecuta un script Python de manera automatizada cada cierto tiempo y con los privilegios de root. Ademas, podemos observar que no tenemos los permisos de escritura sobre el script Python y tampoco tenemos permiso de escritura sobre el directorio donde esta alojado. Por lo tanto, no podemos modificar el contenido del script ni suplantarlo. Ademas, observamos que el script Python realiza un import para importar la librería os. Por tal razon lo primero que se me viene a la mente es realizar un Python Library Hijacking, pero debido a que no podemos crear ningun archivo en el directorio actual del script, debemos buscar la ruta de la librearia os con el fin de saber si tenemos los permisos de escritura sobre el.

Podemos observar que si tenemos el permiso de escritura sobre la librería os ya que pertencemos al grupo family. Debido a esto es que voy a aprovechar en agregar algunos comandos al final del contenido de la librería. Estos comandos van a importar la librería legitma os con el fin de usar el metodo system y ejecutar un comando que habilite el bit SUID al binario de bash.

Ahora solo esperaremos que el interprete de Pytho importe la librería os y ejecute su contenido para poder ejecutar una shell Bash con los privilegios de root.

De esta manera logramos realizar una escalada privilegio vertical siendo el usuario root, y encontrando la ultima bandera.