mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
94 lines
4.0 KiB
Markdown
94 lines
4.0 KiB
Markdown
# 27017,27018 - Pentesting MongoDB
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|
|
|
|
## Informations de base
|
|
|
|
**MongoDB** est un système de gestion de base de données **open source** qui utilise un **modèle de base de données orienté document** pour gérer diverses formes de données. Il offre flexibilité et évolutivité pour gérer des données non structurées ou semi-structurées dans des applications telles que l'analyse de big data et la gestion de contenu. **Port par défaut :** 27017, 27018
|
|
```
|
|
PORT STATE SERVICE VERSION
|
|
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
|
|
```
|
|
## Énumération
|
|
|
|
### Manuel
|
|
```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
|
|
```
|
|
**Quelques commandes 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
|
|
```
|
|
### Automatique
|
|
```bash
|
|
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
|
|
```
|
|
### Shodan
|
|
|
|
- Tous les mongodb : `"mongodb server information"`
|
|
- Rechercher des serveurs mongodb entièrement ouverts : `"mongodb server information" -"partially enabled"`
|
|
- Auth uniquement partiellement activée : `"mongodb server information" "partially enabled"`
|
|
|
|
## Login
|
|
|
|
Par défaut, mongo ne nécessite pas de mot de passe.\
|
|
**Admin** est une base de données mongo courante.
|
|
```bash
|
|
mongo <HOST>
|
|
mongo <HOST>:<PORT>
|
|
mongo <HOST>:<PORT>/<DB>
|
|
mongo <database> -u <username> -p '<password>'
|
|
```
|
|
Le script nmap : _**mongodb-brute**_ vérifiera si des identifiants sont nécessaires.
|
|
```bash
|
|
nmap -n -sV --script mongodb-brute -p 27017 <ip>
|
|
```
|
|
### [**Brute force**](../generic-hacking/brute-force.md#mongo)
|
|
|
|
Regardez à l'intérieur de _/opt/bitnami/mongodb/mongodb.conf_ pour savoir si des identifiants sont nécessaires :
|
|
```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
|
|
```
|
|
## Prédiction de l'Objectid Mongo
|
|
|
|
Exemple [d'ici](https://techkranti.com/idor-through-mongodb-object-ids-prediction/).
|
|
|
|
Les ID d'objet Mongo sont des chaînes **hexadécimales de 12 octets** :
|
|
|
|

|
|
|
|
Par exemple, voici comment nous pouvons décomposer un ID d'objet réel renvoyé par une application : 5f2459ac9fa6dc2500314019
|
|
|
|
1. 5f2459ac : 1596217772 en décimal = Vendredi, 31 Juillet 2020 17:49:32
|
|
2. 9fa6dc : Identifiant de machine
|
|
3. 2500 : ID de processus
|
|
4. 314019 : Un compteur incrémental
|
|
|
|
Parmi les éléments ci-dessus, l'identifiant de machine restera le même tant que la base de données fonctionne sur la même machine physique/virtuelle. L'ID de processus ne changera que si le processus MongoDB est redémarré. L'horodatage sera mis à jour chaque seconde. Le seul défi pour deviner les ID d'objet en incrémentant simplement les valeurs du compteur et de l'horodatage est le fait que Mongo DB génère des ID d'objet et attribue des ID d'objet au niveau système.
|
|
|
|
L'outil [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), donné un ID d'objet de départ (vous pouvez créer un compte et obtenir un ID de départ), renvoie environ 1000 ID d'objet probables qui auraient pu être attribués aux objets suivants, donc vous devez juste les bruteforcer.
|
|
|
|
## Post
|
|
|
|
Si vous êtes root, vous pouvez **modifier** le fichier **mongodb.conf** afin qu'aucune authentification ne soit nécessaire (_noauth = true_) et **vous connecter sans identifiants**.
|
|
|
|
---
|
|
|
|
{{#include ../banners/hacktricks-training.md}}
|