mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
94 lines
5.4 KiB
Markdown
94 lines
5.4 KiB
Markdown
# 27017,27018 - Pentesting MongoDB
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|
||
|
||
## Βασικές Πληροφορίες
|
||
|
||
**MongoDB** είναι ένα **ανοιχτού κώδικα** σύστημα διαχείρισης βάσεων δεδομένων που χρησιμοποιεί ένα **μοντέλο βάσης δεδομένων προσανατολισμένο σε έγγραφα** για να διαχειρίζεται διάφορες μορφές δεδομένων. Προσφέρει ευελιξία και κλιμάκωση για τη διαχείριση μη δομημένων ή ημι-δομημένων δεδομένων σε εφαρμογές όπως η ανάλυση μεγάλων δεδομένων και η διαχείριση περιεχομένου. **Προεπιλεγμένη θύρα:** 27017, 27018
|
||
```
|
||
PORT STATE SERVICE VERSION
|
||
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
|
||
```
|
||
## Αριθμητική
|
||
|
||
### Χειροκίνητη
|
||
```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 servers: `"mongodb server information" -"partially enabled"`
|
||
- Μόνο μερικώς ενεργοποιημένη αυθεντικοποίηση: `"mongodb server information" "partially enabled"`
|
||
|
||
## Login
|
||
|
||
Από προεπιλογή, το 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**](../generic-hacking/brute-force.md#mongo)
|
||
|
||
Κοίτα μέσα στο _/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](https://techkranti.com/idor-through-mongodb-object-ids-prediction/).
|
||
|
||
Mongo Object IDs είναι **12-byte hexadecimal** strings:
|
||
|
||

|
||
|
||
Για παράδειγμα, εδώ είναι πώς μπορούμε να αναλύσουμε ένα πραγματικό 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](https://github.com/andresriancho/mongo-objectid-predict), δεδομένου ενός αρχικού Object ID (μπορείτε να δημιουργήσετε έναν λογαριασμό και να αποκτήσετε ένα αρχικό ID), επιστρέφει περίπου 1000 πιθανά Object IDs που θα μπορούσαν να έχουν ανατεθεί στα επόμενα αντικείμενα, οπότε απλά χρειάζεται να τα brute force.
|
||
|
||
## Post
|
||
|
||
Αν είστε root μπορείτε να **τροποποιήσετε** το **mongodb.conf** αρχείο ώστε να μην απαιτούνται διαπιστευτήρια (_noauth = true_) και να **συνδεθείτε χωρίς διαπιστευτήρια**.
|
||
|
||
---
|
||
|
||
{{#include ../banners/hacktricks-training.md}}
|