flagSoulmate HackTheBox (Easy)

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-09-21 07:03 EDT
Nmap scan report for soulmate.htb (10.10.11.86)
Host is up (0.033s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (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-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
|_http-title: Soulmate - Find Your Perfect Match
|_http-server-header: nginx/1.18.0 (Ubuntu)
4369/tcp open  epmd    Erlang Port Mapper Daemon
| epmd-info: 
|   epmd_port: 4369
|   nodes: 
|_    ssh_runner: 41779
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 8.13 seconds

Veremos varios puertos interesantes, entre ellos el puerto 80 que suele alojar una pagina web, pero estamos viendo que redirige a un dominio en concreto llamado soulmate.htb, por lo que vamos añadirlo a nuestro archivo hosts.

Ahora si entramos a la web mediante el dominio veremos lo siguiente:

Info:

Veremos una pagina web dedicada a citas, pero no veremos nada mas interesante, por lo que vamos a realizar un poco de fuzzing a ver que podemos ver.

Si por ejemplo nos creamos una cuenta en el boton Get Started, y despues iniciamos sesion con dicha cuenta creada recientemente, veremos esto:

Vemos cosas interesantes, entre ellas que podremos establecer una foto de perfil, esto suele tener vulnerabilidades de un RCE u otro tipo de vulnerabilidades, pero vamos a investigar un poco mas la web a ver que mas podemos encontrar.

Si subimos una imagen normal a nuestro perfil y despues le damos a abrir en nuestro navegador para ver donde se guarda dicha imagen, veremos la siguiente ruta:

Ya sabemos que se guarda en dicha ruta y con una serie de numero junto con el nombre de nuestro usuario.

No veremos nada interesante, vamos a ver si tuviera algun subdominio interesante, por lo que vamos a realizar un fuzzing.

FFUF

Una vez que ya nos hayamos descargado el listado de subdominios, vamos a realizar el fuzzing.

Info:

Veremos que ha funcionado, por lo que vamos añadir dicho subdominio a nuestro archivo hosts de esta forma:

Lo guardaremos y si entramos a dicho subdominio veremos lo siguiente:

Info:

Veremos un login con un software llamado CrushFTP, vamos a investigar la version en la que esta corriendo por si fuera una version vulnerable la cual pudieramos explotar de alguna forma.

No veremos ninguna version, pero si veremos un exploit asociado a el en el que podremos crear una cuenta de usuario, aprovechando una vulnerabilidad del software, vamos a probar si funciona.

URL = CrushFTP CVE-2025-31161arrow-up-right

Info:

Veremos que ha funcionado aparentemente, vamos a entrar con dichas credenciales que se acaban de crear, una vez dentro veremos que ha funcionado viendo lo siguiente:

Si investigamos que hace este software veremos que hay un boton Admin, si entramos ahi, nos iremos a User Manager, dentro de este campo podremos ver usuarios a la izquierda, vamos a seleccionar el usuario crushadmin y veremos lo siguiente:

Vamos a ir /etc/passwd y nos lo vamos a pasar a la derecha quedando de esta forma:

Ahora si le damos a Save abajo a la derecha y nos vamos a Files veremos lo siguiente:

Vemos que se nos paso bien el archivo, vamos a darle un click y se nos descargara, si leemos dicho archivo...

Veremos que ha funcionado, pero esto solo nos sirve de informacion unicamente, no veremos que haya un usuario creado como tal, por lo que seguramente tendremos que acceder mediante una reverse shell.

Si nos vamos al usuario ben veremos que esta compartiendo la carpeta webProd...

Si entramos dentro veremos lo siguiente:

Vemos que esta compartiendo la carpeta donde se aloja la pagina web, vamos a crear la carpeta test dentro de este directorio, por lo que vamos a cambiarle las credenciales a dicho usuario, para conectarnos con el.

En ese campo de password pondremos la que queramos, le damos a Save en la parte de abajo derecha y nos deslogueamos, cuando estemos en el login, pondremos las credenciales establecidas:

Una vez dentro, veremos lo siguiente:

Dentro de este directorio, vemos la carpeta llamada test donde depositaremos nuestro archivo de webshell.php, dentro de test haremos lo siguiente.

Vamos a darle a Add files:

Echo esto seleccionaremos nuestro webshell.php:

webshell.php

Veremos esto:

Dentro de esta opcion ya seleccionada de archivo, le daremos a Upload que esta a la derecha, con esto veremos que habremos subido bien dicho archivo y ahora en la carpeta veremos esto:

Ahora antes de acceder al archivo, vamos a ponernos a la escucha:

Estando a la escucha, si nos vamos a la siguiente URL que es donde hemos depositado dicho archivo...

Veremos una pantalla en blanco, pero si volvemos a donde tenemos la escucha, veremos lo siguiente:

Ha funcionado, por lo que vamos a sanitizar la shell.

Sanitización de shell (TTY)

Escalate user ben

Si investigamos un poco con linpeas.sh veremos un proceso como root bastante interesante que es el siguiente:

Vemos que esta ejecutando un start.escript seguido de muchos mas comandos, vamos a investigar dicho script.

Veremos esta linea interesante:

Vamos a probar dichas credenciales con el usuario ben por SSH de esta forma:

SSH

Metemos como contraseña HouseH0ldings998...

Veremos que estaremos dentro, por lo que vamos a leer la flag del usuario.

user.txt

Escalate Privileges

Si listamos los puertos que hay en la maquina:

Info:

Veremos varios, pero si empezamos a investigar cada uno de ellos, veremos el siguiente bastante interesante:

Info:

Vemos que esta utilizando una especie de SSH personalizado, por lo que vamos a probar a conectarnos por dicho SSH con las mismas credenciales del usuario ben, de esta forma:

Metemos como contraseña

Vemos que efectivamente estamos en una especie de shell, si probamos a ejecutar un comando como por ejemplo whoami:

Info:

Vemos que seremos root dentro de dicha shell, pero es que si ejecutamos hostname veremos lo siguiente:

Info:

No estamos dentro de un docker simplemente es la maquina principal victima, pero con otra interfaz de shell, pero para llegar a ser root por SSH haremos esto:

Ahora si nos salimos de la shell y entramos por SSH veremos lo siguiente:

Vemos que ha funcionado, por lo que vamos a ser root de esta forma:

Info:

Y con esto ya seremos root, por lo que leeremos la flag de root.

root.txt

Last updated