# 27017,27018 - Pentesting MongoDB
Leer AWS-hacking van nul tot held met htARTE (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 met htARTE (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.