mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
144 lines
8.4 KiB
Markdown
144 lines
8.4 KiB
Markdown
|
# 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>
|