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:

ping

My initial Nmap scan:

nmap
nmap

Add the machine in /etc/hosts:

etc

Samba (SMB) port

Enumerate Samba (SMB) shares:

smb
smb

I searched inside the downloaded files, but all of them were rabbit holes:

image
image
image
image
image

HTTP port

First step was to use WhatWeb and Wappalyzer:

whatweb
wappalyzer

Using the WPScan tool to scan the WordPress, I found possible users:

wpscan
wpscan

Using bruteforce with the possible users, I found a password for the user “kwheel”:

wpscanBruteforce
wpscanBruteforce

The version 5.0 of WordPress has a RCE vulnerability. In order to exploit this, I used Metasploit:

metasploit
metasploit

I uploaded LinPEAS script for system enumeration. The uploaded script (LinPEAS) found a suspicious binary called “checker” with SUID activated:

LinPEAS

Using metasploit, I downloaded the binary file to examine it in local with Cutter (Graphical radare2):

Cutter
Cutter

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:

Root

User Flag:

UserFlag

Root Flag:

RootFlag


Blog Walkthrough [ES]

[Task 1] Blog

Desplegar la máquina y esperar 5 minutos a que se configure:

ping

Escaneo inicial con Nmap:

nmap
nmap

Añadimos la IP de la máquina en el /etc/hosts para que no nos de ningún tipo de problema:

etc

Puerto Samba (SMB)

Enumeramos el puerto Samba (SMB) y los recursos compartidos que haya.

smb
smb

En mi caso, investigué individualmente los ficheros del Samba pero todos ellos eran rabbit holes que no nos llevaban a ningún lado:

image
image
image
image
image

Puerto HTTP

El primer paso fue hacer uso de WhatWeb y Wappalyzer para saber cómo estaba construida la web:

whatweb
wappalyzer

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.

wpscan
wpscan

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:

wpscanBruteforce
wpscanBruteforce

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.

metasploit
metasploit

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”.

LinPEAS

Haciendo uso de Metasploit, decidí descargarlo para examinarlo más exhaustivamente en local, en mi caso con Cutter (Radare2 en versión gráfica):

Cutter
Cutter

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:

Root

User Flag:

UserFlag

Root Flag:

RootFlag

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.

Alberto Fernandez-de-Retana
Alberto Fernandez-de-Retana
PhD Student

Kaixo! PhD Student at University of Deusto under supervision of Igor Santos-Grueiro and Pablo G. Bringas. My research interests include web security & privacy. In my free time I love to be pizzaiolo.