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

149 lines
7.6 KiB
Markdown

# 27017,27018 - Pentesting MongoDB
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Join [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) server to communicate with experienced hackers and bug bounty hunters!
**Hacking Insights**\
Engage with content that delves into the thrill and challenges of hacking
**Real-Time Hack News**\
Keep up-to-date with fast-paced hacking world through real-time news and insights
**Latest Announcements**\
Stay informed with the newest bug bounties launching and crucial platform updates
**Join us on** [**Discord**](https://discord.com/invite/N3FrSbmwdy) and start collaborating with top hackers today!
## 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"`
* Seulement l'authentification 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-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 de l'Objectid Mongo
Exemple [d'ici](https://techkranti.com/idor-through-mongodb-object-ids-prediction/).
Les ID d'Object Mongo sont des chaînes **hexadécimales de 12 octets** :
![http://techidiocy.com/\_id-objectid-in-mongodb/](../.gitbook/assets/id-and-ObjectIds-in-MongoDB.png)
Par exemple, voici comment nous pouvons décomposer un ID d'Object réel retourné 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'Object en incrémentant simplement les valeurs du compteur et de l'horodatage, est le fait que Mongo DB génère des ID d'Object et les attribue au niveau système.
L'outil [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), donné un ID d'Object de départ (vous pouvez créer un compte et obtenir un ID de départ), renvoie environ 1000 ID d'Object 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**.
***
<figure><img src="../.gitbook/assets/image (380).png" alt=""><figcaption></figcaption></figure>
Rejoignez le serveur [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) pour communiquer avec des hackers expérimentés et des chasseurs de bugs !
**Aperçus de Hacking**\
Engagez-vous avec du contenu qui explore le frisson et les défis du hacking
**Actualités de Hack en Temps Réel**\
Restez à jour avec le monde du hacking en rapide évolution grâce à des nouvelles et des aperçus en temps réel
**Dernières Annonces**\
Restez informé des nouvelles 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 aujourd'hui !
{% hint style="success" %}
Apprenez et pratiquez le Hacking AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Apprenez et pratiquez le Hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Soutenir HackTricks</summary>
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Partagez des astuces de hacking en soumettant des PRs aux dépôts github de** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}