flagImagery 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-03 14:45 EDT
Nmap scan report for 10.10.11.88
Host is up (0.039s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 9.7p1 Ubuntu 7ubuntu4.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 35:94:fb:70:36:1a:26:3c:a8:3c:5a:5a:e4:fb:8c:18 (ECDSA)
|_  256 c2:52:7c:42:61:ce:97:9d:12:d5:01:1c:ba:68:0f:fa (ED25519)
8000/tcp open  http    Werkzeug httpd 3.1.3 (Python 3.12.7)
|_http-title: Image Gallery
|_http-server-header: Werkzeug/3.1.3 Python/3.12.7
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.65 seconds

Veremos que hay varios puertos interesantes entre ellos veremos un puerto 8000 el cual hay un python3 como servidor, si entramos dentro veremos una pagina web por lo que podremos creer que hay un server de tipo Flask.

Investigando un poco veremos que hay un boton llamado login, en el cual si entramos dentro veremos efectivamente un login, pero tambien a parte veremos un registro un poco mas abajo, si nos registramos con un email junto con una contraseña cualquiera, nos lleva al login de nuevo, metiendo dichas credenciales registradas veremos lo siguiente:

Vemos que podemos subir un archivo a la pagina en nuestro panel, pero solamente tienen que ser imagenes por lo que vemos.

Si bajamos en el footer veremos lo siguiente:

Vemos que hay una opcion mas en la cual no esta en la barra normal de arriba, si le damos veremos esta pagina:

Cuando vayamos a enviar el reporte, abrimos BurpSuite nos pondremos a la escucha para interceptar la peticion, ahora si enviamos la peticion y tenemos BurpSuite a la escucha veremos la siguiente peticion capturada:

Vemos que esta utilizando JSON para enviar la informacion, si probamos a enviar un XSS de esta forma, en la respuesta veremos esto:

Vemos que no dio ningun error, pero tampoco nos dio una informacion visual de si se esta reflejando o no, por lo que vamos a probar un XSS que intente obtener la Cookie del usuario que le llegue dicho mensaje.

Antes de enviarlo nos pondremos a la escucha para que nos llegue la peticion cuando alguien entre a dicho mensaje.

Si esperamos un rato despues de enviar la peticion con BurpSuite veremos lo siguiente:

Veremos que ha funcionado, vamos a irnos al Storage de nuestro navegador e intercambiar la Cookie nuestra por la que hemos recibido a ver que pasa.

Una vez cambiado y recargada la pagina veremos una opcion llamada Admin panel, si entramos dentro veremos lo siguiente:

Vemos que podemos descargarnos un archivo, vamos a capturar la peticion con BurpSuite para ver que esta pasando por detras, si le damos a descargar y la interceptamos...

Vemos que esta llamando a un parametro en concreto para descargar un archivo, vamos a probar si esto pudiera ser vulnerable a un LFI de esta forma:

Veremos que efectivamente nos descarga un archivo y si lo leemos:

Con esto confirmamos que efectivamente si hay un LFI.

Despues de un rato investigando por los paths encontramos un db.json de esta forma:

Info:

Vemos que obtenemos 2 contraseñas de dos usuarios, uno el admin y el otro de testuser, vamos a intentar crackear las dos contraseñas a ver si hay suerte.

John (Crack Hash)

hash

Info:

Veremos que nos ha descargado la del usuario testuser, si probamos a meternos dentro con dicha contraseña en la pagina, veremos lo siguiente:

Info:

Veremos que en las opciones que antes teniamos bloqueadas, ahora estan desbloqueadas, por lo que vamos a investigar por aqui.

Escalate user web

Si nos vamos a Transform Image veremos a nivel de peticion esto si lo capturamos con BurpSuite:

Si probamos en cualquiera de los parametros de la x para abajo poniendo este payload:

Para intentar concatenar cualquier comando que se este ejecutando por detras y despues que nos llegue una peticion a ver si se esta ejecutando bien quedando la peticion de esta forma:

Abriremos un servidor de python3.

Ahora si enviamos la peticion nos llegara a nuestro servidor esto:

Veremos que funciona, por lo que vamos a probar a realizar una reverse shell de esta forma:

Hay que realizar otra ; al final para concatenar otro comando que se estaba ejecutando por detras, ya que si no, da error, pero antes de enviarlo nos pondremos a la escucha:

Ahora si enviamos la peticion con ese payload y volvemos 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 mark

Si investigamos un poco veremos que hay un directorio bastante interesante que es el siguiente:

Info:

Vemos un archivo comprimido pero con una encriptacion de AES por lo que vamos a pasarnoslo a nuestra maquina atacante.

Ahora en la maquina atacante nos descargamos el archivo.

Una vez descargado, vamos a crearnos un script para realizar fuerza bruta de dicho archivo con este script.

bruteAES.py

Ahora lo ejecutamos de esta forma:

Info:

Veremos que hemos encontrado la contraseña llamada bestfriends, por lo que nos da el archivo directamente .zip.

Esto nos descomprimira el backup de la web, vamos a investigar que contiene y si tiene algo interesante.

Si leemos de nuevo el archivo db.json veremos lo siguiente:

Veremos que hay un usuario mas llamado mark y si leemos el passwd veremos que existe un usuario a nivel de sistema llamado mark, por lo que vamos a probar a crackear la contraseña.

hash

Info:

Veremos que ha funcionado y obtenemos la contraseña de dicho usuario, vamos a probar a escalar al usuario desde la shell que tenemos haciendo esto:

Metemos como contraseña supersmash...

Con esto veremos que seremos dicho usuario, por lo que leeremos la flag de usuario.

user.txt

Escalate Privileges

Si hacemos sudo -l veremos lo siguiente:

Vemos que podemos ejecutar el binario charcol como el usuario root, por lo que vamos a investigar que hace.

Si listamos el help del comando veremos que nos puede meter en una shell propia del binario.

Info:

Dentro de la misma si hacemos help veremos lo siguiente:

Vemos que podemos crear un crontab, por lo que vamos aprovechar eso para hacer esto, pero antes de darle a enviar vamos a ponernos a la escucha:

Ahora si lo ejecutamos...

Info:

Volvemos a donde tenemos la escucha y veremos lo siguiente:

Vemos que ha funcionado y con esto seremos root, por lo que leeremos la flag de root.

root.txt

Last updated