27017,27018 - Pentesting MongoDB

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

D'autres façons de soutenir HackTricks:

Rejoignez le serveur HackenProof Discord pour communiquer avec des pirates expérimentés et des chasseurs de primes!

Perspectives de piratage Engagez-vous avec du contenu qui explore le frisson et les défis du piratage

Actualités de piratage en temps réel Restez informé du monde du piratage en évolution rapide grâce à des actualités et des 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 et commencez à collaborer avec les meilleurs pirates dès aujourd'hui!

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 une flexibilité et une évolutivité pour gérer des données non structurées ou semi-structurées dans des applications telles que l'analyse de données volumineuses 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

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 :

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

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"

  • Recherchez les serveurs mongodb entièrement ouverts : "mongodb server information" -"partially enabled"

  • Seulement partiellement autorisé l'authentification : "mongodb server information" "partially enabled"

Connexion

Par défaut, mongo ne nécessite pas de mot de passe. Admin est une base de données mongo courante.

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.

nmap -n -sV --script mongodb-brute -p 27017 <ip>

Regardez à l'intérieur de /opt/bitnami/mongodb/mongodb.conf pour savoir si des identifiants sont nécessaires:

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'Objectid Mongo

Exemple ici.

Les Object IDs Mongo sont des chaînes hexadécimales de 12 octets :

Par exemple, voici comment nous pouvons disséquer un Object ID 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 changera uniquement 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 de compteur et de timestamp est le fait que Mongo DB génère des Object IDs et attribue des Object IDs au niveau du système.

L'outil https://github.com/andresriancho/mongo-objectid-predict, en fournissant 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 pour qu'aucun identifiant n'est nécessaire (noauth = true) et vous connecter sans identifiants.


Rejoignez le serveur HackenProof Discord pour communiquer avec des hackers expérimentés et des chasseurs de primes !

Perspectives de Hacking Engagez-vous avec du contenu qui explore le frisson et les défis du hacking

Actualités de Hacking en Temps Réel Restez informé du monde du hacking en évolution rapide grâce aux actualités et aux informations 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 et commencez à collaborer avec les meilleurs hackers dès aujourd'hui !

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks :

Dernière mise à jour