mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
220 lines
13 KiB
Markdown
220 lines
13 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>
|
|
|
|
* 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).
|
|
|
|
</details>
|
|
|
|
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof est la plateforme des primes de bugs cryptographiques.**
|
|
|
|
**Obtenez des récompenses sans délai**\
|
|
Les primes HackenProof ne sont lancées que lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
|
|
|
|
**Acquérez de l'expérience en pentesting web3**\
|
|
Les protocoles blockchain et les contrats intelligents sont le nouvel Internet ! Maîtrisez la sécurité web3 dès ses débuts.
|
|
|
|
**Devenez la légende du hacker web3**\
|
|
Gagnez des points de réputation avec chaque bug vérifié et conquérez le sommet du classement hebdomadaire.
|
|
|
|
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) commencez à gagner grâce à vos hacks !
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
## 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 la commande `mongo` pour vous connecter au serveur MongoDB cible. Par exemple : `mongo <adresse IP>:27017`.
|
|
|
|
4. **Interrogation de la base de données** : Une fois connecté, vous pouvez interroger la base de données en utilisant des commandes MongoDB telles que `show dbs` pour afficher les bases de données disponibles, `use <nom de la base de données>` pour sélectionner une base de données spécifique, et `show collections` pour afficher les collections dans la base de données sélectionnée.
|
|
|
|
5. **Exploration des données** : Utilisez des commandes MongoDB telles que `db.<nom de la collection>.find()` pour afficher les documents dans une collection spécifique.
|
|
|
|
6. **Analyse des résultats** : Analysez les résultats obtenus pour identifier des informations sensibles ou des vulnérabilités potentielles.
|
|
|
|
7. **Documentation** : Consultez la documentation officielle de MongoDB pour en savoir plus sur les commandes et les fonctionnalités spécifiques.
|
|
|
|
Il est important de noter que l'énumération manuelle peut être un processus long et fastidieux, mais elle peut fournir des informations précieuses sur le service MongoDB cible.
|
|
```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 <database_name>
|
|
|
|
# Show all collections in the current database
|
|
show collections
|
|
|
|
# Insert a document into a collection
|
|
db.<collection_name>.insertOne({<document>})
|
|
|
|
# Find all documents in a collection
|
|
db.<collection_name>.find()
|
|
|
|
# Find documents that match a specific condition
|
|
db.<collection_name>.find({<condition>})
|
|
|
|
# Update documents in a collection
|
|
db.<collection_name>.updateOne({<filter>}, {<update>})
|
|
|
|
# Delete documents from a collection
|
|
db.<collection_name>.deleteOne({<filter>})
|
|
```
|
|
|
|
For more information, refer to the [MongoDB documentation](https://docs.mongodb.com/).
|
|
```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
|
|
|
|
MongoDB is a popular NoSQL database that is widely used in web applications. It uses a binary protocol for communication between the client and the server. By default, MongoDB listens on port 27017 for client connections and on port 27018 for internal cluster communication.
|
|
|
|
During a penetration test, it is important to check if MongoDB is properly secured and not vulnerable to unauthorized access or data leakage. One common misconfiguration is leaving MongoDB open to the public internet without any authentication.
|
|
|
|
To automate the process of identifying MongoDB instances, you can use various tools such as Shodan, Censys, or Masscan. These tools can scan the internet for open MongoDB ports and provide you with a list of potential targets.
|
|
|
|
Once you have identified a MongoDB instance, you can use tools like Nmap or Metasploit to further enumerate the database and gather information about its configuration and data. Nmap has a script called "mongodb-info" that can be used to retrieve information such as the MongoDB version, database names, and collection names.
|
|
|
|
If the MongoDB instance is not properly secured, you may be able to gain unauthorized access and perform actions such as reading, modifying, or deleting data. Some common vulnerabilities in MongoDB include weak or default credentials, injection attacks, and insecure configuration settings.
|
|
|
|
To protect against these vulnerabilities, it is recommended to follow security best practices such as enabling authentication, using strong passwords, and restricting access to trusted IP addresses. Regularly updating MongoDB to the latest version and applying security patches is also important to mitigate any known vulnerabilities.
|
|
|
|
In conclusion, automating the process of identifying and testing MongoDB instances can help uncover potential security weaknesses and ensure that the database is properly secured. By following security best practices, you can protect sensitive data and prevent unauthorized access to your MongoDB instances.
|
|
```bash
|
|
nmap -sV --script "mongo* and default" -p 27017 <IP> #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 <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-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écute 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**.
|
|
|
|
<figure><img src="../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
**HackenProof est la plateforme des primes pour les bugs de cryptographie.**
|
|
|
|
**Obtenez une récompense sans délai**\
|
|
Les primes HackenProof ne sont lancées que lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
|
|
|
|
**Acquérez de l'expérience en pentesting web3**\
|
|
Les protocoles blockchain et les contrats intelligents sont le nouvel Internet ! Maîtrisez la sécurité web3 à ses débuts.
|
|
|
|
**Devenez la légende du hacker web3**\
|
|
Gagnez des points de réputation avec chaque bug vérifié et conquérez le sommet du classement hebdomadaire.
|
|
|
|
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) et commencez à gagner grâce à vos hacks !
|
|
|
|
{% embed url="https://hackenproof.com/register" %}
|
|
|
|
<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>
|
|
|
|
* 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 PR au** [**repo hacktricks**](https://github.com/carlospolop/hacktricks) **et au** [**repo hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|