<!--
  هذا نموذج مثال — مقال رايت-اب منشور فعليًا على مدونة Cyberah (حل تحدي RootMe على TryHackMe)،
  نعرضه هنا كمرجع للبنية والأسلوب المتوقع من أي مقال جديد يُرسَل للمراجعة:

  - عنوان + جدول "معلومات عامة" بالأعلى
  - مقدمة موجزة عن مسار الاختراق
  - أقسام مرقّمة بعناوين H2/H3 واضحة (استطلاع، وصول أولي، تصعيد صلاحيات...)
  - كل خطوة مصحوبة بأمر التنفيذ (code block) وسكرين شوت يوضح النتيجة
  - خاتمة "الخلاصة" تلخّص الثغرات المستغَلّة والدرس المستفاد

  لا تُرسل هذا الملف كما هو — استخدمه كدليل بنية فقط، واكتب رايت-اب التحدي الذي حجزته بأسلوبك الخاص.
-->

---
title: "RootMe"
date: 2026-04-26
lastmod: 2026-04-26
draft: false
description: "حل تفصيلي لتحدي RootMe على منصة TryHackMe: استغلال ثغرة رفع الملفات للحصول على Reverse Shell، ثم تصعيد الصلاحيات عبر SUID Misconfiguration في Python."
tags: ["TryHackMe", "writeup", "File Upload", "RCE", "Privilege Escalation", "SUID", "Linux", "CTF"]
categories: ["writeups"]
authors:
  - "your-contributor-id"
platform: "THM"
showToc: true
TocOpen: true
---

## معلومات عامة

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

## مقدمة

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

## الاستطلاع

### فحص المنافذ

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

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

![RootMe Open Ports](/images/rootme/1.png)

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

| المنفذ | الخدمة | الإصدار |
|--------|--------|---------|
| 80 | Apache HTTP | 2.4.41 |
| 22 | OpenSSH | 8.2p1 |

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

![RootMe 80 Port](/images/rootme/2.png)

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

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

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

![Fuzzing Directories and Files](/images/rootme/3.png)

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

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

![RootMe Panel Directory](/images/rootme/4.png)

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

![RootMe Uploads Directory](/images/rootme/5.png)

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

![RootMe Uploads Directory](/images/rootme/6.png)

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

![RootMe TXT Upload Test](/images/rootme/7.png)

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

![RootMe Uploads Directory Showing TXT File Content](/images/rootme/8.png)

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

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

### إعداد الـ Reverse Shell

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

```
/usr/share/webshells/php/
```

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

![RootMe php-reverse-shell.php](/images/rootme/9.png)

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

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

![RootMe .php Extension Not Allowed](/images/rootme/10.png)

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

```bash
mv php-reverse-shell.php php-reverse-shell.phtml
```

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

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

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

```bash
nc -lnvp 1234
```

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

![RootMe Reverse Shell](/images/rootme/11.png)

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

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

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

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

![RootMe SUID](/images/rootme/12.png)

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

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

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

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

![RootMe GTFOBins](/images/rootme/13.png)
![RootMe GTFOBins Python SUID](/images/rootme/14.png)

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

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

![RootMe Root Shell](/images/rootme/15.png)

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

## الخلاصة

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

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

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