Vulnversity – TryHackMe Walkthrough

Vulnversity – TryHackMe Walkthrough

Hoy toca resolver la máquina Vulnversity de TryHackMe, en ella, gracias al reconocimiento podremos localizar un panel de subida de ficheros con un filtro de extensión bastante débil que usaremos para subir una shell reversa para obtener un primer acceso al sistema, seguidamente gracias a un binario con permisos SUID lograremos escalar privilegios hasta root.

Información importante sobre la máquina

Dirección IP

Nivel de dificultad

10.10.25.251

Fácil

Reconocimiento

Lo primero, como siempre, se empieza analizando los 65535 puertos con nmap, para ello:

nmap -Pn --min-rate=5100 -n -p1-65535 –open <IP>
clear ya funciona

Puertos abiertos de la máquina

Como puedes ver, están los puertos 21,22,139,445,3128 y 3333 abiertos, ahora toca hacer un escaneo más profundo con nmap para sacar más información, tan profundo como el dolor que sentiste cuando la viste con otro, para ello:

nmap -sVC -T4 -p21,22,139,445,3128,3333 <IP> -oN nmapResult
clear ya funciona

Escaneo profundo con nmap

Vemos que en el puerto 3333 hay lo que parece ser un servidor apache, evidentemente este no es un puerto común para este tipo de servicio, pero no por eso quita que no pueda correr ahí, por ende, hagamos enumeración típica para este tipo de servicio, tanto para obtener un poco más de información sobre las tecnologías que usa como para detectar si hay un WAF protegiéndolo:

clear ya funciona

Resultado de wafw00f

No parece haber ningún WAF protegiendo esta aplicación web, ahora antes de entrar a la aplicación en cuestión, no está de más ver un poco sobre las tecnologías que está empleando, para esto podemos usar un sinfín de herramientas, una muy simple de usar es whatweb:

clear ya funciona

Resultado de whatweb

Vemos que hay un servidor apache, que aparentemente estamos ante una máquina con una distribución de GNU/Linux que es Ubuntu y bueno, entrando como tal al sitio web, podemos ver que es el sitio web de una universidad:

clear ya funciona

Página principal del sitio web

Al inspeccionar tanto la página actual como su código fuente, no hay nada de utilidad, por lo que toca realizar fuzzing con gobuster (a mí me gusta gobuster, puedes usar WFuzz, fuff, dirsearch, una cuchara o una pala, queda al gusto), para ello:

gobuster dir -u http://<ip>:3333 -w <wordlist> -o gobusterResult
clear ya funciona

Resultado de gobuster

Al hacerlo, veremos que hay un directorio que no es nada común, llamado “internal”, ahora toca ver que hay ahí:

clear ya funciona

Panel de subida de ficheros

Se puede apreciar que tenemos un panel para subir ficheros, en este punto lo que se me ocurre es subir una shell reversa escrita en php y como pudimos detectar que la web trabaja con php, de esta forma conseguir ejecutarla y obtener un primer acceso al sistema, así que, para ello, me cree una shell reversa en php muy sencilla que es la siguiente:

clear ya funciona

Código de la shell reversa a usar

Puedes llamarla como quieras, es importante que sea un nombre identificativo para que puedas reconocerla, yo la llamare “larompepaneles.php”, en este punto solo intentar subirla en dicha página web en cuestión, pero claro, al hacerlo veremos lo siguiente:

clear ya funciona

Filtro del panel de subida no deja subir varios tipos de extensiones, entre ellos, .php

No se permite este tipo de extensión, esto en líneas generales y ya hablando de entornos reales, está muy bien en una aplicación web, que haya una lista blanca de extensiones de ficheros que se pueden subir, esto va a añadir más muros de seguridad de cara a ciberdelincuentes, ahora, esto es un CTF y evidentemente hay muchas formas de burlar estos sistemas si no están bien hechos del todo, lo que podemos hacer en este punto es abrir Burp Suite, interceptar la petición y usando el intruder con una lista de extensiones, poder ver cuales nos permite subir esta aplicación web, así que primero abrimos Burp y configuramos el proxy en el navegador (yo suelo usar FoxyProxy para esta labor):

clear ya funciona

Configuración del proxy 

Explotación

Con el proxy configurado, toca realizar nuevamente la petición de subida de un fichero, al hacerlo, veremos la petición en el proxy de Burp:

clear ya funciona

Petición capturada

Mandamos esta petición al intruder con Ctrl + I o con clic derecho y “Send to intruder”, en este punto debemos eliminar cualquier posición seteada por defecto y añadir solo la que nos interesa, que es la extensión del fichero:

clear ya funciona

Petición en el Intruder de Burp Suite

Con esto listo, nos vamos a la pestaña de “Payloads” y hay que cargar una lista de palabras, si usas una distribución como Kali o Parrot, tendrás listas de palabras de todo, incluyendo de extensiones, yo creare una lista pequeña que contendrá las siguientes extensiones:

clear ya funciona

Lista de extensiones a usar

Ahora, cargamos esta lista de palabras en el apartado “Payload Options” (también, pudimos escribirlas cada una dentro de este apartado en lugar de crear un fichero y subirlo, pero te muestro el proceso en el caso de que vayas a usar una lista larga):

clear ya funciona

Configuración del la lista en Burp Suite

clear ya funciona

Lista importada y configurada

Con todas las configuraciones hechas, ya podemos iniciar el intruder, al hacerlo veras que hay una extensión que muestra un número de longitud de respuesta distinto a las demás que es la extensión phtml, además si vemos el render de la respuesta, veremos que el fichero en cuestión con esta extensión sí se subió con éxito:

clear ya funciona

Se obtiene una extensión válida para eludir el filtro

En este punto, ya la shell esta subida, ahora hay que localizarla, para ello podemos volver a usar gobuster para identificar el directorio donde se alojan los ficheros que se suben a través de este panel, por lo generale s un directorio dentro del directorio que contiene el panel de subida de ficheros, por lo que, sobre este mismo haremos el fuzzing, para ello:

gobuster dir -u http://<ip>:3333/internal -w <wordlist> -o gobusterResult-internal
clear ya funciona

Resultado de gobuster sobre el directorio /internal

En el resultado veremos que hay un directorio llamado “uploads” que es más que evidente lo que hay ahí, al revisarlo, podremos ver a nuestra querida rompe paneles:

clear ya funciona

Directorio donde se almacenan los ficheros subidos 

En este punto, solo queda ejecutarla, pero antes hay que ponernos a la escucha en el puerto asignado en la shell, en mi caso fue el 443, así que para ello:

nc -lvnp 443

y ejecutar la shell desde el navegador, al hacerlo con el puerto 443 a la escucha, ya tenemos un primer acceso al sistema:

clear ya funciona

Primer acceso al sistema

Ahora toca hacer un tratamiento de la tty para obtener una sesión tan estable como tu mente cuando dejes a la tóxica y una vez dejada la sesión estable, podemos leer la bandera de usuario:

clear ya funciona

Obtención del user.txt

Escalación de privilegios

Ahora toca escalar privilegios hasta root, enumerando la máquina pude percatarme que cuenta con un binario con permisos SUID que podemos usar para escalar privilegios a root, este es systemctl:

clear ya funciona

Binario systemctl con permisos SUID

Ahora, podemos ver la forma de escalada de privilegios del siempre confiable GTFOBins:

clear ya funciona

Forma de escalar privilegios según GTFOBins

Como tal la forma de escalada que nos pone ahí nos conducirá a solo poder ejecutar el comando “id” como root, como lo ves en el valor de la variable “ExecStart”, no nos interesa eso, queremos ser root como tal, entonces en este punto hay varias maneras, una seria usar el comando chmod para asignar permisos de SUID igualmente a un binario que podamos ejecutar luego, por ejemplo, la shell bash o sh, lo haremos con sh para variar, así que en este punto el código a usar sería el siguiente, todo igual solo que modificando el valor de la variable “ExecStart”:

TF=$(mktemp).service
echo '[Service]
Type=oneshot
ExecStart=/bin/sh -c "chmod +s /bin/sh > /tmp/output"
[Install]
WantedBy=multi-user.target' > $TF
/bin/systemctl link $TF
/bin/systemctl enable --now $TF

Al hacerlo, deberemos ejecutar el binario /bin/sh con la bandera “-p” debido a que no estamos usando nuestro UID y GID principales y debemos partir de los EUID y EGID (ya que estamos ejecutando un binario con permisos SUID) y, con esto ya tendríamos un acceso como root y podremos leer la bandera:

clear ya funciona

Escalación de privilegios a root y obtención del fichero root.txt

Únete al servidor de Discord de Coldd Security y aprende ciberseguridad cada día.

Calificación

  • Dificultad de acceso: 2% 2%
  • Dificultad de escalación de privilegios: 3% 3%

He hecho esta puntuación basándome en estos valores propios:

Fácil1% – 30%

Medio: 31% – 70%

Difícil: 71% – 100%

Anuncio

Sobre el Autor

Martin Frias

Founder of Coldd Security

1 comentario

  1. Cristina

    Tu forma de explicar es tan única <3

    Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información adicional sobre protección de datos:
Responsable: Martin Frias.
Finalidad: Moderar los comentarios de este sitio web.
Cesión: NO se cederán a nadie, salvo obligación legal.
Derechos: Acceso, rectificación, cancelación y borrado de tus datos.
Legitimación: Tu consentido expreso.

REDES SOCIALES

Newsletter

Estadísticas

  • 230.971

0

Share This