mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 21:24:06 +00:00
348 lines
13 KiB
Markdown
348 lines
13 KiB
Markdown
# 27017,27018 - Pentesting MongoDB
|
|
|
|
<details>
|
|
|
|
<summary><strong>Leer AWS-hacking van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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.
|
|
|
|
</details>
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
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 <databasisnaam>
|
|
```
|
|
|
|
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.<kolleksienaam>.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 <database_name>
|
|
|
|
# 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.<collection_name>.find()
|
|
|
|
# Insert a document into a collection
|
|
# Voeg 'n dokument by 'n versameling in
|
|
db.<collection_name>.insertOne({<document>})
|
|
|
|
# Update a document in a collection
|
|
# Werk 'n dokument in 'n versameling op
|
|
db.<collection_name>.updateOne({<filter>}, {$set: {<update>}})
|
|
|
|
# Delete a document from a collection
|
|
# Verwyder 'n dokument uit 'n versameling
|
|
db.<collection_name>.deleteOne({<filter>})
|
|
```
|
|
|
|
**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.<collection_name>.find()
|
|
```
|
|
|
|
**Exploitation:**
|
|
|
|
```bash
|
|
# Dump all databases
|
|
# Stort alle databasisse
|
|
mongodump --out <output_directory>
|
|
|
|
# Restore a database
|
|
# Herstel 'n databasis
|
|
mongorestore <input_directory>
|
|
|
|
# Execute OS commands
|
|
# Voer OS-opdragte uit
|
|
db.runCommand({$eval: "<command>"})
|
|
|
|
# Remote Code Execution (RCE)
|
|
# Verrekenaarkode-uitvoering (RCE)
|
|
db.runCommand({$where: "<code>"})
|
|
```
|
|
|
|
**Privilege Escalation:**
|
|
|
|
```bash
|
|
# Create a new user with root role
|
|
# Skep 'n nuwe gebruiker met 'n root-rol
|
|
use admin
|
|
db.createUser({user: "<username>", pwd: "<password>", roles: ["root"]})
|
|
|
|
# Authenticate as a user
|
|
# Verifieer as 'n gebruiker
|
|
use admin
|
|
db.auth("<username>", "<password>")
|
|
```
|
|
|
|
**Exfiltration:**
|
|
|
|
```bash
|
|
# Export a collection to a JSON file
|
|
# Voer 'n versameling uit na 'n JSON-lêer
|
|
mongoexport --db <database_name> --collection <collection_name> --out <output_file>.json
|
|
|
|
# Import a JSON file into a collection
|
|
# Voer 'n JSON-lêer in 'n versameling in
|
|
mongoimport --db <database_name> --collection <collection_name> --file <input_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 <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
|
|
```
|
|
### Outomatiese
|
|
|
|
```bash
|
|
nmap -p 27017,27018 --script mongodb-info <target>
|
|
```
|
|
|
|
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 <target> --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 (`<target>`) 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 <database>
|
|
```
|
|
|
|
Hierdie opdrag sal oorskakel na die gespesifiseerde databasis (`<database>`) 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.<collection>.find()
|
|
```
|
|
|
|
Hierdie opdrag sal alle dokumente binne-in die gespesifiseerde versameling (`<collection>`) in die huidige databasis toon.
|
|
|
|
```bash
|
|
db.<collection>.find(<query>)
|
|
```
|
|
|
|
Hierdie opdrag sal alle dokumente binne-in die gespesifiseerde versameling (`<collection>`) in die huidige databasis toon wat voldoen aan die gespesifiseerde vraag (`<query>`). Die vraag kan verskillende kriteria insluit, soos veldwaardes, vergelykingsoperatore en logiese operatore.
|
|
|
|
```bash
|
|
db.<collection>.insert(<document>)
|
|
```
|
|
|
|
Hierdie opdrag sal 'n nuwe dokument invoeg in die gespesifiseerde versameling (`<collection>`) in die huidige databasis. Die dokument moet in JSON-formaat wees en die veldwaardes moet ooreenstem met die versameling se skema.
|
|
|
|
```bash
|
|
db.<collection>.update(<query>, <update>)
|
|
```
|
|
|
|
Hierdie opdrag sal een of meer dokumente binne-in die gespesifiseerde versameling (`<collection>`) in die huidige databasis opdateer wat voldoen aan die gespesifiseerde vraag (`<query>`). Die opdatering moet in JSON-formaat wees en kan verskillende opdateringsoperasies insluit, soos `$set`, `$unset`, `$inc`, `$push`, ensovoorts.
|
|
|
|
```bash
|
|
db.<collection>.remove(<query>)
|
|
```
|
|
|
|
Hierdie opdrag sal een of meer dokumente binne-in die gespesifiseerde versameling (`<collection>`) in die huidige databasis verwyder wat voldoen aan die gespesifiseerde vraag (`<query>`).
|
|
|
|
```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 <IP> #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 <HOST>
|
|
mongo <HOST>:<PORT>
|
|
mongo <HOST>:<PORT>/<DB>
|
|
mongo <database> -u <username> -p '<password>'
|
|
```
|
|
Die nmap-skrip: _**mongodb-brute**_ sal nagaan of geloofwaardigheidsbewyse benodig word.
|
|
```bash
|
|
nmap -n -sV --script mongodb-brute -p 27017 <ip>
|
|
```
|
|
### [**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**.
|
|
|
|
***
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1) (3) (1).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
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!
|
|
|
|
<details>
|
|
|
|
<summary><strong>Leer AWS hackering van nul tot held met</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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.
|
|
|
|
</details>
|