معلومات عامة

المعلومةالتفاصيل
المنصةTryHackMe
الصعوبةEasy
نظام التشغيلLinux
المهاراتFile Upload Bypass، RCE، SUID Privilege Escalation

مقدمة

تتمحور هذه العملية حول اختراق خادم Linux عبر سلسلة استغلال متكاملة تبدأ من مرحلة الاستطلاع لكشف المسارات المخفية، وصولاً إلى تجاوز فلاتر رفع الملفات لتحميل Reverse Shell بامتداد .phtml. بعد الحصول على الوصول الأولي كمستخدم www-data وتطوير الـ Shell، يتم استغلال خطأ في إعداد صلاحيات SUID لثنائي Python، مما يتيح الهروب من قيود المستخدم العادي وتصعيد الصلاحيات للسيطرة الكاملة على نظام الجذر (Root).

الاستطلاع

فحص المنافذ

أظهرت نتائج Nmap أن المنفذين 22 و80 مفتوحان على الهدف.

sudo nmap -p- --open 10.114.186.23
sudo nmap -p 22,80 -sVC 10.114.186.23

RootMe Open Ports

من خلال تحليل نتائج الفحص نستطيع استخراج المعلومات التالية:

المنفذالخدمةالإصدار
80Apache HTTP2.4.41
22OpenSSH8.2p1

فحص الموقع عبر المنفذ 80

RootMe 80 Port

لا يوجد محتوى مثير للاهتمام في الصفحة الرئيسية، لذا سننتقل إلى مرحلة اكتشاف المسارات والملفات المخفية داخل الموقع.

اكتشاف المسارات والملفات المخفية

ffuf -u http://10.114.186.23/FUZZ -w /usr/share/wordlists/dirb/common.txt

Fuzzing Directories and Files

كشفت النتائج عن مسارين مهمين: /panel و**/uploads**.

مسار /panel يحتوي على نموذج لرفع الملفات كما يظهر في الصورة التالية:

RootMe Panel Directory

أما مسار /uploads فهو على الأرجح المكان الذي تُحفظ فيه الملفات المرفوعة:

RootMe Uploads Directory

للتحقق من ذلك، قمنا برفع ملف test.txt تجريبي:

RootMe Uploads Directory

ظهر لون أخضر يؤكد نجاح الرفع، وعند التحقق من مسار /uploads وجدنا الملف بنجاح:

RootMe TXT Upload Test

بل يمكننا قراءة محتويات الملف مباشرةً من المتصفح:

RootMe Uploads Directory Showing TXT File Content

هذا يفتح لنا الباب لرفع ملف ضار يحتوي على Reverse Shell للوصول إلى الخادم.

الوصول الأولي

إعداد الـ Reverse Shell

يمكن الاستفادة من الـ Web Shells الجاهزة في Kali Linux عبر المسار التالي:

/usr/share/webshells/php/

سنستخدم ملف php-reverse-shell.php، مع تعديل عنوان الـ IP الخاص بنا فيه:

RootMe php-reverse-shell.php

تجاوز فلتر الامتداد

عند محاولة رفع الملف بامتداد .php ظهر الخطأ التالي:

RootMe .php Extension Not Allowed

الموقع يرفض الملفات ذات امتداد .php، مما يشير إلى وجود قائمة حظر (Blacklist). الحل هو تجريب امتدادات PHP بديلة مثل .phtml التي تُنفَّذ كـ PHP في كثير من إعدادات Apache.

mv php-reverse-shell.php php-reverse-shell.phtml

نجح رفع الملف بامتداد .phtml وظهر في مسار /uploads.

استقبال الاتصال العكسي

قبل تشغيل الملف، نُشغّل مستمع Netcat على جهازنا:

nc -lnvp 1234

بعد النقر على الملف في مسار /uploads، نحصل على Reverse Shell بنجاح:

RootMe Reverse Shell

تصعيد الصلاحيات

البحث عن ملفات SUID

للبحث عن ملفات تمتلك صلاحية SUID يمكن استغلالها لتصعيد الصلاحيات، نستخدم الأمر التالي:

find / -user root -perm -u=s 2>/dev/null

RootMe SUID

تحليل النتائج

الملف الشاذ في النتائج هو python2.7. السبب في كون وجوده خطيراً هو أن Python مفسّر لغة برمجة كامل القدرات؛ يسمح بتنفيذ أوامر النظام، تشغيل برامج خارجية، وفتح Shell تفاعلي. عندما يُفعَّل SUID على ثنائي Python المملوك لـ root، يستطيع أي مستخدم عادي تنفيذ أي كود بصلاحيات root كاملة.

استغلال SUID عبر GTFOBins

للعثور على طريقة الاستغلال، نلجأ إلى موقع GTFOBins — المرجع الشامل لتوثيق أساليب استغلال أدوات Unix الشائعة للتصعيد أو تجاوز القيود عند منحها صلاحيات مرتفعة.

RootMe GTFOBins RootMe GTFOBins Python SUID

نُنفّذ الأمر التالي للحصول على Shell بصلاحيات root:

python -c 'import os; os.execl("/bin/sh", "sh", "-p")'

RootMe Root Shell

حصلنا على صلاحيات root الكاملة. الماكينة مُخترَقة بنجاح.

الخلاصة

استغللنا في هذا التحدي ثغرتين رئيسيتين:

  1. File Upload Filter Bypass — تجاوز فلتر الامتداد باستخدام .phtml بدلاً من .php للحصول على RCE.
  2. SUID Misconfiguration — استغلال صلاحية SUID على ثنائي Python للانتقال من مستخدم عادي إلى root.

الدرس المستفاد: عند تطبيق حماية رفع الملفات، يجب اعتماد القائمة البيضاء (Whitelist) بدلاً من القائمة السوداء (Blacklist)، وتجنب منح أدوات قوية كـ Python صلاحية SUID.