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: 
 
