# 27017,27018 - Pentesting MongoDB
Leer AWS-hacking van nul tot held methtARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling van eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hacking-truuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-repos.
Sluit aan by die [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om te kommunikeer met ervare hackers en foutjagters!
**Hacking-insigte**\
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hacking ondersoek
**Hack-nuus in werklikheid**\
Bly op hoogte van die vinnige wêreld van hacking deur middel van werklike nuus en insigte
**Nuutste aankondigings**\
Bly ingelig met die nuutste foutjagbountes wat bekendgestel word en belangrike platform-opdaterings
**Sluit aan by ons op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
## Basiese Inligting
**MongoDB** is 'n **oopbron** databasisbestuurstelsel wat 'n **dokumentgeoriënteerde databasismodel** gebruik om diverse vorms van data te hanteer. Dit bied buigsaamheid en skaalbaarheid vir die bestuur van ongestruktureerde of semi-gestruktureerde data in toepassings soos groot data-analise en inhoudsbestuur.
**Verstekpoort:** 27017, 27018
```
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
```
## Opstel
### Handleiding
Om MongoDB-databasisse te enumerasieer, kan jy die volgende stappe volg:
1. Identifiseer die IP-adres en poort van die MongoDB-diens.
2. Maak 'n verbinding met die MongoDB-diens deur die `mongo`-klient te gebruik.
3. Voer die volgende opdrag in om die lys van databasisse te sien:
```bash
show dbs
```
4. Voer die volgende opdrag in om die huidige databasis te kies:
```bash
use
```
5. Voer die volgende opdrag in om die lys van kolleksies in die databasis te sien:
```bash
show collections
```
6. Voer die volgende opdrag in om die dokumente in 'n spesifieke kolleksie te sien:
```bash
db..find()
```
Deur hierdie stappe te volg, kan jy die MongoDB-databasisse en hul inhoud ondersoek.
```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
```
**Sommige MongoDB-opdragte:**
```bash
# Show databases
# Wys databasisse
show databases
# Use a specific database
# Gebruik 'n spesifieke databasis
use
# Show collections in the current database
# Wys versamelings in die huidige databasis
show collections
# Show documents in a collection
# Wys dokumente in 'n versameling
db..find()
# Insert a document into a collection
# Voeg 'n dokument by 'n versameling in
db..insertOne({})
# Update a document in a collection
# Werk 'n dokument in 'n versameling op
db..updateOne({}, {$set: {}})
# Delete a document from a collection
# Verwyder 'n dokument uit 'n versameling
db..deleteOne({})
```
**Enumeration:**
```bash
# Enumerate databases
# Enumereer databasisse
show databases
# Enumerate collections in a database
# Enumereer versamelings in 'n databasis
show collections
# Enumerate documents in a collection
# Enumereer dokumente in 'n versameling
db..find()
```
**Exploitation:**
```bash
# Dump all databases
# Stort alle databasisse
mongodump --out
# Restore a database
# Herstel 'n databasis
mongorestore
# Execute OS commands
# Voer OS-opdragte uit
db.runCommand({$eval: ""})
# Remote Code Execution (RCE)
# Verrekenaarkode-uitvoering (RCE)
db.runCommand({$where: ""})
```
**Privilege Escalation:**
```bash
# Create a new user with root role
# Skep 'n nuwe gebruiker met 'n root-rol
use admin
db.createUser({user: "", pwd: "", roles: ["root"]})
# Authenticate as a user
# Verifieer as 'n gebruiker
use admin
db.auth("", "")
```
**Exfiltration:**
```bash
# Export a collection to a JSON file
# Voer 'n versameling uit na 'n JSON-lêer
mongoexport --db --collection --out .json
# Import a JSON file into a collection
# Voer 'n JSON-lêer in 'n versameling in
mongoimport --db --collection --file .json
```
**Other:**
```bash
# Show server status
# Wys bedienerstatus
db.serverStatus()
# Show current user
# Wys huidige gebruiker
db.runCommand({connectionStatus: 1})
```
```bash
show dbs
use
show collections
db..find() #Dump the collection
db..count() #Number of records of the collection
db.current.find({"username":"admin"}) #Find in current db the username admin
```
### Outomatiese
```bash
nmap -p 27017,27018 --script mongodb-info
```
Hierdie opdrag gebruik die `nmap`-hulpmiddel om die poorte 27017 en 27018 op die teiken te skandeer en die `mongodb-info` skripsie uit te voer. Hierdie skripsie sal probeer om inligting oor die MongoDB-diens te verkry, soos die weergawe, die databasisse wat beskikbaar is en die dokumente binne-in die databasisse.
```bash
mongo --host --port 27017
```
Hierdie opdrag maak 'n verbinding met die MongoDB-diens op die teiken deur die `mongo`-kliënt te gebruik. Dit vereis die spesifisering van die teiken se IP-adres (``) en die poort (`27017`). Hierdie opdrag sal jou in staat stel om direk met die MongoDB-diens te kommunikeer en verskillende opdragte uit te voer.
```bash
show dbs
```
Hierdie opdrag sal 'n lys van alle databasisse wat beskikbaar is op die MongoDB-diens toon.
```bash
use
```
Hierdie opdrag sal oorskakel na die gespesifiseerde databasis (``) sodat jy opdragte binne-in daardie databasis kan uitvoer.
```bash
show collections
```
Hierdie opdrag sal 'n lys van alle versamelings binne-in die huidige databasis toon.
```bash
db..find()
```
Hierdie opdrag sal alle dokumente binne-in die gespesifiseerde versameling (``) in die huidige databasis toon.
```bash
db..find()
```
Hierdie opdrag sal alle dokumente binne-in die gespesifiseerde versameling (``) in die huidige databasis toon wat voldoen aan die gespesifiseerde vraag (``). Die vraag kan verskillende kriteria insluit, soos veldwaardes, vergelykingsoperatore en logiese operatore.
```bash
db..insert()
```
Hierdie opdrag sal 'n nuwe dokument invoeg in die gespesifiseerde versameling (``) in die huidige databasis. Die dokument moet in JSON-formaat wees en die veldwaardes moet ooreenstem met die versameling se skema.
```bash
db..update(, )
```
Hierdie opdrag sal een of meer dokumente binne-in die gespesifiseerde versameling (``) in die huidige databasis opdateer wat voldoen aan die gespesifiseerde vraag (``). Die opdatering moet in JSON-formaat wees en kan verskillende opdateringsoperasies insluit, soos `$set`, `$unset`, `$inc`, `$push`, ensovoorts.
```bash
db..remove()
```
Hierdie opdrag sal een of meer dokumente binne-in die gespesifiseerde versameling (``) in die huidige databasis verwyder wat voldoen aan die gespesifiseerde vraag (``).
```bash
exit
```
Hierdie opdrag sal die huidige `mongo`-sessie afsluit en jou terugbring na die opdraglyn.
```bash
nmap -sV --script "mongo* and default" -p 27017 #By default all the nmap mongo enumerate scripts are used
```
### Shodan
* Alle mongodb: `"mongodb bediener inligting"`
* Soek na volledig oop mongodb bedieners: `"mongodb bediener inligting" -"gedeeltelik geaktiveer"`
* Slegs gedeeltelik geaktiveerde outentifikasie: `"mongodb bediener inligting" "gedeeltelik geaktiveer"`
## Aanteken
Standaard vereis mongo nie 'n wagwoord nie.\
**Admin** is 'n algemene mongo databasis.
```bash
mongo
mongo :
mongo :/
mongo -u -p ''
```
Die nmap-skrip: _**mongodb-brute**_ sal nagaan of geloofwaardigheidsbewyse benodig word.
```bash
nmap -n -sV --script mongodb-brute -p 27017
```
### [**Brute force**](../generic-methodologies-and-resources/brute-force.md#mongo)
Kyk binne in _/opt/bitnami/mongodb/mongodb.conf_ om uit te vind of geloofsbriewe benodig word:
```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 Voorspelling
Voorbeeld [van hier](https://techkranti.com/idor-through-mongodb-object-ids-prediction/).
Mongo Object IDs is **12-byte heksadesimale** strings:
![http://techidiocy.com/_id-objectid-in-mongodb/](../.gitbook/assets/id-and-objectids-in-mongodb.png)
Byvoorbeeld, hier is hoe ons 'n werklike Object ID kan ontleed wat deur 'n toepassing teruggegee word: 5f2459ac9fa6dc2500314019
1. 5f2459ac: 1596217772 in desimaal = Vrydag, 31 Julie 2020 17:49:32
2. 9fa6dc: Masjien-identifiseerder
3. 2500: Proses-ID
4. 314019: 'n Inkrementele teller
Van die bogenoemde elemente sal die masjien-identifiseerder dieselfde bly solank as wat die databasis dieselfde fisiese/virtuele masjien gebruik. Die proses-ID sal slegs verander as die MongoDB-proses herlaai word. Die tydstempel sal elke sekonde opdateer word. Die enigste uitdaging in die raai van Object IDs deur eenvoudig die teller- en tydstempelwaardes te verhoog, is die feit dat Mongo DB Object IDs genereer en toewys op 'n stelselvlak.
Die instrument [https://github.com/andresriancho/mongo-objectid-predict](https://github.com/andresriancho/mongo-objectid-predict), gee 'n begin Object ID (jy kan 'n rekening skep en 'n begin-ID kry), dit stuur terug omtrent 1000 waarskynlike Object IDs wat moontlik toegewys kon gewees het aan die volgende voorwerpe, sodat jy hulle net hoef te kragtewerk.
## Plaas
As jy root is, kan jy die **mongodb.conf**-lêer **verander** sodat geen geloofsbriewe nodig is (_noauth = true_) en **sonder geloofsbriewe aanmeld**.
***
Sluit aan by [**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) bediener om met ervare hackers en foutjagters te kommunikeer!
**Hacking-insigte**\
Gaan in gesprek met inhoud wat die opwinding en uitdagings van hackering ondersoek
**Real-Time Hack Nuus**\
Bly op hoogte van die vinnige hackeringwêreld deur middel van real-time nuus en insigte
**Nuutste Aankondigings**\
Bly ingelig met die nuutste foutjagings wat begin en noodsaaklike platformopdaterings
**Sluit aan by ons op** [**Discord**](https://discord.com/invite/N3FrSbmwdy) en begin vandag saamwerk met top hackers!
Leer AWS hackering van nul tot held methtARTE (HackTricks AWS Red Team Expert)!
Ander maniere om HackTricks te ondersteun:
* As jy jou **maatskappy geadverteer wil sien in HackTricks** of **HackTricks in PDF wil aflaai**, kyk na die [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Kry die [**amptelike PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ontdek [**The PEASS Family**](https://opensea.io/collection/the-peass-family), ons versameling eksklusiewe [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Sluit aan by die** 💬 [**Discord-groep**](https://discord.gg/hRep4RUj7f) of die [**telegram-groep**](https://t.me/peass) of **volg** ons op **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Deel jou hackeringtruuks deur PR's in te dien by die** [**HackTricks**](https://github.com/carlospolop/hacktricks) en [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github-opslag.