27017,27018 - Pentesting MongoDB
Tip
Aprende y practica Hacking en AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP:HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Información básica
MongoDB es un sistema de gestión de bases de datos de código abierto que utiliza un modelo de base de datos orientado a documentos para manejar diversas formas de datos. Ofrece flexibilidad y escalabilidad para gestionar datos no estructurados o semiestructurados en aplicaciones como análisis de big data y gestión de contenido. Puerto por defecto: 27017, 27018
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
Enumeración
Manual
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
Algunos comandos de 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
Automático
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
Shodan
- Todos los mongodb:
"mongodb server information" - Buscar servidores mongodb totalmente abiertos:
"mongodb server information" -"partially enabled" - Solo con auth parcialmente habilitada:
"mongodb server information" "partially enabled"
Login
Por defecto, mongo no requiere contraseña.
Admin es una base de datos común en mongo.
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
El script de nmap: mongodb-brute comprobará si se necesitan creds.
nmap -n -sV --script mongodb-brute -p 27017 <ip>
Brute force
Revisa el archivo /opt/bitnami/mongodb/mongodb.conf para saber si se requieren credenciales:
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
Ejemplo de aquí.
Mongo Object IDs son cadenas hexadecimales de 12 bytes:

Por ejemplo, así es como podemos diseccionar un Object ID real devuelto por una aplicación: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772 en decimal = Viernes, 31 de julio de 2020 17:49:32
- 9fa6dc: Identificador de máquina
- 2500: ID de proceso
- 314019: Un contador incremental
De los elementos anteriores, el identificador de máquina permanecerá igual mientras la base de datos esté ejecutándose en la misma máquina física/virtual. El Process ID solo cambiará si el proceso de MongoDB se reinicia. El timestamp se actualizará cada segundo. El único reto al adivinar Object IDs incrementando simplemente el contador y los valores de timestamp, es el hecho de que MongoDB genera y asigna los Object IDs a nivel de sistema.
La herramienta https://github.com/andresriancho/mongo-objectid-predict, dado un Object ID inicial (puedes crear una cuenta y obtener un ID inicial), devuelve unos 1000 Object IDs probables que podrían haberse asignado a los siguientes objetos, así que solo necesitas bruteforcearlos.
Post
Si eres root puedes modificar el archivo mongodb.conf para que no se necesiten credenciales (noauth = true) y iniciar sesión sin credenciales.
MongoBleed zlib Memory Disclosure (CVE-2025-14847)
Una divulgación de memoria no autenticada generalizada (“MongoBleed”) afecta a MongoDB 3.6–8.2 cuando el compresor de red zlib está habilitado. El encabezado OP_COMPRESSED confía en un uncompressedSize proporcionado por el atacante, por lo que el servidor asigna un buffer de ese tamaño y lo copia de vuelta en las respuestas aunque solo se haya proporcionado una carga comprimida mucho más pequeña. Los bytes extra son datos de heap no inicializados de otras conexiones, /proc, o la caché de WiredTiger. Los atacantes luego omiten el esperado terminador BSON \x00 de modo que el parser de MongoDB sigue escaneando ese buffer sobredimensionado hasta que encuentra un terminador, y la respuesta de error refleja tanto el documento malicioso como los bytes de heap escaneados pre-auth en TCP/27017.
Requisitos de exposición y comprobaciones rápidas
- La versión del servidor debe estar dentro de los rangos vulnerables (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.compressorsonetworkMessageCompressorsdeben incluirzlib(por defecto en muchas compilaciones). Compruébalo desde el shell con:
db.adminCommand({getParameter: 1, networkMessageCompressors: 1})
- El atacante solo necesita acceso de red al puerto de MongoDB. No se requiere autenticación.
Flujo de explotación y recolección
- Inicia el wire-protocol handshake anunciando
compressors:["zlib"]para que la sesión use zlib. - Envía tramas
OP_COMPRESSEDcuyauncompressedSizedeclarada es mucho mayor que la carga útil descomprimida real para forzar una asignación de heap sobredimensionada llena de datos antiguos. - Construye el BSON embebido sin un
\x00final para que el parser avance más allá de los datos controlados por el atacante hacia el buffer sobredimensionado mientras busca un terminador. - MongoDB emite un error que incluye el mensaje original más los bytes de heap que se escanearon, leaking memory. Repite con offsets/desplazamientos variables para agregar secretos (creds/API keys/session tokens), WiredTiger stats, y artefactos de
/proc.
El PoC público automatiza los probing offsets y el carving de los fragmentos devueltos:
python3 mongobleed.py --host <target> --max-offset 50000 --output leaks.bin
Señal de ruido de detección (conexiones de alta frecuencia)
El ataque normalmente genera muchas peticiones de corta duración. Vigila picos de conexiones entrantes a mongod/mongod.exe. Ejemplo XQL hunt (>500 conexiones/min por IP remota, excluyendo por defecto los rangos RFC1918/loopback/link-local/mcast/broadcast/reserved):
Cortex XQL conexiones Mongo de alta velocidad
```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>
## Referencias
- [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]
> Aprende y practica Hacking en AWS:<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;">\
> Aprende y practica Hacking en GCP: <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;">
> Aprende y practica Hacking en Azure: <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>Apoya a HackTricks</summary>
>
> - Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)!
> - **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos en** **Twitter** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
>
> </details>


