# 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).


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://books.spartan-cybersec.com/cppj/databases-for-juniors/puerto-27017-mongodb.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
