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

147 lines
7.8 KiB
Markdown

# 27017,27018 - Pentesting MongoDB
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Experto en Equipos Rojos de AWS de HackTricks)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus 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>
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de recompensas por errores!
**Perspectivas de Hacking**\
Involúcrate con contenido que profundiza en la emoción y desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente actualizado con el mundo del hacking de ritmo rápido a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y las actualizaciones cruciales de la plataforma
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
## 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 semi-estructurados en aplicaciones como análisis de big data y gestión de contenido. **Puerto predeterminado:** 27017, 27018
```
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
## Enumeración
### Manual
```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())
#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
```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 mongo común.
```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.
```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:
```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
Ejemplo [desde aquí](https://techkranti.com/idor-through-mongodb-object-ids-prediction/).
Los IDs de objetos de Mongo son cadenas hexadecimales de **12 bytes**:
![http://techidiocy.com/\_id-objectid-in-mongodb/](../.gitbook/assets/id-and-ObjectIds-in-MongoDB.png)
Por ejemplo, así es como podemos desglosar un ID de objeto real devuelto por una aplicación: 5f2459ac9fa6dc2500314019
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 siempre que la base de datos se ejecute 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 IDs de objetos simplemente incrementando los valores de contador y marca de tiempo, es el hecho de que Mongo DB genera IDs de objetos y asigna IDs de objetos a nivel de sistema.
La herramienta [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), dado un ID de objeto inicial (puedes crear una cuenta y obtener un ID inicial), devuelve alrededor de 1000 IDs de objetos probables que podrían haber sido asignados a los próximos objetos, por lo que solo necesitas probarlos con fuerza bruta.
## Publicación
Si eres root puedes **modificar** el archivo **mongodb.conf** para que no se necesiten credenciales (_noauth = true_) e **iniciar sesión sin credenciales**.
***
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Únete al servidor de [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) para comunicarte con hackers experimentados y cazadores de bugs!
**Perspectivas de Hacking**\
Participa en contenido que profundiza en la emoción y desafíos del hacking
**Noticias de Hacking en Tiempo Real**\
Mantente al día con el mundo del hacking a través de noticias e información en tiempo real
**Últimos Anuncios**\
Mantente informado sobre los nuevos programas de recompensas por errores que se lanzan y actualizaciones importantes de plataformas
**Únete a nosotros en** [**Discord**](https://discord.com/invite/N3FrSbmwdy) y comienza a colaborar con los mejores hackers hoy!
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si deseas ver tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Obtén la [**oficial mercancía de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>