> For the complete documentation index, see [llms.txt](https://books.spartan-cybersec.com/cppj/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://books.spartan-cybersec.com/cppj/databases-for-juniors/puerto-27017-mongodb.md).

# Puerto 27017: MongoDB

**MongoDB** es una base de datos NoSQL orientada a documentos que utiliza un formato de datos similar a JSON (BSON - Binary JSON). Es conocida por su escalabilidad, flexibilidad y capacidad para manejar grandes volúmenes de datos. El puerto 27017 es el puerto predeterminado que utiliza MongoDB para aceptar conexiones de clientes.

## <mark style="color:green;">Descripción de MongoDB y el Puerto 27017</mark>

* <mark style="color:green;">**Protocolo**</mark><mark style="color:green;">:</mark> MongoDB utiliza un protocolo propio sobre TCP para la comunicación entre clientes y servidores. El puerto predeterminado para las conexiones MongoDB es el 27017.
* <mark style="color:green;">**Funcionalidad**</mark><mark style="color:green;">:</mark> MongoDB permite almacenar y consultar datos en una estructura de documentos flexible. Soporta operaciones complejas, índices avanzados, y tiene capacidades de replicación y sharding para alta disponibilidad y escalabilidad.
* <mark style="color:green;">**Seguridad**</mark><mark style="color:green;">:</mark> Por defecto, MongoDB no requiere autenticación y no cifra el tráfico, lo cual puede ser un riesgo de seguridad si no se configura adecuadamente.

## <mark style="color:green;">Relevancia en Pentesting</mark>

### <mark style="color:green;">**Importancia de MongoDB en Pentesting**</mark><mark style="color:green;">:</mark>

* <mark style="color:green;">**Acceso No Autorizado**</mark><mark style="color:green;">:</mark> Si MongoDB está configurado sin autenticación y es accesible desde redes no confiables, puede ser explotado para obtener acceso no autorizado.
* <mark style="color:green;">**Exposición de Datos**</mark><mark style="color:green;">:</mark> La falta de cifrado y configuraciones de acceso inapropiadas pueden exponer datos sensibles almacenados en MongoDB.
* <mark style="color:green;">**Enumeración y Explotación**</mark><mark style="color:green;">:</mark> Los pentesters buscan servicios MongoDB expuestos para enumerar bases de datos, colecciones y documentos, y explotar configuraciones inseguras.

## <mark style="color:green;">Ejemplo de Escaneo de MongoDB con Nmap</mark>

Para identificar servidores MongoDB activos y recopilar información adicional sobre los servicios MongoDB, se puede utilizar Nmap con scripts NSE específicos.

### <mark style="color:green;">**Comando Nmap**</mark>

```bash
nmap -p 27017 --script mongodb-info target-ip
```

### <mark style="color:green;">**Explicación del Comando**</mark>

* `nmap`: Ejecuta el comando Nmap.
* `-p 27017`: Especifica que Nmap debe escanear el puerto 27017, el puerto predeterminado para MongoDB.
* `--script mongodb-info`: Utiliza el script NSE `mongodb-info` para recopilar información sobre el servidor MongoDB.
* `target-ip`: Especifica la dirección IP del objetivo.

## <mark style="color:green;">**Ejemplo de Salida de Nmap**</mark>

```plaintext
Starting Nmap 7.80 ( https://nmap.org ) at 2024-05-18 23:55 UTC
Nmap scan report for 192.168.1.190
Host is up (0.0031s latency).

PORT      STATE SERVICE
27017/tcp open  mongodb
| mongodb-info: 
|   Version: 4.2.3
|   Storage Engine: wiredTiger
|   Databases: 
|     admin
|     local
|     test
|   Collections per Database: 
|     admin:
|       system.version
|     local:
|       startup_log
|     test:
|       myCollection
|   Document Count per Collection: 
|     admin:
|       system.version: 1
|     local:
|       startup_log: 50
|     test:
|       myCollection: 1000
|   Storage Size: 
|     admin:
|       system.version: 16KB
|     local:
|       startup_log: 2MB
|     test:
|       myCollection: 5MB
|   Indexes: 
|     admin:
|       system.version: 1
|     local:
|       startup_log: 1
|     test:
|       myCollection: 1
|   Hostname: mongo-server.local
|_  Uptime: 432000 seconds (5 days)

Nmap done: 1 IP address (1 host up) scanned in 8.90 seconds
```

## <mark style="color:green;">Interpretación de la Salida</mark>

* <mark style="color:green;">**Host is up**</mark><mark style="color:green;">:</mark> Indica que el sistema objetivo está en línea y responde.
* <mark style="color:green;">**27017/tcp open mongodb**</mark><mark style="color:green;">:</mark> El puerto 27017 está abierto y el servicio MongoDB está activo.
* <mark style="color:green;">**mongodb-info**</mark><mark style="color:green;">:</mark> Proporciona información detallada sobre el servidor MongoDB.
  * <mark style="color:green;">**Version**</mark><mark style="color:green;">:</mark> Versión de MongoDB (`4.2.3`).
  * <mark style="color:green;">**Storage Engine**</mark><mark style="color:green;">:</mark> Motor de almacenamiento utilizado (`wiredTiger`).
  * <mark style="color:green;">**Databases**</mark><mark style="color:green;">:</mark> Bases de datos disponibles (`admin`, `local`, `test`).
  * <mark style="color:green;">**Collections per Database**</mark><mark style="color:green;">:</mark> Colecciones en cada base de datos.
    * <mark style="color:green;">**admin**</mark><mark style="color:green;">:</mark> `system.version`.
    * <mark style="color:green;">**local**</mark><mark style="color:green;">:</mark> `startup_log`.
    * <mark style="color:green;">**test**</mark><mark style="color:green;">:</mark> `myCollection`.
  * <mark style="color:green;">**Document Count per Collection**</mark><mark style="color:green;">:</mark> Número de documentos en cada colección.
    * <mark style="color:green;">**admin**</mark><mark style="color:green;">:</mark> `system.version` tiene 1 documento.
    * <mark style="color:green;">**local**</mark><mark style="color:green;">:</mark> `startup_log` tiene 50 documentos.
    * <mark style="color:green;">**test**</mark><mark style="color:green;">:</mark> `myCollection` tiene 1000 documentos.
  * <mark style="color:green;">**Storage Size**</mark><mark style="color:green;">:</mark> Tamaño de almacenamiento de cada colección.
    * <mark style="color:green;">**admin**</mark><mark style="color:green;">:</mark> `system.version` ocupa 16KB.
    * <mark style="color:green;">**local**</mark><mark style="color:green;">:</mark> `startup_log` ocupa 2MB.
    * <mark style="color:green;">**test**</mark><mark style="color:green;">:</mark> `myCollection` ocupa 5MB.
  * <mark style="color:green;">**Indexes**</mark><mark style="color:green;">:</mark> Número de índices en cada colección.
    * <mark style="color:green;">**admin**</mark><mark style="color:green;">:</mark> `system.version` tiene 1 índice.
    * <mark style="color:green;">**local**</mark><mark style="color:green;">:</mark> `startup_log` tiene 1 índice.
    * <mark style="color:green;">**test**</mark><mark style="color:green;">:</mark> `myCollection` tiene 1 índice.
  * <mark style="color:green;">**Hostname**</mark><mark style="color:green;">:</mark> Nombre del host del servidor MongoDB (`mongo-server.local`).
  * <mark style="color:green;">**Uptime**</mark><mark style="color:green;">:</mark> Tiempo de actividad del servidor (`432000 seconds`, equivalente a 5 días).
