Cyborg - TryHackMe

SUMMARY

Debemos encontrar dos banderas en la maquina Cyborg. Donde a partir del escaneo de puertos con Nmap pude saber que hay un servicio SSH y HTTP. Luego, realice fuerza bruta de directorios sobre el directorio raíz del servidor web, encontrando una aplicación web en desarrollo, cuyo código fuente contenía un enlace hacia un archivo tar y una página web, que nos indicaba sobre una copia de seguridad cifrada hecha por Alex. Además, otro recurso escondido fue un directory list donde uno de sus archivos contenía un hash de la copia de seguridad, que logre crackearlo con Hashcat. Luego, en el archivo tar encontré un repositorio Borg Backup donde logré extraer la copia de seguridad, que contenía las credenciales del usuario Alex. Luego, para la escalada privilegio vertical utilice un script, que podía ejecutar el usuario Alex con los privilegios de root, y que era una tipo de backdoor que me permitía ejecutar comandos 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 Cyborg should wo. 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 Cyborg should wo.

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 Cyborg should wo. 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 -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 servidor web Apache levantado en el puerto 80. Además, a partir del script http-title, se puedo saber que hay una pagina web con la etiqueta title igual a “Apache2 Ubuntu Default Page: it Works”. Debido a este valor, podemos deducir que se trata de la pagina web que viene por defecto al instalar el programa servidor web.
  • Un servicio SSH levantado en el puerto 22, y el programa servidor web que esta corriendo, y la versión del programa servidor.

Ahora realizaremos fuerza bruta de directorios con Wfuzz sobre el directorio raíz del servidor web con el fin de encontrar recursos escondidos.

Podemos observar que la herramienta llego a encontrar dos recursos.

Ahora accederemos al recurso admin a través de mi navegador web.

Código Fuente:

Podemos observar que el recurso admin se trata de una pagina web que forma parte de una aplicación web en desarrollo. Además, si analizamos el código fuente de la página web, nos encontramos con varias etiquetas HTML <a>. Donde una de las etiquetas contiene un atributo href que contiene un enlace hacia otra pagina web llamada admin, y otra de las etiquetas contiene un atributo href que contiene un enlace hacia un archivo tar.

Ahora accederemos al recurso admin.html desde nuestro navegador web.

Código Fuente:

Podemos observar en la página web, una conversación entre los usuarios Josh, Adam y Alex. Adema, el usuario Alex hace énfasis de que ha dejado los archivos de configuración del servidor proxy Squid, esparcidos. Además, ha realizado una copia de seguridad llamada music_archive, y posiblemente esta cifrado ya que dice que está bien protegida.

Ahora accederemos al recurso etc desde mi navegador web.

Podemos observar que el recurso etc se trata de un directory list que contiene un archivo de configuración del servidor proxy Squid utilizado en el sistema destino, y contiene un archivo que contiene posiblemente la contraseña o clave, que protege o cifra la copia de seguridad music_archive, en forma de hash.

FASE GANAR ACCESO O EXPLOTACION O HACKING

Ahora intentaremos crackear este hash con Hahscat, pero primero debemos identificar el tipo de función o algoritmo Hash está utilizando. Para ello utilizamos la herramienta en línea

Podemos observar que la herramienta llego a crackear el hash.

Ahora enumeraremos y extraemos los archivos contenidos en el archivo tar que encontramos en la aplicación web en desarrollo.

Podemos observar que se ha comprimido un directorio con varios archivos en el archivo tar. Además, si analizamos el contenido del archivo README, nos topamos que se trata de que el directorio final_archive se trata de un repositorio Borg Backup, que viene a ser un software de código abierto, utilizado para crear copias de seguridad mediante la técnica de la deduplicacion, por lo que te permite crear copias de seguridad incrementales, ahorrando espacio y la cantidad de almacenamiento para copias de seguridad. Además, este software te brinda la opción de cifrar tus copias de seguridad.

Ahora realizaremos la restauración de la copia de seguridad music_archivo del usuario Alex.

Podemos observar que lograr observar que el usuario Alex ha realizado una copia de seguridad de su directorio Home. Donde logramos encontrar sus credenciales de inicio de sesión.

Ahora iniciaremos sesión el sistema destino siendo el usuario Alex y mediante el servicio SSH.

Podemos observar que llegamos acceder al sistema destino siendo el usuario alex.

FASE ESCALADA PRIVILEGIOS

Ahora debemos buscar un vector de escalada privilegios con el fin de ser un usuario con privilegios más elevados. Para ello enumeraremos los programas o comandos que el usuario alex puede ejecutar con SUDO con el fin de ejecutarlos con privilegios mas elevados.

Podemos observar que el usuario Alex puede ejecutar el script backup con los privilegios del usuario root.

Ahora analizaremos los comandos que se ejecutaran en segundo plano cuando ejecutemos el script backup.

  1. Primero se va a enumerar todas las rutas de los archivos con extensión mp3 utilizando el comando find, y se va a escribir sus rutas dentro del archivo backed_up_files utilizando el comando tee, y a la vez se mostrara en pantalla el contenido del archivo backed_up_files.
  2. Luego, se asignará la ruta del archivo backed_up_files en la variable input.
  3. Luego, se utiliza getopts dentro de un bucle while, con el fin de iterar sobre el argumento o parámetro c. Además, la cadena c: representa el parámetro o argumento valido que el script espera. Además, debido a que después del parámetro c le sigue un : , es necesario ingresar un valor al parámetro c. Luego, este valor se va a almacenar en la variable flag, y se va a utilizar case dentro del bucle whle para insertar el valor de la variable flag hacia la variable command.
  4. Luego, se almacenará varias rutas de archivos mp3 en la variable backup_files.
  5. Luego, se almacenará una ruta especifica en la variable dest.
  6. Luego, se almacenará el nombre del sistema destino en la variable hostname cuyo valor va a ser utilizado posteriormente para crear un nombre de archivo con la extensión tgz. Además, este nombre de archivo va a ser almacenado en la variable archive_file.
  7. Luego, se imprimirá un mensaje a través del comando echo que va contener las rutas de los archivos mp3, la ruta almacenada en la variable dest y archive_file.
  8. Luego, se utilizará el comando tar para almacenar todos los archivos mp3 en un archivo tar. Además, se utilizará el parámetro z para realizar una comprensión sobre el archivo tar, utilizando el formato de comprensión gzip.
  9. Luego, se ejecutará el valor de la variable command, y su resultado se almacenará en la variable cmd con el fin de ser mostrado en pantalla a través del comando echo.

A partir de este análisis, podemos concluir que este script Shell es utilizado para generar un archivo tar comprimido a partir de varios archivos mp3. Además, este script viene a ser un tipo de backdoor ya que te permite ejecutar el script ingresando un parámetro c con su valor, que viene a ser un comando que se va a ejecutar en el sistema destino con los privilegios del usuario root. Además, los resultados de los comandos que digitemos a través del parámetro c se van a mostrar en pantalla.

Ahora pondremos a prueba esta hipótesis, ejecutando el comando whoami mediante el parámetro c en el script backup.

Podemos observar el resultado del comando whoami. Por lo tanto, nuesta hipotesis estana en lo correcto.

Ahora ejecutaremos un comando que el asigne el bit SUID al archivo binario ejecutable bash con el fin de poder ejecutar una Shell Bash con los privilegios del usuario root siendo el usuario Alex.

De esta manera realizamos una escalada privilegio vertical.

Ahora buscaremos las dos banderas en los archivos user.txt y root.txt.