Blog Walkthrough - TryHackMe [EN][ES]
Write-up of the room Blog - TryHackMe. Difficulty: Medium 🟠
Blog Walkthrough [EN]
[Task 1] Blog
Deploy the machine and wait 5 minutes:
My initial Nmap scan:
Add the machine in /etc/hosts:
Samba (SMB) port
Enumerate Samba (SMB) shares:
I searched inside the downloaded files, but all of them were rabbit holes:
HTTP port
First step was to use WhatWeb and Wappalyzer:
Using the WPScan tool to scan the WordPress, I found possible users:
Using bruteforce with the possible users, I found a password for the user “kwheel”:
The version 5.0 of WordPress has a RCE vulnerability. In order to exploit this, I used Metasploit:
I uploaded LinPEAS script for system enumeration. The uploaded script (LinPEAS) found a suspicious binary called “checker” with SUID activated:
Using metasploit, I downloaded the binary file to examine it in local with Cutter (Graphical radare2):
The functionality of the binary file is very simple. The binary file searches if the variable “admin” is set in the environment, and if it is, it sets the UID to 0 and returns a shell. Example:
int main(void) {
// getenv -> Searches for the environment string pointed to by name
// and return the associated value to the string
char *env = getenv("admin");
// Check if is it set or not
if (env == NULL) {
puts("Not an Admin");
} else {
// We want to enter in this part setting the variable "admin"
setuid(0);
system("/bin/bash");
}
return 0;
}
Finally, I exploited the SUID file setting “admin” environment:
User Flag:
Root Flag:
Blog Walkthrough [ES]
[Task 1] Blog
Desplegar la máquina y esperar 5 minutos a que se configure:
Escaneo inicial con Nmap:
Añadimos la IP de la máquina en el /etc/hosts para que no nos de ningún tipo de problema:
Puerto Samba (SMB)
Enumeramos el puerto Samba (SMB) y los recursos compartidos que haya.
En mi caso, investigué individualmente los ficheros del Samba pero todos ellos eran rabbit holes que no nos llevaban a ningún lado:
Puerto HTTP
El primer paso fue hacer uso de WhatWeb y Wappalyzer para saber cómo estaba construida la web:
En este caso la web hace uso de WordPress. Normalmente para hacer un reconocimiento de las webs que corren WordPress se hace uso de la herramienta especializada WPScan. A continuación, podemos observar que la herramienta nos proporciona posibles usuarios.
Teniendo unos posibles usuarios, y siendo en mi caso la última opción, tras buscar entrar de otra forma, haciendo uso de WPScan podemos lanzar un ataque de fuerza bruta contra el WordPress. La herramienta, después de varios minutos, nos consigue encontrar una contraseña para uno de los usuarios:
Después de tener las credenciales para entrar al WordPress, encontré que esa versión de WP, es decir la 5.0, tiene una vulnerabilidad RCE que nos permite ejecutar comandos. Para explotarlo, en mi caso, y sin que sirva de precedente, hice uso de Metasploit para obtener una sesión de meterpreter.
En este momento, en el que ya estamos dentro, lo primero fue revisar el fichero de configuración de WordPress, llamado wp-config, en el que se podía encontrar el usuario y la contraseña para la base de datos. Esa contraseña también servía para loguearte en el WordPress con el usuario bjoel, pero que no nos sirve de nada, dado que la aplicación WordPress se ejecuta solamente sobre el usuario del sistema www-data, por lo tanto, lanzar el RCE sobre “bjoel” o sobre “kwheel” no tiene diferencias. Por otra parte, intenté escalar al usuario del sistema bjoel haciendo uso de ella, dado que se suelen reutilizar contraseñas, pero en este caso no funcionó.
Por último se podía revisar con el cliente de mysql haber si encontrabamos algo fuera de lo normal dentro de la base de datos, pero en este caso tampoco. Tras una pequeña enumeración, decidí subir el fichero de enumeración LinPEAS. Con este script, conseguí encontrar un binario con permisos SUID bastante sospechoso que se llamaba “checker”.
Haciendo uso de Metasploit, decidí descargarlo para examinarlo más exhaustivamente en local, en mi caso con Cutter (Radare2 en versión gráfica):
La funcionalidad del binario era bastante simple. Al ejecutarlo, buscaba si la variable de entorno “admin” estaba definida, y en caso de estarlo, te cambiaba el UID a 0 y te devolvía una bash. Ejemplo:
int main(void) {
// getenv -> Busca la String de entorno a la que apunta
// el nombre que le indiques y devuelve el valor asociado
char *env = getenv("admin");
// Revisa si está definida o no
if (env == NULL) {
puts("Not an Admin");
} else {
// Nuestro objetivo es llegar a esta parte, para ello, debemos setear
// la variable "admin" a cualquier valor
setuid(0);
system("/bin/bash");
}
return 0;
}
Finalmente, explotamos el funcionamiento del binario seteando la variable:
User Flag:
Root Flag:
Esta sala llamada Blog, de la plataforma TryHackMe, tiene una fase inicial para tener una shell bastante sencilla, en la que tienes que aplicar fuerza bruta, pero a la vez, bastante irreal y estilo CTF. La escalada de privilegios, en cambio, es muy curiosa, dado que incluye nociones básicas de reversing de binarios para estudiar su funcionamiento. En mi caso, me costó bastante más la primera parte, debido a que lanzadole el fuzzeo de directorio de GoBuster ya se caía la máquina, por lo tanto no pensaba que tenía que hacer uso de fuerza bruta para la intrusión. En definitiva, ha sido una máquina bastante divertida de realizar.