27017,27018 - Pentesting MongoDB

Reading time: 4 minutes

tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें

Basic Information

MongoDB एक ओपन सोर्स डेटाबेस प्रबंधन प्रणाली है जो विभिन्न प्रकार के डेटा को संभालने के लिए डॉक्यूमेंट-ओरिएंटेड डेटाबेस मॉडल का उपयोग करती है। यह बड़े डेटा एनालिटिक्स और सामग्री प्रबंधन जैसे अनुप्रयोगों में असंरचित या अर्ध-संरचित डेटा प्रबंधित करने के लिए लचीलापन और स्केलेबिलिटी प्रदान करती है। डिफ़ॉल्ट पोर्ट: 27017, 27018

PORT      STATE SERVICE VERSION
27017/tcp open  mongodb MongoDB 2.6.9 2.6.9

Enumeration

Manual

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

कुछ 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

स्वचालित

bash
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used

Shodan

  • सभी mongodb: "mongodb server information"
  • पूर्ण रूप से खुले mongodb सर्वरों के लिए खोजें: "mongodb server information" -"partially enabled"
  • केवल आंशिक रूप से प्रमाणीकरण सक्षम करें: "mongodb server information" "partially enabled"

लॉगिन

डिफ़ॉल्ट रूप से mongo पासवर्ड की आवश्यकता नहीं है।
Admin एक सामान्य mongo डेटाबेस है।

bash
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'

nmap स्क्रिप्ट: mongodb-brute यह जांचेगा कि क्या क्रेडेंशियल्स की आवश्यकता है।

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

Brute force

_/opt/bitnami/mongodb/mongodb.conf के अंदर देखें कि क्या क्रेडेंशियल्स की आवश्यकता है:

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

Mongo Objectid Predict

Example from here.

Mongo Object IDs 12-बाइट हेक्साडेसिमल स्ट्रिंग्स हैं:

http://techidiocy.com/_id-objectid-in-mongodb/

उदाहरण के लिए, यहाँ एक वास्तविक Object ID है जिसे एक एप्लिकेशन द्वारा लौटाया गया है: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 दशमलव में = शुक्रवार, 31 जुलाई 2020 17:49:32
  2. 9fa6dc: मशीन पहचानकर्ता
  3. 2500: प्रक्रिया ID
  4. 314019: एक वृद्धिशील काउंटर

उपरोक्त तत्वों में, मशीन पहचानकर्ता तब तक समान रहेगा जब तक डेटाबेस उसी भौतिक/वर्चुअल मशीन पर चल रहा है। प्रक्रिया ID केवल तब बदलेगी जब MongoDB प्रक्रिया को पुनः प्रारंभ किया जाएगा। टाइमस्टैम्प हर सेकंड अपडेट होगा। Object IDs का अनुमान लगाने में केवल काउंटर और टाइमस्टैम्प मानों को सरलता से बढ़ाने की चुनौती यह है कि Mongo DB सिस्टम स्तर पर Object IDs उत्पन्न करता है और असाइन करता है।

उपकरण https://github.com/andresriancho/mongo-objectid-predict, एक प्रारंभिक Object ID (आप एक खाता बना सकते हैं और एक प्रारंभिक ID प्राप्त कर सकते हैं) दिए जाने पर, यह लगभग 1000 संभावित Object IDs वापस भेजता है जो संभवतः अगले ऑब्जेक्ट्स को असाइन किए जा सकते थे, इसलिए आपको बस उन्हें ब्रूटफोर्स करना है।

Post

यदि आप रूट हैं तो आप mongodb.conf फ़ाइल को संशोधित कर सकते हैं ताकि कोई क्रेडेंशियल्स की आवश्यकता न हो (noauth = true) और क्रेडेंशियल्स के बिना लॉगिन करें


tip

AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks का समर्थन करें