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

235 lines
13 KiB
Markdown
Raw Normal View History

2022-04-28 23:27:22 +00:00
# 27017,27018 - Pentesting MongoDB
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<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>
2022-04-28 16:01:33 +00:00
* 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)
2023-06-03 13:10:46 +00:00
* 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)**.**
2023-06-03 13:10:46 +00:00
* **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).
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (1) (3).png" alt=""><figcaption></figcaption></figure>
**HackenProof est la plateforme des primes de bugs cryptographiques.**
**Obtenez des récompenses sans délai**\
Les primes HackenProof sont lancées uniquement lorsque les clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
2022-11-05 09:07:43 +00:00
**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.
2023-02-27 09:28:45 +00:00
**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.
2023-02-27 09:28:45 +00:00
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) commencez à gagner grâce à vos hacks !
2023-02-27 09:28:45 +00:00
{% embed url="https://hackenproof.com/register" %}
2022-11-05 09:07:43 +00:00
2023-06-03 13:10:46 +00:00
## 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))
2023-06-03 13:10:46 +00:00
**Port par défaut :** 27017, 27018
```
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
2023-06-03 13:10:46 +00:00
## Énumération
2023-06-03 13:10:46 +00:00
### Manuel
MongoDB est une base de données NoSQL populaire utilisée par de nombreuses applications. Lors de l'énumération manuelle d'une instance MongoDB, vous pouvez utiliser les étapes suivantes :
1. **Recherche de l'adresse IP** : Utilisez des outils tels que `ping` ou `nmap` pour trouver l'adresse IP de l'instance MongoDB.
2. **Vérification des ports** : Utilisez un scanner de ports pour vérifier si les ports 27017 et 27018 sont ouverts sur l'adresse IP cible. Ces ports sont généralement utilisés par MongoDB.
3. **Connexion à l'instance MongoDB** : Utilisez la commande `mongo` pour vous connecter à l'instance MongoDB en spécifiant l'adresse IP et le port. Par exemple : `mongo 192.168.0.1:27017`.
4. **Vérification des bases de données** : Une fois connecté à l'instance MongoDB, utilisez la commande `show dbs` pour afficher les bases de données disponibles.
5. **Exploration des collections** : Utilisez la commande `use <database>` pour sélectionner une base de données spécifique, puis utilisez `show collections` pour afficher les collections disponibles dans cette base de données.
6. **Affichage des documents** : Utilisez la commande `db.<collection>.find()` pour afficher les documents stockés dans une collection spécifique.
7. **Analyse des résultats** : Analysez les résultats obtenus pour identifier des informations sensibles ou des vulnérabilités potentielles.
Il est important de noter que l'énumération manuelle peut être un processus long et fastidieux, en particulier si l'instance MongoDB contient de nombreuses bases de données et collections. Dans de tels cas, il peut être plus efficace d'utiliser des outils d'énumération automatisés.
```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
```
2023-06-03 13:10:46 +00:00
**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({<condition>}, {$set: {<update>}})
# Delete documents from a collection
db.<collection_name>.deleteOne({<condition>})
```
**Note :** Assurez-vous d'avoir installé et configuré MongoDB correctement avant d'exécuter ces commandes.
```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
```
2023-06-03 13:10:46 +00:00
### 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 running on these default ports and if it is vulnerable to any known exploits. One way to automate this process is by using tools like Nmap or Metasploit.
#### Nmap
Nmap is a powerful network scanning tool that can be used to discover open ports on a target system. To scan for MongoDB, you can use the following command:
```
nmap -p 27017,27018 <target_ip>
```
This command will scan the target IP address for open ports 27017 and 27018. If MongoDB is running on these ports, Nmap will report them as open.
#### Metasploit
Metasploit is a popular penetration testing framework that includes a wide range of tools and exploits. It also has modules specifically designed for MongoDB penetration testing.
To use Metasploit for MongoDB scanning, you can use the following command:
```
use auxiliary/scanner/mongodb/mongodb_login
```
This command will load the MongoDB login scanner module. You can then set the target IP address and run the module to check if MongoDB is vulnerable to any known login exploits.
Automating the scanning process using tools like Nmap or Metasploit can save time and effort during a penetration test. However, it is important to note that scanning or exploiting systems without proper authorization is illegal and unethical. Always ensure that you have the necessary permissions and legal authorization before conducting any penetration testing activities.
```bash
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
```
2022-05-01 13:25:53 +00:00
### Shodan
* Tous les mongodb : `"informations sur le serveur mongodb"`
* Rechercher les serveurs mongodb entièrement ouverts : `"informations sur le serveur mongodb" -"partiellement activé"`
* Seulement partiellement activer l'authentification : `"informations sur le serveur mongodb" "partiellement activé"`
2023-06-03 13:10:46 +00:00
## Connexion
Par défaut, mongo n'exige pas de mot de passe.\
2023-06-03 13:10:46 +00:00
**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>
```
2022-05-01 13:25:53 +00:00
### [**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
2023-06-03 13:10:46 +00:00
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.
2022-05-01 13:25:53 +00:00
## 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).png" alt=""><figcaption></figcaption></figure>
**HackenProof est le lieu de tous les programmes de primes pour les bugs de cryptographie.**
2022-04-28 16:01:33 +00:00
**Obtenez une récompense sans délai**\
Les primes HackenProof ne sont lancées que lorsque leurs clients déposent le budget de récompense. Vous recevrez la récompense après la vérification du bug.
2023-03-05 19:54:13 +00:00
**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.
2023-02-27 09:28:45 +00:00
**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.
2023-02-27 09:28:45 +00:00
[**Inscrivez-vous sur HackenProof**](https://hackenproof.com/register) et commencez à gagner grâce à vos hacks !
2023-02-27 09:28:45 +00:00
{% embed url="https://hackenproof.com/register" %}
2022-11-05 09:07:43 +00:00
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<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>
2022-04-28 16:01:33 +00:00
* 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) !
2023-06-03 13:10:46 +00:00
* 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)**.**
2023-06-03 13:10:46 +00:00
* **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).
2022-04-28 16:01:33 +00:00
</details>