hacktricks/network-services-pentesting/27017-27018-mongodb.md

158 lines
10 KiB
Markdown
Raw Normal View History

2023-06-05 18:33:24 +00:00
# 27017,27018 - Pentesting MongoDB
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-05 18:33:24 +00:00
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
**HackenProof es el hogar de todas las recompensas por errores de criptografía.**
2023-06-05 18:33:24 +00:00
**Obtén recompensas sin demoras**\
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
2023-06-05 18:33:24 +00:00
**Obtén experiencia en pentesting web3**\
¡Los protocolos blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
2023-06-05 18:33:24 +00:00
**Conviértete en la leyenda del hacker web3**\
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
[**Regístrate en HackenProof**](https://hackenproof.com/register) y comienza a ganar con tus hacks!
{% embed url="https://hackenproof.com/register" %}
2023-06-05 18:33:24 +00:00
## Información básica
MongoDB es un sistema de gestión de bases de datos (DBMS) de código abierto que utiliza un modelo de base de datos orientado a documentos que admite diversas formas de datos. (De [aquí](https://searchdatamanagement.techtarget.com/definition/MongoDB))
**Puerto predeterminado:** 27017, 27018
```
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
### Enumeración
2023-06-05 18:33:24 +00:00
#### Manual
2023-06-05 18:33:24 +00:00
```python
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())
2023-06-05 18:33:24 +00:00
#If admin access, you could dump the database also
```
**Algunos comandos de MongoDB:**
```bash
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
MongoDB proporciona una funcionalidad llamada "descubrimiento automático" que permite a los clientes encontrar y conectarse automáticamente a los servidores de MongoDB en un clúster. Esto es especialmente útil en entornos de alta disponibilidad donde los servidores pueden cambiar o agregarse dinámicamente.
El descubrimiento automático se basa en los puertos 27017 y 27018, que son los puertos predeterminados utilizados por MongoDB para la comunicación entre los clientes y los servidores. Estos puertos son escuchados por los servidores MongoDB y se utilizan para anunciar su presencia en la red.
Cuando un cliente intenta conectarse a un clúster de MongoDB, puede utilizar el descubrimiento automático para encontrar los servidores disponibles. Esto se hace enviando una solicitud a la dirección IP y el puerto del servidor primario conocido. El servidor primario responderá con una lista de direcciones IP y puertos de los otros servidores en el clúster.
Una vez que el cliente tiene esta lista de servidores, puede intentar conectarse a cada uno de ellos hasta que encuentre uno que esté disponible. Esto permite que el cliente se adapte automáticamente a los cambios en el clúster, como la adición o eliminación de servidores.
El descubrimiento automático también es útil para la tolerancia a fallos, ya que si un servidor falla, el cliente puede intentar conectarse a otro servidor en su lugar. Esto garantiza que la aplicación siga funcionando incluso en caso de fallos en los servidores.
En resumen, el descubrimiento automático en MongoDB permite a los clientes encontrar y conectarse automáticamente a los servidores en un clúster, lo que facilita la alta disponibilidad y la tolerancia a fallos.
2023-06-05 18:33:24 +00:00
```bash
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
```
### Shodan
* Todos los mongodb: `"información del servidor mongodb"`
* Buscar servidores mongodb completamente abiertos: `"información del servidor mongodb" -"parcialmente habilitado"`
* Solo habilitar parcialmente la autenticación: `"información del servidor mongodb" "parcialmente habilitado"`
## Inicio de sesión
Por defecto, mongo no requiere contraseña.\
**Admin** es una base de datos común de mongo.
2023-06-05 18:33:24 +00:00
```bash
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
```
El script de nmap: _**mongodb-brute**_ verificará si se necesitan credenciales.
2023-06-05 18:33:24 +00:00
```bash
nmap -n -sV --script mongodb-brute -p 27017 <ip>
```
### [**Fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#mongo)
Busca dentro de _/opt/bitnami/mongodb/mongodb.conf_ para saber si se necesitan credenciales:
2023-06-05 18:33:24 +00:00
```bash
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
```
## Predicción de Mongo Objectid
Los Object IDs de Mongo son cadenas hexadecimales de **12 bytes**:
2023-06-05 18:33:24 +00:00
![](../.gitbook/assets/id-and-objectids-in-mongodb.png)
Por ejemplo, así es como podemos desglosar un Object ID real devuelto por una aplicación: 5f2459ac9fa6dc2500314019
2023-06-05 18:33:24 +00:00
1. 5f2459ac: 1596217772 en decimal = viernes, 31 de julio de 2020 17:49:32
2. 9fa6dc: Identificador de máquina
3. 2500: ID de proceso
4. 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 ID de proceso solo cambiará si se reinicia el proceso de MongoDB. La marca de tiempo se actualizará cada segundo. El único desafío al adivinar los Object IDs simplemente incrementando los valores del contador y la marca de tiempo, es el hecho de que Mongo DB genera los Object IDs y asigna los Object IDs a nivel de sistema.
2023-06-05 18:33:24 +00:00
La herramienta [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), dada una Object ID inicial (puedes crear una cuenta y obtener una Object ID inicial), devuelve alrededor de 1000 Object IDs probables que podrían haber sido asignados a los objetos siguientes, por lo que solo necesitas probarlos mediante fuerza bruta.
2023-06-05 18:33:24 +00:00
## Publicación
Si eres root, puedes **modificar** el archivo **mongodb.conf** para que no se necesiten credenciales (_noauth = true_) y **iniciar sesión sin credenciales**.
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
**HackenProof es el hogar de todas las recompensas por errores de cifrado.**
2023-06-05 18:33:24 +00:00
**Obtén recompensas sin demoras**\
Las recompensas de HackenProof se lanzan solo cuando sus clientes depositan el presupuesto de recompensa. Obtendrás la recompensa después de que se verifique el error.
2023-06-05 18:33:24 +00:00
**Obtén experiencia en pentesting web3**\
¡Los protocolos de blockchain y los contratos inteligentes son el nuevo Internet! Domina la seguridad web3 en sus días de crecimiento.
2023-06-05 18:33:24 +00:00
**Conviértete en la leyenda del hacker web3**\
Gana puntos de reputación con cada error verificado y conquista la cima de la clasificación semanal.
2023-06-05 18:33:24 +00:00
[**Regístrate en HackenProof**](https://hackenproof.com/register) ¡comienza a ganar con tus hacks!
{% embed url="https://hackenproof.com/register" %}
2023-06-05 18:33:24 +00:00
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com).
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
2023-06-05 18:33:24 +00:00
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>