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

144 lines
8.4 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)
* Consigue el [**swag oficial de PEASS & 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)**.**
* **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 (7) (2).png" alt=""><figcaption></figcaption></figure>
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones comunitarias
## 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
### 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:**
---
- `show dbs`: muestra las bases de datos disponibles.
- `use <db>`: cambia a la base de datos especificada.
- `show collections`: muestra las colecciones disponibles en la base de datos actual.
- `db.<collection>.find()`: muestra todos los documentos de la colección especificada.
- `db.<collection>.find(<query>)`: muestra los documentos que coinciden con la consulta especificada.
- `db.<collection>.findOne(<query>)`: muestra el primer documento que coincide con la consulta especificada.
- `db.<collection>.insert(<document>)`: inserta un nuevo documento en la colección especificada.
- `db.<collection>.update(<query>, <update>)`: actualiza los documentos que coinciden con la consulta especificada.
- `db.<collection>.remove(<query>)`: elimina los documentos que coinciden con la consulta especificada.
```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 común de mongo.
```bash
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
```
El script de nmap: _**mongodb-brute**_ comprobará si se necesitan credenciales.
```bash
nmap -n -sV --script mongodb-brute -p 27017 <ip>
```
### [**Fuerza bruta**](../generic-methodologies-and-resources/brute-force.md#mongo)
Busque 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
Los IDs de objetos de Mongo son cadenas **hexadecimales de 12 bytes**:
![](../.gitbook/assets/id-and-objectids-in-mongodb.png)
Por ejemplo, así es como podemos descomponer 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 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 para adivinar los 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 del sistema.
La herramienta [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), dada una ID de objeto de inicio (puede crear una cuenta y obtener una ID de inicio), devuelve alrededor de 1000 IDs de objeto probables que podrían haber sido asignados a los objetos siguientes, por lo que solo necesita hacer fuerza bruta.
## 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 (7) (2).png" alt=""><figcaption></figcaption></figure>
[**Sigue a HackenProof**](https://bit.ly/3xrrDrL) **para aprender más sobre errores web3**
🐞 Lee tutoriales de errores web3
🔔 Recibe notificaciones sobre nuevos programas de recompensas por errores
💬 Participa en discusiones de la comunidad
<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)**.**
* **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>