Revenge - TryHackMe

SUMMARY

Debemos encontrar dos banderas en la maquina Revenge V3. Donde a partir del escaneo de puertos de Nmap pude saber que hay un servicio HTTP, SSH. Además, con un script de Nmap supe que hay un sitio web almacenado en el servidor web. Luego, realice una fuerza bruta de directorios con gobuster, llegando a encontrar dos formularios HTML para los administradores y clientes del sitio web. Luego, me encontré con la vulnerabilidad Blind SQli al momento de observar los productos que mostraba el sitio web. Luego, realice una enumeración manual y automatizada con sqlmap sobre las bases de datos que consultaba el sitio web, llegando a encontrar unas credenciales de un usuario local del sistema objetivo. Luego, accedí al sistema destino utilizando el servicio SSH y las credenciales. Luego, realice una escalada de privilegios modificando el contenido del archivo de configuración del servicio duckyinc por una reverse Shell con el fin de reiniciar el servicio. Por último, realice un ataque Defacement sobre la pagina de inicio del sitio web.

FASE RECONOCIMIENTO

En este caso hemos sido contratado por Billy que era un empleado de la compañía Rubber Ducky Inc, y nos ha pedido que realicemos una intrusión hacia un servidor web de la compañía con el fin de realizar un ataque Defacement sobre la página de inicio del sitio web de la compañía, que consiste en cambiar la apariencia visual de la página web. Aquí esta la nota de el si queremos saber todos los detalles de la misión.

Para cumplir con la misión que nos ha encargado Billy, empezaremos utilizando el comando openvpn con el fin de establecer una conexion VPN con la red virtual donde esta la maquina Revenge V3. 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 ip de la maquina Revenge V3.

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 Revenge V3. 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:

  • Hay un servicio HTTP que se está levantado en el puerto 80, y el programa servidor HTTP que se está corriendo. Además, la versión del programa servidor
  • Hay un servicio SSH que se está levantado en el puerto 22, y el programa servidor SSH que se está corriendo. Además, la versión del programa servidor SS
  • A través del script http-title.nse de Nmap se pudo capturar el valor de la etiqueta o elemento HTML title, que viene a ser el titulo de una pagina web almacen servidor web.

Ahora, observamos la página web desde mi navegador web.

Podemos observar que la pagina web viene a ser la pagina de inicio de un sitio web, que consta de varias paginas web para diferentes enfoques. Uno de las pa viene a ser un formulario HTML que consta de dos parámetros llamados Username and Password. Además, podemos observar que el atributo acción del formu tiene el valor de #, esto nos indica que el formulario no enviara los valores que introduzcamos en los parámetros a ningún valor. Por lo tanto, no podemos intera este formulario HTML.

Ahora realizaremos fuerza bruta de directorios de una forma automatizada con la herramienta gobuster con el fin de encontrar recursos escondidos en el direct del servidor web. Además, utilizaremos el parámetro -x para encontrar recursos escondidos con la extensión txt y php.

Podemos observar que la herramienta llego a encontrar tres recursos escondidos: admin, static, requirements.txt, cuyos códigos de estado HTTP son 200 y 301 por lo que si podemos acceder a ellos a través de nuestro navegador web.

Ahora observaremos el recurso admin desde mi navegador web.

Podemos observar que el recurso viene a ser un formulario HTML destinado para la autenticación del administrador del sitio web, pero si observamos el código fuente, nos encontramos con el mismo problema descrito con el formulario HTML destinado para la autenticación de los clientes del sitio web. Por lo tanto, no podemos interactuar con el formulario HTML.

Ahora observaremos el recurso static desde mi navegador web.

Podemos observar que nos arroja el código de estado 403 cuando intentamos observar el recurso. Por lo tanto, no podemos acceder ael.

Ahora observaremos el recurso requirements.txt desde mi navegador web.

Podemos observar que el recurso se trata de una lista de paquetes Python junto con sus respectivas versiones.

Ahora observaremos los productos que ofrece el sitio web a través de la página web products con el fin de poder observar si obtenemos algún parámetro GET que identifique a cada producto.

Podemos observar que las URL asociadas a cada producto se diferencia en un valor numérico que lo mas probable venga a ser el valor que se le da al parámetro GET con el fin de que el sitio web realice sus consultas SQL hacia su base de datos y de esa manera pueda obtener la información de cada producto y lo pueda mostrar a través del navegador web.

FASE GANAR ACCESO O HACKING O EXPLOTACION

Ahora intentaremos probar si el sitio web es vulnerable a Blind SQLi. Para ello insertaremos consultas SQL maliciosas al lado del valor numérico con el fin de saber si la aplicación web sanatiza correctamente los valores que le pasaremos al parámetro GET.

Podemos observar que el sitio web no sanatiza correctamente los valores que se pasaran al parámetro GET, que utiliza el sitio web para realizar sus consultas SQL hacia su base de datos. Además, aprovechando esta vulnerabilidad, pudimos enumerar los nombres de las bases de datos que esta siendo gestionados por el DBMS en el sistema destino.

Ahora enumerare todas las tablas de la base de datos duckyinc utilizando la siguiente consulta SQL.

Podemos observar que la base de datos duckyinc consta de tres tablas. Donde lo mas probable es que la tabla system_user tenga información sobre los administradores del sitio web, y la tabla user tenga información sobre los clientes del sitio web.

Ahora enumeraremos las columnas de la tabla user.

Podemos observar que la tabla user tiene muchas columnas, pero las columnas que mas nos interesa son:username y _password.

Ahora volcaremos los registros de las columnas username y _password.

Podemos observar que llegamos a obtener las credenciales de todos los clientes de la compañía, pero para acceder al sistema destino necesitamos las credenciales de los administradores o del administrador del sitio web.

Ahora enumeraremos los nombres de las columnas de la tabla system_user.

Podemos observar que la tabla system_user consta de 4 columnas.

Ahora volcaremos los registros de las columnas username y _password.

Podemos observar tres usernames con sus respectivos hashes, que al parecer están usando el algoritmo hash bcrypt.

Otra manera que pudimos haber automatizado este proceso es utilizando la herramienta sqlmap.

Podemos observar que con la herramienta sqlmap llegamos a enumerar todas las bases de datos gestionadas por el DBMS ejecutado en el sistema destino.

Ahora intentaremos enumerar todas las tablas de la base de datos duckyinc con la herramienta sqlmap.

Podemos observar que la herramienta llego a enumerar todas las tablas de la base de datos duckyinc.

Ahora intentaremos volcar todos los registros de las columnas de la tabla system_user con la herramienta sqlmap.

Podemos observar que con la herramienta sqlmap llegamos a volcar todos los registros de las columnas de la tabla system_user.

Ahora, intentaremos crackear el hash asociado con el username server-admin utilizando John the Ripper.

Ahora con las credenciales del usuario server-admin intentaremos acceder al sistema destino mediante el servicio SSH suponiendo que el usuario server-admin ha reutilizado sus credenciales.

Podemos observar que llegamos obtener acceso al sistema destino siendo el usuario server-admin.

FASE ESCALADA DE PRIVILEGIOS

Ahora debemos buscar un vector de escalada de privilegios con el fin de ser un usuario con privilegios más elevados. Para ello enumeraremos los comandos y programas que puede ejecutar el usuario server-admin con los privilegios del usuario root.

Podemos observar que el usuario server-admin puede ejecutar los comandos /bin/systemctl start duckyinc.service, /bin/systemctl enable duckyinc.service, /bin/systemctl restart duckyinc.service, /bin/systemctl daemon-reload, sudoedit /etc/systemd/system/duckyinc.service con los privilegios del superusuario root. Además, todos estos comandos están relacionados con la gestión del servicio duckyinc. Por lo tanto, el usuario puede iniciar, habilitar, reiniciar, y editar el archivo de configuración del servicio, que viene a ser /etc/systemd/system/duckyinc.service.

Ahora que sabemos que podemos editar el archivo de configuración del servicio duckyinc, editaremos su contenido para que nos genere una conexión reverse Shell al momento de que volvamos a iniciar el servicio.

Contenido original del archivo de configuración del servicio duckyinc.

Contenido modificado del archivo de configuración del servicio duckyinc.

Ahora que hemos realizado cambios en el archivo de configuración del servicio debemos el comando /bin/systemctl daemon-reload con el fin de que los cambios se apliquen inmediatamente sin la necesidad de reiniciar el sistema.

Ahora reiniciaremos el servicio duckyinc con el siguiente comando y con el fin de que se nos genere una reverse Shell, pero antes debemos habilitar el puerto 1700 en nuestro sistema para que escuche la conexión entrante de la reverse Shell.

De esta manera llegamos a ser el superusuario root en el sistema destino.

Ahora vamos a cumplir con nuestra misión de realizar el ataque Defacement sobre la pagina de inicio del sitio web. Para ello primero nos dirigiremos hacia el dicterio raíz del sitio web con el fin de buscar el documento HTML index.html, que viene a ser la pagina de inicio. Luego, borraremos todo su contenido original y escribiremos el mensaje Defaced.

Podemos observar que hemos logrado cambiar la apariencia visual de la pagina de inicio del sitio web. Por lo tanto, nuestra misión esta hecha.

Ahora observaremos las dos banderas contenidas en los archivos flag2.txt y flag3.txt. Para localizar los archivos utilizaremos el comando find, y buscaremos desde el directorio /, archivos con sus nombres.