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

8.8 KiB
Raw Blame History

27017,27018 - Pentesting MongoDB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Join HackenProof Discord 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 and start collaborating with top hackers today!

Basic Information

MongoDB είναι ένα ανοιχτού κώδικα σύστημα διαχείρισης βάσεων δεδομένων που χρησιμοποιεί ένα μοντέλο βάσης δεδομένων προσανατολισμένο σε έγγραφα για να διαχειρίζεται διάφορες μορφές δεδομένων. Προσφέρει ευελιξία και κλιμάκωση για τη διαχείριση μη δομημένων ή ημι-δομημένων δεδομένων σε εφαρμογές όπως η ανάλυση μεγάλων δεδομένων και η διαχείριση περιεχομένου. Προεπιλεγμένη θύρα: 27017, 27018

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

Enumeration

Χειροκίνητη

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:

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

Αυτόματη

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 servers: "mongodb server information" -"partially enabled"
  • Μόνο μερικώς ενεργοποιημένη αυθεντικοποίηση: "mongodb server information" "partially enabled"

Login

Από προεπιλογή, το mongo δεν απαιτεί κωδικό πρόσβασης.
Admin είναι μια κοινή βάση δεδομένων mongo.

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

Το σενάριο nmap: mongodb-brute θα ελέγξει αν απαιτούνται διαπιστευτήρια.

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

Brute force

Κοίτα μέσα στο /opt/bitnami/mongodb/mongodb.conf για να δεις αν χρειάζονται διαπιστευτήρια:

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-byte hexadecimal strings:

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

Για παράδειγμα, εδώ είναι πώς μπορούμε να αναλύσουμε ένα πραγματικό Object ID που επιστρέφεται από μια εφαρμογή: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 σε δεκαδικό = Παρασκευή, 31 Ιουλίου 2020 17:49:32
  2. 9fa6dc: Αναγνωριστικό Μηχανής
  3. 2500: Αναγνωριστικό Διαδικασίας
  4. 314019: Ένας αυξανόμενος μετρητής

Από τα παραπάνω στοιχεία, το αναγνωριστικό μηχανής θα παραμείνει το ίδιο όσο η βάση δεδομένων εκτελείται στην ίδια φυσική/εικονική μηχανή. Το αναγνωριστικό διαδικασίας θα αλλάξει μόνο αν η διαδικασία MongoDB επανεκκινηθεί. Η χρονική σήμανση θα ενημερώνεται κάθε δευτερόλεπτο. Η μόνη πρόκληση στο να μαντέψετε τα Object IDs απλά αυξάνοντας τις τιμές του μετρητή και της χρονικής σήμανσης, είναι το γεγονός ότι η Mongo DB δημιουργεί Object IDs και ανα assigns Object IDs σε επίπεδο συστήματος.

Το εργαλείο https://github.com/andresriancho/mongo-objectid-predict, δεδομένου ενός αρχικού Object ID (μπορείτε να δημιουργήσετε έναν λογαριασμό και να αποκτήσετε ένα αρχικό ID), επιστρέφει περίπου 1000 πιθανά Object IDs που θα μπορούσαν να έχουν ανατεθεί στα επόμενα αντικείμενα, οπότε απλά χρειάζεται να τα brute force.

Post

Αν είστε root μπορείτε να τροποποιήσετε το mongodb.conf αρχείο ώστε να μην απαιτούνται διαπιστευτήρια (noauth = true) και να συνδεθείτε χωρίς διαπιστευτήρια.


Join HackenProof Discord 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 and start collaborating with top hackers today!

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}