Strutted HackTheBox (Intermediate)

Escaneo de puertos

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn <IP>
nmap -sCV -p<PORTS> <IP>

Info:

Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-02 05:20 EDT
Nmap scan report for 10.10.11.59
Host is up (0.031s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 3e:ea:45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
|_  256 64:cc:75:de:4a:e6:a5:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open  http    nginx 1.18.0 (Ubuntu)
|_http-title: Did not follow redirect to http://strutted.htb/
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.33 seconds

Veremos varios puertos interesantes entre ellos el puerto 80 que aloja una pagina web la cual vemos que nos esta redirigiendo a un dominio llamado strutted.htb, por lo que vamos añadirlo a nuestro archivo hosts.

Lo guardamos y entramos en dicho dominio, entrando veremos una pagina web normal y corriente, nada fuera de lo normal, pero si le damos al boton Download veremos que se nos descarga un archivo .zip, si lo descomprimimos veremos lo siguiente:

Info:

Veremos que es como una especie de backup de la propia pagina web, por lo que vamos a investigar a ver que vemos.

Si leemos el archivo tomcat-users.xml veremos lo siguiente:

Veremos que hay unas credenciales de administrador del propio tomcat del manager, pero si intentamos acceder veremos que no nos deja al manager da un error en la URL por lo que lo puede tener desactivado.

Tambien si leemos el pom.xml:

Veremos algo bastante interesante entre estas dos cosas, vemos que el software de Struts es vulnerable por la version conocida como 6.3.0.1 que vemos en el pom.xml, si buscamos informacion veremos que en este repositorio esta el PoC.

URL = Exploit Upload File CVE-2024-53677

Por lo que vemos nos da unas instrucciones de como se debe subir un archivo y modificarlo añadiendo el siguiente payload:

Lo que tenemos que hacer es descargarnos una imagen real, despues la vamos a subir en la pagina donde pone upload, pero antes de subirla abriremos BurpSuite y capturaremos la peticion poniendonos en mitad de la escucha:

Una vez capturada tendremos que cambiar la peticion algo asi:

VISTA GRAFICA:

Lo que hice fue eliminar la mitad del contenido de la imagen y añadir este contenido en JSP para ejecutar comandos a nivel del sistema, tambien super importante en el primer upload lo cambiamos por Upload con la U mayuscula (name="Upload"):

Despues añadir la cabecera del payload para que el archivo se deposite como .jsp y realizando un path Traversal para que este al principio de la pagina y podamos acceder.

Response:

Si vemos esta respuesta del servidor es que ha funcionado de forma correcta, por lo que si accedemos de esta forma:

Info:

Veremos que funciona este archivo que hemos inyectado a traves de la peticion, ahora vamos a establecer una shell hacia el servidor de esta forma:

shell.sh

Vamos abrirnos un servidor de python3 para que descargue el archivo desde la pagina y lo guarde en /tmp.

Vamos a ponernos a la escucha de seguido:

Ahora si ejecutamos estos comandos en la pagina:

Si vamos a donde tenemos la escucha, veremos lo siguiente:

Veremos que ha funcionado, por lo que vamos a sanitizar la shell.

Sanitización de shell (TTY)

Escalate user

Si probamos a reutilizar la contraseña de tomcat-users.xml que encontramos en el backup de antes de la pagina veremos que no funciona, pero vamos a leer el que esta dentro del servidor a ver si es igual.

Info:

Vemos que es diferente y hay otra contraseña IT14d6SSP81k, si probamos con esta por SSH:

SSH

Metemos como contraseña IT14d6SSP81k...

Veremos que ha funcionado, por lo que leeremos la flag del usuario.

user.txt

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar el binario tcpdump como el usuario root, por lo que vamos hacer lo siguiente:

Info:

Ahora si comprobamos si ha funcionado:

Info:

Veremos que funciono, por lo que haremos lo siguiente:

Info:

Con esto veremos que ya seremos root, por lo que leeremos la flag de root.

root.txt

Last updated