27017,27018 - Pentesting MongoDB

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Основна інформація

MongoDB — це open source система управління базами даних, яка використовує документно-орієнтовану модель бази даних для роботи з різними формами даних. Вона забезпечує гнучкість та масштабованість для керування неструктурованими або напівструктурованими даними в застосунках, таких як аналіз великих даних і управління контентом. Порт за замовчуванням: 27017, 27018

PORT      STATE SERVICE VERSION
27017/tcp open  mongodb MongoDB 2.6.9 2.6.9

Перерахування

Вручну

from pymongo import MongoClient
client = MongoClient(host, port, username=username, password=password)
client.server_info() #Basic info
#If you have admin access you can obtain more info
admin = client.admin
admin_info = admin.command("serverStatus")
cursor = client.list_databases()
for db in cursor:
print(db)
print(client[db["name"]].list_collection_names())
#If admin access, you could dump the database also

Деякі MongoDB команди:

show dbs
use <db>
show collections
db.<collection>.find()  #Dump the collection
db.<collection>.count() #Number of records of the collection
db.current.find({"username":"admin"})  #Find in current db the username admin

Автоматичне

nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used

Shodan

  • Усі mongodb: "mongodb server information"
  • Пошук повністю відкритих mongodb серверів: "mongodb server information" -"partially enabled"
  • Лише частково увімкнена auth: "mongodb server information" "partially enabled"

Вхід

За замовчуванням mongo не вимагає пароля.
Admin — поширена база даних mongo.

mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'

Скрипт nmap: mongodb-brute перевірить, чи потрібні creds.

nmap -n -sV --script mongodb-brute -p 27017 <ip>

Brute force

Перегляньте /opt/bitnami/mongodb/mongodb.conf, щоб дізнатися, чи потрібні credentials:

grep "noauth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#" #Not needed
grep "auth.*true" /opt/bitnami/mongodb/mongodb.conf | grep -v "^#\|noauth" #Not needed

Mongo Objectid Predict

Приклад from here.

Mongo Object IDs — це 12-byte hexadecimal рядки:

http://techidiocy.com/_id-objectid-in-mongodb/

Наприклад, ось як ми можемо розібрати реальний Object ID, який повертає застосунок: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 у десятковому форматі = Friday, 31 July 2020 17:49:32
  2. 9fa6dc: Ідентифікатор машини
  3. 2500: Ідентифікатор процесу
  4. 314019: Інкрементальний лічильник

З перелічених елементів, ідентифікатор машини залишатиметься однаковим доти, доки база даних працює на тій самій фізичній/віртуальній машині. Ідентифікатор процесу зміниться тільки при перезапуску процесу MongoDB. Таймстамп оновлюється щосекунди. Єдина складність у вгадуванні Object IDs простим інкрементуванням лічильника та значень таймстампа полягає в тому, що MongoDB генерує та присвоює Object IDs на системному рівні.

Інструмент https://github.com/andresriancho/mongo-objectid-predict, маючи початковий Object ID (ви можете створити акаунт і отримати початковий ID), повертає близько 1000 ймовірних Object IDs, які могли бути присвоєні наступним об’єктам, тож вам лишається тільки bruteforce їх.

Post

Якщо ви root, ви можете змінити файл mongodb.conf, щоб не вимагалося вказання облікових даних (noauth = true), і увійти без облікових даних.

MongoBleed zlib Memory Disclosure (CVE-2025-14847)

Поширений неаутентифікований витік пам’яті (“MongoBleed”) впливає на MongoDB 3.6–8.2, коли zlib network compressor is enabled. Заголовок OP_COMPRESSED довіряє значенню uncompressedSize, наданому атакуючим, тому сервер виділяє буфер цього розміру і копіює його назад у відповіді, хоча був наданий лише значно менший стиснений payload. Додаткові байти — це uninitialized heap data з інших з’єднань, /proc або кешу WiredTiger. Атакувальники потім пропускають очікуваний BSON \x00 terminator, тож парсер MongoDB продовжує сканувати завеликий буфер, доки не знайде термінатор, а відповідь з помилкою повертає як шкідливий документ, так і проскановані байти heap pre-auth по TCP/27017.

Exposure requirements & quick checks

  • Версія сервера має входити до вразливих діапазонів (3.6, 4.0, 4.2, 4.4.0–4.4.29, 5.0.0–5.0.31, 6.0.0–6.0.26, 7.0.0–7.0.27, 8.0.0–8.0.16, 8.2.0–8.2.2).
  • net.compression.compressors або networkMessageCompressors повинні містити zlib (за замовчуванням у багатьох збірках). Перевірте це з shell за допомогою:
db.adminCommand({getParameter: 1, networkMessageCompressors: 1})
  • Зловмиснику достатньо мережевого доступу до порту MongoDB. Аутентифікація не потрібна.

Робочий процес експлуатації та збору

  1. Ініціюйте wire-protocol handshake, вказавши compressors:["zlib"], щоб сесія використовувала zlib.
  2. Надішліть OP_COMPRESSED фрейми, у яких задекларований uncompressedSize значно перевищує реальний розмір декомпресованого payload, щоб змусити oversized heap allocation full of old data.
  3. Сформуйте вкладений BSON без фінального \x00, щоб парсер пройшов повз контрольовані зловмисником дані в бік надмірного буфера під час пошуку термінатора.
  4. MongoDB викидає помилку, яка включає оригінальне повідомлення та будь-які байти heap, які були проскановані, leaking memory. Повторюйте з різними довжинами/зміщеннями, щоб агрегувати секрети (creds/API keys/session tokens), WiredTiger stats, та артефакти /proc.

Публічний PoC автоматизує probing offsets і carving повернутих фрагментів:

python3 mongobleed.py --host <target> --max-offset 50000 --output leaks.bin

Сигнал шуму виявлення (висока частота з’єднань)

Атака зазвичай генерує багато короткочасних запитів. Слідкуйте за піками вхідних з’єднань до mongod/mongod.exe. Приклад XQL hunt (>500 підключень/хв на віддалений IP, за замовчуванням виключаючи діапазони RFC1918/loopback/link-local/mcast/broadcast/reserved):

Cortex XQL — з'єднання Mongo з високою частотою ```sql // High-velocity inbound connections to mongod/mongod.exe (possible MongoBleed probing)

dataset = xdr_data | filter event_type = ENUM.NETWORK | filter lowercase(actor_process_image_name) in (“mongod”, “mongod.exe”) | filter action_network_is_server = true | filter action_remote_ip not in (null, “”) | filter incidr(action_remote_ip, “10.0.0.0/8”) != true and incidr(action_remote_ip, “192.168.0.0/16”) != true and incidr(action_remote_ip, “172.16.0.0/12”) != true and incidr(action_remote_ip, “127.0.0.0/8”) != true and incidr(action_remote_ip, “169.254.0.0/16”) != true and incidr(action_remote_ip, “224.0.0.0/4”) != true and incidr(action_remote_ip, “255.255.255.255/32”) != true and incidr(action_remote_ip, “198.18.0.0/15”) != true | filter action_network_session_duration <= 5000 | bin _time span = 1m | comp count(_time) as Counter by agent_hostname, action_remote_ip, _time | filter Counter >= 500

</details>


## Посилання

- [Unit 42 – Threat Brief: MongoDB Vulnerability (CVE-2025-14847)](https://unit42.paloaltonetworks.com/mongobleed-cve-2025-14847/)
- [Tenable – CVE-2025-14847 (MongoBleed): MongoDB Memory Leak Vulnerability Exploited in the Wild](https://www.tenable.com/blog/cve-2025-14847-mongobleed-mongodb-memory-leak-vulnerability-exploited-in-the-wild)
- [MongoDB Security Advisory SERVER-115508](https://jira.mongodb.org/browse/SERVER-115508)
- [Censys – MongoBleed Advisory](https://censys.com/advisory/cve-2025-14847)
- [MongoBleed PoC (joe-desimone/mongobleed)](https://github.com/joe-desimone/mongobleed)

---

> [!TIP]
> Вивчайте та практикуйте AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Вивчайте та практикуйте GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Вивчайте та практикуйте Azure Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Підтримайте HackTricks</summary>
>
> - Перевірте [**плани підписки**](https://github.com/sponsors/carlospolop)!
> - **Приєднуйтесь до** 💬 [**групи Discord**](https://discord.gg/hRep4RUj7f) або [**групи telegram**](https://t.me/peass) або **слідкуйте** за нами в **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Діліться хакерськими трюками, надсилаючи PR до** [**HackTricks**](https://github.com/carlospolop/hacktricks) та [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) репозиторіїв на github.
>
> </details>