# 27017,27018 - Pentesting MongoDB
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Travaillez-vous dans une **entreprise de cybersécurité** ? Voulez-vous voir votre **entreprise annoncée dans HackTricks** ? Ou voulez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family) * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Partagez vos astuces de piratage en soumettant des PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes ! **Perspectives de piratage**\ Engagez-vous avec du contenu qui explore les sensations et les défis du piratage **Actualités de piratage en temps réel**\ Restez à jour avec le monde du piratage rapide grâce aux actualités et aux informations en temps réel **Dernières annonces**\ Restez informé des dernières primes de bugs lancées et des mises à jour cruciales de la plateforme **Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui ! ## Informations de base MongoDB est un système de gestion de base de données (SGBD) [open source](https://whatis.techtarget.com/definition/open-source) qui utilise un modèle de base de données orienté documents et prend en charge diverses formes de données. (De [ici](https://searchdatamanagement.techtarget.com/definition/MongoDB)) **Port par défaut :** 27017, 27018 ``` PORT STATE SERVICE VERSION 27017/tcp open mongodb MongoDB 2.6.9 2.6.9 ``` ## Énumération ### Manuelle L'énumération manuelle consiste à recueillir des informations sur le service MongoDB en utilisant des méthodes manuelles. Voici quelques étapes à suivre pour effectuer cette énumération : 1. **Recherche de l'adresse IP** : Utilisez des outils tels que `ping` ou `nslookup` pour trouver l'adresse IP du serveur MongoDB cible. 2. **Vérification des ports** : Utilisez un scanner de ports, comme `nmap`, pour vérifier les ports 27017 et 27018 sur l'adresse IP cible. Ces ports sont généralement utilisés par MongoDB. 3. **Connexion à MongoDB** : Utilisez l'outil `mongo` pour vous connecter au serveur MongoDB en spécifiant l'adresse IP et le port. Par exemple : `mongo :`. 4. **Interrogation de la base de données** : Une fois connecté, vous pouvez interroger la base de données pour obtenir des informations sur les collections, les documents et les utilisateurs. Utilisez des commandes telles que `show dbs`, `use `, `show collections`, `db..find()`, etc. 5. **Analyse des erreurs** : Lors de l'interrogation de la base de données, recherchez des erreurs ou des messages d'erreur qui pourraient révéler des informations sensibles ou des vulnérabilités. 6. **Collecte d'informations supplémentaires** : Utilisez d'autres commandes MongoDB pour collecter des informations supplémentaires, telles que `db.stats()`, `db.getUsers()`, `db.runCommand({whatsmyuri: 1})`, etc. 7. **Analyse des résultats** : Analysez les résultats de vos requêtes pour identifier des informations sensibles, des vulnérabilités ou des configurations incorrectes. 8. **Documentation** : Consultez la documentation officielle de MongoDB pour en savoir plus sur les commandes et les fonctionnalités spécifiques. La méthode d'énumération manuelle peut être lente et nécessite une connaissance approfondie de MongoDB, mais elle permet de collecter des informations précises et de comprendre en détail la configuration du service. ```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 # Start MongoDB service sudo service mongod start # Stop MongoDB service sudo service mongod stop # Restart MongoDB service sudo service mongod restart # Check MongoDB service status sudo service mongod status # Connect to MongoDB shell mongo # Show all databases show dbs # Switch to a specific database use # Show all collections in the current database show collections # Insert a document into a collection db..insertOne({}) # Find all documents in a collection db..find() # Find documents that match a specific condition db..find({}) # Update documents in a collection db..updateOne({}, {}) # Delete documents from a collection db..deleteOne({}) ``` For more information, refer to the [MongoDB documentation](https://docs.mongodb.com/). ```bash show dbs use show collections db..find() #Dump the collection db..count() #Number of records of the collection db.current.find({"username":"admin"}) #Find in current db the username admin ``` ### Automatique MongoDB provides an automatic mechanism for creating backups of the database. This feature is called "mongodump" and it allows you to create a binary dump of the entire database or specific collections. The "mongodump" command can be executed from the command line and it supports various options to customize the backup process. To create a backup of the entire database, you can simply run the following command: ``` mongodump --host --port --out ``` Replace `` with the hostname or IP address of the MongoDB server, `` with the port number on which MongoDB is running, and `` with the directory where you want to store the backup. If you only want to backup specific collections, you can use the `--collection` option followed by the names of the collections you want to backup. For example: ``` mongodump --host --port --db --collection --out ``` Replace `` with the name of the database containing the collections you want to backup, and `` with the names of the collections you want to backup. By default, "mongodump" creates a binary dump of the database in BSON format. If you want to create a human-readable JSON dump instead, you can use the `--json` option. Once you have created a backup, you can restore it using the "mongorestore" command. This command allows you to restore a binary dump created by "mongodump" back into a MongoDB database. To restore a backup, you can run the following command: ``` mongorestore --host --port --dir ``` Replace `` with the hostname or IP address of the MongoDB server, `` with the port number on which MongoDB is running, and `` with the directory where the backup files are located. Note that the "mongorestore" command will overwrite any existing data in the database with the data from the backup. If you want to keep the existing data and only restore specific collections, you can use the `--collection` option followed by the names of the collections you want to restore. MongoDB also provides a built-in mechanism for creating automated backups using the "mongodump" command. You can schedule regular backups by creating a cron job or using a task scheduler on your operating system. This ensures that your data is regularly backed up without manual intervention. ```bash nmap -sV --script "mongo* and default" -p 27017 #By default all the nmap mongo enumerate scripts are used ``` ### Shodan * Tous les mongodb : `"informations sur le serveur mongodb"` * Rechercher les serveurs mongodb entièrement ouverts : `"informations sur le serveur mongodb" -"partiellement activé"` * Activer partiellement l'authentification uniquement : `"informations sur le serveur mongodb" "partiellement activé"` ## Connexion Par défaut, mongo n'exige pas de mot de passe.\ **Admin** est une base de données mongo courante. ```bash mongo mongo : mongo :/ mongo -u -p '' ``` Le script nmap : _**mongodb-brute**_ vérifiera si des identifiants sont nécessaires. ```bash nmap -n -sV --script mongodb-brute -p 27017 ``` ### [**Brute force**](../generic-methodologies-and-resources/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 d'Object ID Mongo Les Object IDs Mongo sont des chaînes hexadécimales de **12 octets** : ![](../.gitbook/assets/id-and-objectids-in-mongodb.png) Par exemple, voici comment nous pouvons disséquer un Object ID 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 : Identifiant 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 exécutera la même machine physique/virtuelle. L'identifiant de processus ne changera que si le processus MongoDB est redémarré. Le timestamp sera mis à jour chaque seconde. Le seul défi pour deviner les Object IDs en incrémentant simplement les valeurs du compteur et du timestamp est le fait que Mongo DB génère les Object IDs et attribue les Object IDs au niveau du système. L'outil [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), étant donné un Object ID de départ (vous pouvez créer un compte et obtenir un ID de départ), renvoie environ 1000 Object IDs probables qui auraient pu être attribués aux objets suivants, il vous suffit donc de les bruteforcer. ## Post Si vous êtes root, vous pouvez **modifier** le fichier **mongodb.conf** afin de ne pas avoir besoin d'informations d'identification (_noauth = true_) et de **vous connecter sans informations d'identification**.
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de primes en sécurité ! **Perspectives de piratage**\ Engagez-vous avec du contenu qui explore les frissons et les défis du piratage **Actualités de piratage en temps réel**\ Restez à jour avec le monde du piratage rapide grâce à des actualités et des informations en temps réel **Dernières annonces**\ Restez informé des nouvelles primes de bugs en cours de lancement et des mises à jour cruciales de la plateforme **Rejoignez-nous sur** [**Discord**](https://discord.com/invite/N3FrSbmwdy) et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * Vous travaillez dans une **entreprise de cybersécurité** ? Vous souhaitez voir votre **entreprise annoncée dans HackTricks** ? ou souhaitez-vous avoir accès à la **dernière version de PEASS ou télécharger HackTricks en PDF** ? Consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) ! * Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com) * **Rejoignez le** [**💬**](https://emojipedia.org/speech-balloon/) [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.** * **Partagez vos astuces de piratage en soumettant des PRs** au [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).