Photobomb [EASY🟢]

Dificultad: Fácil

1- Reconocimiento y escaneo

1.1 Ping

Podemos notar que se trata de una maquina Linux, debido al TTL:

1.2 Nmap

Vemos que esta corriendo el puerto 22(OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)) correspondiente a un servidor SSH, y el puerto 80(nginx 1.18.0 (Ubuntu)) correspondiente a un servidor web

Vemos tambien que el sistema operativo Linux que se encuentra corriendo en la maquina objetivo es un Ubuntu

1.3 whatweb

Para realizar el escaneo de tecnologias web, vamos a modificar el archivo hosts de la ruta "/etc/hosts" para que apunte al dominio "http://photobomb.htb/":

Editamos y quedaria asi:

De tal manera que cuando entramos al navegador, nos saldra la siguiente pagina:

Ahora, vamos a realizar el escaneo de tecnologias web con "whatweb":

Vemos tecnologias como:

1.4 Fuzzing

En este caso el Fuzzing lo vamos a realizar con la herramienta "wfuzz" con el siguiente comando:

Ejecutamos:

Hay 2 directorios en concreto interesante, "printer" y "printers", si vamos a Firefox y verificamos lo que hay dentro de estos directorios:

Panel login

Nos da como resultado un panel de login, lo mismo es para el directorio "printers", pero hay diferencia entre ambos cuando realizemos la explotación, ya veremos en la fase de explotación a continuación

2- Explotación

2.1 phobomb.js

Vamos a revisar el codigo fuente de la pagina:

Vemos que el "index.html" de la pagina, carga un archivo JavaScript llamado "photobomb.js", concretamente en esta linea:

Si lo abrimos, veremos el codigo:

Podemos ver una URL interesante dentro del codigo, con las credenciales de para iniciar sesión en el panel de login de la pagina web:

Vamos a copiarla y a introducirla en el navegador:

Nos preguntara si queremos iniciar sesión con el usuario "pH0t0" dentro del dominio "photobomb.htb", vamos a darle en "OK":

Nos inicia sesión correctamente, si echamos un ojo a la pagina, podremos notar que es una pagina para descargar imagenes en diferentes resoluciones y formatos:

Por lo que podemos deducir, que por detras esta haciendo una conversión de formato y resolución, vamos a ver que hace por detras con la herramienta "Burp Suite"

Vamos a abrir Burp Suite y nos vamos a ir a la pestaña de "Proxy":

Vamos a ir a la configuración del proxy de Burp, en la subpestaña de "Proxy settings":

Vemos que el proxy, esta configurado con la IP 127.0.0.1 por el puerto 8080, sabiendo esto, vamos a ir a Firefox en nuestro Kali, y nos vamos a ir a ajustes del navegador o settings:

En el cuadro de busqueda de opciones, vamos a buscar la palabra clave "network"

Vamos a abrir la configuración de red, con el boton "Settings"

Vamos a darla a "Manual proxy configuration" y lo configuraremos con la IP y puerto correspondiente del proxy de Burp, en este caso la IP 127.0.0.1 y el puerto 8080

Vamos a aceptar con el boton "Ok", este paso no necesariamente tiene por que ser así, podemos configurar el proxy de Burp con la extensión de Foxy Proxy

Abrimos Burp Suite de nuevo y nos ponemos en modo intercepción:

Volvemos a la pagina web, y vamos a descargarnos una imagen para que la solicitud la reciba Burp Suite:

Lo que nos interesa concretamente es la siguiente linea de la consulta:

Vemos que el parámetro "photo=" indica la foto a descargar, el parámetro "filetype=" indica el formato en el que se va a descarga la imagen y por ultimo "dimensions=" correspondiente a las dimensiones de la imagen a descargar, parecería que estuviera ejecutando un script para realizar la conversión

2.2 Obtención de reverse shell

Vamos a crear una reverse shell y la vamos a almacenar en un archivo ".html", para luego mandarla al repeater de Burp Suite y ejecutar un "curl" con la reverse shell(En este caso el archivo .HTML) y con un pipe ejecutar el comando "bash" para que lo interprete como código Bash, en mi caso el archivo lo nombrare como "index.html" y utilizare el siguiente codigo Bash:

Vamos a crearlo:

Luego vamos a alojar un servidor web con Python en donde almacenamos el archivo .HTML de la reverse shell

Y por ultimo vamos a abrir una nueva consola en Kali para ponernos en escucha con netcat por el puerto 443:

Ahora ya estando en escucha y con el servidor web alojado con Python en nuestro Kali, vamos a irnos al BurpSuite y vamos a modificar la consulta para agregar el "curl" anteriomente mencionado, de tal manera que quedaria:

Modificamos el parámetro "filetype" para agregar el comando curl y agregar el pipe con el comando bash para interpretar el código como Bash

Ahora, para que esto funcione, ya que el comando curl que agregamos contiene espacios, va a ser necesario que encodeemos el codigo en formato URL, para eso nos vamos a la pestaña de "Decoder" de Burp Suite y pegamos el comando curl que agregamos sin el ;

Y vamos a encodearlo en formato "URL":

De tal manera que el comando quedaria de la siguiente forma:

Y la consulta quedaria de la siguiente manera:

Y la consulta entera:

Ahora vamos a mandar la consulta al repeater de Burp Suite con la combinación de teclas CTRL + R y vamos a la pestaña de "Repeater":

Y vamos a darle al boton "Send" para enviar la consulta al servidor web de la maquina objetivo y como le cargamos el comando "curl" encodeado en formato URL con la reverse shell, nos deberia entregar una reverse shell dentro de netcat donde estabamos en escucha por el puerto 443

Vamos a darle a "Send":

Se quedaria cargando, pero si vamos a la consola donde teniamos netcat en escucha por el puerto 443:

Ya tendriamos una reverse shell con el usuario "wizard"

2.3 Obtención de la flag de usuario

Una vez obtenida la reverse shell, la flag de usuario se encuentra dentro del directorio "/home/wizard/user.txt", vamos a visualizarlo con el comando cat:

3- Escalado de privilegios

3.1 cleanup.sh

Siempre que querramos escalar privilegios dentro de una maquina, tenemos que verificar los permisos que tenemos con el usuario obtenido, para eso utilizamos el comando "sudo -l":

Podemos ver que tenemos permisos de root en el archivo "cleanup.sh" que se encuentra dentro de la carpeta "opt", vamos a visualizar que contiene este script de bash:

Parece que esta ejecutando "find" dentro de la ruta relativa "source_images" y luego el resto del comando "-type f -name '*.jpg' -exec chown root:root {} \;", que aparenta ser el script que realiza la conversión de las imágenes

Es probable que estemos ante una vulnerabilidad que nos permita modificar el PATH de esta maquina para elevar privilegios. Para eso, vamos a irnos a un directorio donde tengamos permisos de escritura y podamos crear el archivo "find" para que luego sea llamado a través de la ruta relativa, a través del PATH y que dentro del archivo "find" tenga permisos de ejecución y que luego al ejecutarse el script "cleanup.sh" llame al archivo "find" que contenga el código para elevar privilegios, obviamente con el PATH modificado

Vamos a irnos a la carpeta "tmp" donde tenemos permisos de escritura que se encuentra en la siguiente ruta "/tmp":

Vamos a crear el archivo "find" que va a tener el comando Bash para elevar privilegios, en mi caso utilizare el siguiente:

Creamos el archivo con el comando "touch":

Y para almacenar el comando dentro del archivo "find", vamos a utilizar "echo", ya que no recomendaría utilizar "nano" o cualquier editor de texto sin antes realizar el tratamiento de la TTY:

Ahora vamos a darle permisos de ejecucion al archivo "find" con el comando "chmod":

Y por ultimo vamos a modificar el PATH con el siguiente comando:

Ejecutamos el comando:

Vemos que pareceria que se queda cargado, pero si ejecutamos el comando "whoami":

Somos usuarios root, por lo que la escalada de privilegios resulto exitosa, solo que no tenemos un prompt, para obtener un prompt, ejecutaremos el comando "script -c bash" :

Ya tendremos un prompt

3.2 Obtención de la flag root

La flag de root se encuentra en la siguiente ruta "/root/root.txt", vamos a hacerle un cat para visualizarla:

Con esto, concluimos la maquina "Photobomb" de Hack The Box

Espero te haya sido de ayuda este Write Up :)

Si tuviste alguna dificultad a la hora de resolverlo, no olvides contactarme en mis redes sociales

Última actualización