GamingServer - TryHackMe
Can you gain access to this gaming server built by amateurs with no experience of web development and take advantage of the deployment system.
Summary
- IP: 10.10.43.138
- Ports: 22,80
- OS: Linux
- Services & Applications:
- 22 -> OpenSSH 7.6p1 Ubuntu 4ubuntu0.3
- 80 -> Apache httpd 2.4.29
Recon
- Escaneo básico de puertos:
$nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.10.43.138 -oG allPorts
- Escaneo profundo de puertos encontrados:
$nmap -p22,80 -sCV 10.10.43.138 -oN targeted
Análisis de página web (Port 80):
- Al entrar a la página web principal podemos ver la siguiente interfaz:
- Hacemos enumeración de cada apartado disponible y no encontramos nada útil, sin embargo, si revisamos el código fuente podemos encontrar la siguiente linea:
-
Hemos encontrado un posible usuario potencial del sistema: john.
-
Hacemos enumeración de directorios con Gobuster:
$gobuster dir -u 10.10.43.138 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 200
- Encontramos el directorio “/secret”, lo abrimos:
SSH id_rsa cracking with ssh2john.py
- Encontramos un archivo “secretKey” y analizamos su contenido:
-
Todo parece indicar que se trata de una id_rsa encriptada.
-
Con la información que tenemos hasta ahora, podemos probar crackear la id_rsa que hemos encontrado para validar que pertenezca al usuario que habíamos encontrado anteriormente (john) y acceder al sistema vía SSH sin contraseña.
-
Primero, para crackear la id_rsa la guardamos en un archivo y la convertimos en un hash válido usando ssh2john para luego aplicar fuerza bruta con John The Ripper:
- Bingo! hemos encontrado la contraseña del id_rsa que encontramos en la web, ahora le damos permisos de ejecución al archivo de identificación y lo usamos para acceder por SSH como el usuario “john” proporcionando la contraseña que hemos crackeado:
- Hemos ganado acceso al sistema como el usuario “john” y podremos leer la primera flag.
ESCALADA DE PRIVILEGIOS:
Abuso de grupo “lxd”
- Si ejecutamos el comando “id” para verificar en qué grupo está el usuario john, encontramos lo siguiente:
- Como vemos, el usuario “john” pertenece al grupo “lxd”, buscamos vulnerabilidades sobre esto con searchsploit:
- Leemos en qué consiste la script en bash:
# Step 1: Download build-alpine => wget https://raw.githubusercontent.com/saghul/lxd-alpine-builder/master/build-alpine [Attacker Machine]
# Step 2: Build alpine => bash build-alpine (as root user) [Attacker Machine]
# Step 3: Run this script and you will get root [Victim Machine]
# Step 4: Once inside the container, navigate to /mnt/root to see all resources from the host machine
- Así que descargamos el archivo que nos indica en nuestra máquina atacante, para luego aplicarle el build:
- Obtendremos un archivo “.tar.gz”, este y la srcipt en bash los debemos transferir máquina víctima:
— Máquina Atacante
—Máquina Víctima
- Por último, le damos permisos de ejecución a la script y la ejecutamos pasándole como argumento el archivo “.tar.gz”:
-
Y como podemos apreciar, ya seríamos root, PEEERO hay que tener en cuenta que nos encontramos en un contenedor, no en la máquina real.
-
Todos los archivos de la máquina real los podremos visualizar en el directorio “/mnt/root”
-
Para salir del contenedor podemos modificar el archivo “/etc/sudoers” de la máquina real, añadiendo las siguientes lineas para decirle al sistema que cualquier usuario podrá usar el comando sudo sin necesidad de usar contraseña:
ALL ALL=(ALL) NOPASSWD: ALL
-
Hecho esto, guardamos el archivo y salimos del contenedor con el comando “exit”.
-
Siendo nuevamente el usuario “john” en la máquina real solo resta ejecutar el comando “sudo su” para escalar privilegios y seremos ROOT pudiendo leer la última flag: