Team - TryHackMe

SUMMARY

Debemos encontrar dos banderas. Donde a partir de un escaneo de puertos pude saber que hay un servicio Web, SSH, FTP. Además, gracias a un script de Nmap, logre determinar que hay un pagina web almacenada en el servidor web. Donde pude encontrar un nombre de dominio de un sitio web en desarrollo. Luego, realice fuerza bruta de directorios con Gobuster sobre el directorio raíz del sitio web, logrando encontrar un archivo con credenciales para acceder al servidor FTP. Donde pude encontrar un archivo compartido que contenía un subdominio de un sitio web en desarrollo que era vulnerable a LFI, permitiéndome acceder a un archivo local del sistema destino que contenía una copia de la clave privada SSH de un usuario local. Luego, en la escalada privilegio horizontal aproveche que podía ejecutar un script con los privilegios de otro usuario, y en la escalda vertical, aproveche que podía modificar un script ejecutado con los privilegios de root.

FASE RECONOCIMIENTO ACTIVO

En este caso debemos acceder al sistema destino y obtener las banderas. Para ello empezaremos utilizando el comando openvpn con el fin de establecer una conexión VPN con la red virtual dónde está la máquina Teamfinal. Para ello utilizaremos el archivo de configuración, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir información como la dirección del servidor VPN, los certificados y claves de seguridad, la configuración de encriptación, etc.

Luego de que se establece la conexión VPN se crea una interfaz virtual de red en nuestra máquina. Donde se enruta todo el tráfico de red a través de esa interfaz.

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

FASE ESCANEO Y ENUMERACION

Luego pasaremos a la fase de Escaneo y Enumeración con el fin de poder escanear los puertos del nodo. Además, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo de la máquina Teamfinal. Para ello utilizaremos Nmap. Donde le pasaremos los siguientes parámetros:

  • El parámetro -sC o –script=”default” para utilizar todos los scripts de la categoría default con el fin de realizar un escaneo y detección de los puertos de manera avanzada.
  • El parámetros -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
  • El parámetro -n para evitar la resolución DNS, y el parámetro –max-rate para indicarle el número máximo de paquetes por segundo que va a utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el tráfico generado por la herramienta.
  • El parámetro -Pn para evitar que Nmap, que realice ningún tipo de sondeo o ping hacia el sistema destino con el fin de determinar si el host está vivo o activo, y realice el escaneo de puertos directamente.
  • El parámetro -p- para realizar un escaneo de los 65535 puertos del nodo y el parámetro –open con el fin de que nos muestre información solo de los puertos abiertos.

Los resultados que obtuvimos del escaneo vienen a ser:

  • Un programa servidor web Apache levantado en el puerto 80. Además, gracias al script http-tittle obtuvimos el valor de la etiqueta HTML title de la página web que vie por defecto en la instalación del programa servidor Apache.
  • Un programa servidor SSH levantado en el puerto 22.
  • Un programa servidor FTP levantado en el puerto 21.

Ahora accederemos a la página web por defecto a través de mi navegador web.

Podemos observar en el código fuente de la página web, un nombre de dominio que puede ser de un sitio web en desarrollo que aún no es público.

Ahora agregaremos este nombre de dominio asociado con la dirección IP del sistema destino en mi archivo e/ tc/hosts con el fin poder acceder al nombre de dominio a través de mi navegador web y evitar que este realizando consultas DNS hacia los servidores DNS recursivos proveídos por nuestra ISP.

Podemos observar que se trata de un sitio web en desarrollo cuyo objetivo es que sus usuarios puedan publicar contenido en línea.

Ahora realizaremos fuerza bruta de directorios sobre el directorio raíz del sitio web con Gobuster.

Podemos observar que la herramienta llego a encontrar varios recursos escondidos. Ahora accederemos a cada uno a través de mi navegador web.

  • robots.txt

  • images

  • assets

  • scripts

Podemos observar que el archivo robots.txt contiene una palabra sin sentido, el recurso images viene a ser un directory listing de puras imágenes, y los recursos assets y scripts no podemos acceder a través del navegador web. Además, ya es conocido que el directorio assets contiene a menudo archivos CSS que serán utilizados en el sitio o aplicación web, pero el directorio scripts no es un recurso que se ve a menudo en el directorio raíz de un sitio web.

Ahora realizaremos fuerza bruta de directorios sobre el directorio scripts con Gobuster.

Podemos observar que la herramienta logro encontrar un archivo cuyo codigo de estado HTTP es 200, por lo tanto, si podemos acceder a el a través de nuestro navegador web. Además, si observamos su contenido, nos damos cuenta de un comentario que hace referencia de un cambio de extensión del archivo script original ya que contenía credenciales.

Ahora si tanteamos un poco con las ideas de viejo script y suponemos que la extensión es old y accedemos a el a través del navegador web se nos descargara el script original.

Podemos observar que el script original contiene unas credenciales de inicio de sesión en el servicio FTP.

Podemos observar que los recursos compartidos parecen pertenecer al directorio home de un usuario local en el sistema destino. Además, el directorio compartido .ssh no contiene ninguna clave privada o pública SSH, pero encontramos un archivo de texto en el directorio compartido workshare, y nos habla sobre un nuevo sitio web que está en desarrollo y que puede ser encontrado en el subdominio dev del dominio team.thm. Además, nos hablan de que se ha implementado una política de que los usuarios locales deben almacenar una copia de sus claves privadas SSH en un archivo de configuración.

Ahora agregaremos este nuevo subdominio a nuestro archivo /etc/hosts con el fin de poder acceder a el a través de mi navegador web.

Podemos observar que cuando accedemos al sitio web en desarrollo, nos topamos con una etiqueta HTML <a> con un enlace que nos redirige a un script PHP y un parámetro GET page para pasarle algún valor al script PHP.

Ahora intentaremos observar el contenido del script PHP a través del filtro PHP con el fin de observar el contenido del script PHP codificado en base64 para que no sea interpretado por el servidor web.

Podemos observar que el código del script PHP primero va a tomar el valor del parámetro GET page y lo almacenara en la variable file. Luego, se utiliza la función isset para comprobar si no tiene un valor nulo la variable file, y si es así, se ejecutará el contenido del archivo proveído en la variable file y se mostrara su salida visible en la página web. Además, en el caso de que tenga un valor nulo la variable file, se ejecutara el contenido del archivo teamshare.php aunque su salida no va a ser visible ya que va a ser interpretado por el servidor web.

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora que sabemos que no se ha implementado ninguna comprobación o verificación en el valor proveído en el parámetro GET page, podemos explotar la vulnerabilidad Local File Inclusion(LFI) para observar archivos sensibles del sistema destino.

Podemos observar en el archivo /etc/passwd que hay tres usuarios locales en el sistema destino: ftpuser, dale, y gyles.

Ahora utilizaremos Wfuzz para automatizar el proceso de saber a qué archivos locales del sistema destino podemos acceder con la cuenta del usuario bajo la cual se esta ejecutando el servidor web. Además, buscamos aquellos archivos de configuración relacionados con el servicio SSH ya que en algunos de ellos se puede haber almacenado la copia de la clave privada SSH de un usuario local.

De todos los archivos locales a los que podemos acceder hay uno que esta relacionado con el servicio ssh y viene a ser un archivo de configuración. Este es el archivo /etc/ssh/sshd_config.

Ahora accederemos a el a través del navegador web.

Podemos observar una copia de la clave privada SSH que le pertenece al usuario local dale.

Ahora utilizaremos esta clave privada SSH para acceder al sistema destino mediante el servicio SSH.

Podemos observar que logramos acceder al sistema destino siendo el usuario dale mediante su clave privada SSH.

FASE ESCALADA PRIVILEGIOS

Ahora buscaremos un vector de escalada privilegio en el sistema de archivos para ser un usuario con mayores privilegios.

Podemos observar que el usuario dale puede ejecutar un script en Bash con los privilegios del usuario local gyles y si enumeramos los permisos de control de acceso sobre el archivo, nos daremos cuenta de que no podemos modificar su contenido, pero si analizamos el código fuente del script, nos damos cuenta de a través del comando read nos piden ingresar date para que se almacenado en la variable error y sea ejecutado posteriormente, pero no se realiza ningún verificación o comprobación para asegurar de que el usuario solo ingrese date.

Podemos aprovechar esto para digitar otro comando diferente al date y ejecutarlo con los privilegios de gyles. Por ejemplo: whoami

Ahora ejecutaremos el comando /bin/bash para generar una nueva instancia de shell Bash con los privilegios de gyles.

De esta manera realizamos una escalada de privilegio horizontal.

Ahora buscaremos otro vector de escalada privilegio para ser un usuario con mayores privilegios. Para ello utilizaremos la herramienta pspy con el fin de observar que procesos se están ejecutando en el sistema en tiempo real.

Podemos observar que el usuario root(UID=0) ejecuta dos scripts en Bash de manera automatizada como si se tratasen de tareas cron. Además, observando sus permisos de control de acceso, podemos observar que solo podemos modificar el contenido del primero script. Por esa razón es que agregamos un comando en el script main_backup.sh que nos generara una reverse Shell con los privilegios del usuario root.

De esta manera realizamos una escalada privilegio vertical y encontramos la segunda bandera.