Dreaming - TryHackMe

SUMMARY

Debemos encontrar 1 bandera. Primero, a partir de un escaneo de puertos pude saber que había un servidor web que alojaba un sitio web con contenido estático y que admitía conexiones desde el puerto 80 Además, había otro sitio web que admitía conexiones desde el puerto 8080 pero su directorio raíz estaba protegido por un mecanismo de autenticación. Luego, realice fuerza bruta de directorios en el directorio raíz del primer sitio web, logrando encontrar un username valido para ser usado en un ataque de fuerza bruta contra el login. Luego, pude saber que el segundo sitio web estaba siendo gestionado con el CMS Joomla. Luego, con la fuerza bruta de directorios realizada por “Nikto” , logre encontrar un archivo Zip que contenía un archivo SQL con diversas instrucciones SQL donde una de ella contenía las credenciales del usuarioadmin, pero su contraseña estaba en forma de hash, que logre crackearlo fácilmente, logrando acceder al portal de gestión del CMS. Luego, en el portal de gestión del CMS, logre modificar el código fuente de un template utilizado por el sitio web, para ejecutar una reverse Shell. En la escalada de privilegio vertical, aproveche que el usuario “www-data” pertenecía al grupo “lxd” para ejecutar un contenedor Linux donde montaría todo el sistema de archivos del sistema anfitrión en uno de sus directorios. Además, ejecute una Shell con los privilegios de root en el contenedor con el fin de poder asignarle el bit SUID al binario de “Bash”, y lograr ejecutar una Shell Bash con los privilegios de root en el sistema anfitrión.

FASE RECONOCIMIENTO

En este caso debemos acceder al sistema destino y obtener las 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. Además, la plataforma de Tryhackme nos muestra la dirección IP de la máquina Dreaming v1.2.

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.

Los resultados que obtenemos son:

  • Un programa servidor SSH que se ejecuta en el puerto 22.
  • Un programa servidor HTTP que se ejecuta en el puerto 80. Ademas, podemos observar la etiqueta “title” de la pagina web que viene por defecto en la instalacion del programa servidor Apache.

Ademas, si accederemos a la pagina web que viene por defecto en la instalacion del programa servidor Apache con el fin de saber si no han dejado algun comentario util en su codigo fuente, no obtendremos nada. Ahora, realizaremos fuerza bruta de directorios en el directorio raiz del servidor web en busca de recursos escondidos.

Podemos observar que logramos encontrar un directorio llamado “app” que viene a ser el directorio raiz de un sitio web desarrollado y gestionado con el CMS Pluck. Ademas, podemos observar la version del CMS en la URL.

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora buscaremos vulnerabilidades del CMS asociada a la version “4.7.13”.

Podemos observar que el CMS presenta la vulnreabilidad “File Upload” pero antes debemos acceder al portal de gestion del CMS.Por lo tanto probaremos diversas contraseñas por defecto como “password”, “root”, “administrator” en el login.

Podemos observar que logramos acceder al portal de gestion del CMS con la contraseña “password”. Ahora analizaremos el payload utilizado en el exploit apr

Ahora si analizamos el payload del exploit podemos observar que se sube un archivo PHP pero con la extension “.phar” con el fin de eludir la restriccion de la funcionalidad de carga de archivos del CMS. Ahora replicaremos esto de manera manual en nuestro caso.

De esta manera logramos obtener acceso al sistema destino. Ahora, realizaremos tratamiento de la reverse shell para hacerla mas interactiva y estable.

FASE ESCALADA DE PRIVILEGIOS

Ahora buscaremos vectores de escalada de privilegios de manera manual con el fin de buscar vectores de escalada de privilegios

Podemos observar que se logro encontrar un script Python llamado “test” donde tenemos el permiso de lectura y cuyo grupo secundario viene a ser el usuario local “lucien”. Ademas, este script contiene un password que lo mas proable es que sea del usuario local “lucien”. Ahora intentaremos iniciar sesion con este password siendo “Lucien”.

Podemos observar que logramos realizar una escalada de privilegios horizontal siendo el usuario lucien. Ahora, seguiremos buscando mas vectores de escalada de privilegiios.

Podemos observar que tenemos el permiso de lectura sobre un script Python llamado “getDreams” cuyo grupo secundario es el usuario local “death”. Ademas, si analizamos su contenido podemos observar que se realizara una conexión hacia la base de datos MySQL “library” con el fin de obtener los registros de las columnas “dreamer” y “dream”. Luego, se ejecutar el comando “echo” con el fin de imprimir en la pantalla los registros de las columnas, solo en el caso de que los registros no esten vacios. Ademas, podemos observar que el passowrd de “death” esta ofuscado. Ademas, otra cosa que podemos observar que los valores de los reigstros se le pasan al comando “echo” sin ninguna validacion por lo que podemos crear registros con el comando de sustitucion “$()” en las columnas “dreamer” y “dream” con el fin ejecutar comandos en el sistema operativo a traves de este script, es decir, este script es vulnerable a “Command Injection”.

Ahora seguiremos buscando mas vectores de escalada de privilegios.

Podemos observar que lorgamos encontrar la contraseña del usuario “lucien” para poder acceder al DBMS MySQL que se ejecuta en el sistema y poder interactuar con las base de datos. Ademas, podemos observar que el usuario “lucien” puede ejecutar el script “getDreams.py” con los privilegios de “death” mediante el comando sudo. Por lo tanto, todas las variables esta predispuestas para explotar la vulnerabilidad “Command Injection” y ejecutar una reverse shell.

De esta manera logramos realizar una escalada de privielgio horizontal siendo el usuario “death”. Ahora realizaremos un tratamiento a nuestra reverse shell, y a seguir enumerando mas vectores de escalada de prvilegios.

Podemos observar que tenemos el permiso de lectura sobre un script Python llamado “restore” cuyo grupo secundario es “morpheus”. Ademas, si analizamos el codigo de este script, nos topamos que ejecutara la funcion “copy2” del modulo Python “shutil” con el fin de copiar el contenido del archivo “kingdom” en otro archivo con el mismo nombre pero diferente ruta. Ademas, si analizamos el contenido del archivo destino “kingdom”, nos damos cuenta que no esta vacio. Por lo tanto, podemos deducir que el script “restore” se ejecuta de manera periodica. Ahora, utilizaremos pspy para saber con que privilegios se ejecuta este script.

Podemos observar que el script “restore” se ejecuta con los privilegios del usuario cuyo id es “1002” que viene a ser “morpheus”. Ademas, podemos observar que tenemos el permiso de escritura sobre el modulo “shutil”. Ahora ingresaremos un comando en el bloque de codigo de la funcion “copy2” con el fin de ejecutar una reverse shell con los privilegios de “morpheus”. Esta tecnica creo que es llamada “Python Library Hijacking”.

De esta manera logramos realizar unas escalada de privilegio horizontal siendo el usuario “morpheus”. Ahora realizaremos un tratamiento de la reverse shell, y seguiremos enumerando vectores de escalada de privilegios.

Podemos observar que el usuario “morpheus” puede ejecutar cualquier comando con los privilegios de root mediante el comando sudo. Por lo tanto, ejecutaremos una shell bash con los privilegios de root.

De esta manera logramos realizar unas escalada de privilegio vertical siendo el usuario “root”. Ahora buscaremos las tres banderas.