27017,27018 - Pentesting MongoDB

Tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

Osnovne informacije

MongoDB je sistem za upravljanje bazama podataka otvorenog koda koji koristi model baze podataka orijentisan na dokumente za rukovanje različitim oblicima podataka. Pruža fleksibilnost i skalabilnost za upravljanje nestrukturiranim ili polustrukturiranim podacima u aplikacijama kao što su analitika velikih podataka i upravljanje sadržajem. Podrazumevani port: 27017, 27018

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

Enumeracija

Ručna

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

Neke MongoDB naredbe:

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

Automatski

nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used

Shodan

  • Svi mongodb: "mongodb server information"
  • Pretraži potpuno otvorene mongodb servere: "mongodb server information" -"partially enabled"
  • Samo delimično omogućena auth: "mongodb server information" "partially enabled"

Prijava

Po podrazumevanom mongo ne zahteva lozinku.
Admin je uobičajena mongo baza podataka.

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

nmap skripta: mongodb-brute će proveriti da li su creds potrebni.

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

Brute force

Pogledaj u /opt/bitnami/mongodb/mongodb.conf da bi saznao da li su potrebni pristupni podaci:

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

Primer from here.

Mongo Object IDs su 12-bajtni heksadecimalni stringovi:

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

Na primer, ovako možemo rastaviti stvarni Object ID koji vraća aplikacija: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 u dekadnom = petak, 31. jul 2020. 17:49:32
  2. 9fa6dc: Identifikator mašine
  3. 2500: ID procesa
  4. 314019: Inkrementalni brojač

Od gore navedenih elemenata, identifikator mašine će ostati isti dok baza podataka radi na istoj fizičkoj/virtuelnoj mašini. ID procesa će se promeniti samo ako se MongoDB proces restartuje. Timestamp će se ažurirati svake sekunde. Jedini izazov u pogađanju Object ID-ja jednostavnim inkrementiranjem vrednosti brojača i timestampa je činjenica da MongoDB generiše i dodeljuje Object ID-je na nivou sistema.

Alat https://github.com/andresriancho/mongo-objectid-predict, ako mu date početni Object ID (možete napraviti nalog i dobiti početni ID), vraća oko 1000 verovatnih Object ID-ja koji bi mogli biti dodeljeni narednim objektima, pa ih samo treba bruteforce-ovati.

Post

Ako ste root možete izmeniti fajl mongodb.conf tako da ne budu potrebne kredencijale (noauth = true) i prijaviti se bez kredencijala.

MongoBleed zlib Memory Disclosure (CVE-2025-14847)

Široko rasprostranjeno neautentifikovano otkrivanje memorije (“MongoBleed”) pogađa MongoDB 3.6–8.2 kada je omogućен zlib network compressor. Zaglavlje OP_COMPRESSED veruje attacker-supplied uncompressedSize, pa server alocira bafer te veličine i kopira ga nazad u odgovore iako je dostavljen samo mnogo manji kompresovani payload. Dodatni bajtovi su neinicijalizovani heap podaci iz drugih konekcija, /proc, ili WiredTiger cache-a. Napadači zatim izostave očekivani BSON \x00 terminator, pa MongoDB-ov parser nastavlja da skenira taj preveliki bafer dok ne nađe terminator, a odgovor na grešku odražava i zlonamerni dokument i skenirane heap bajtove pre-auth na TCP/27017.

Zahtevi izloženosti & brze provere

  • Verzija servera mora biti u jednoj od ranjivih verzija (3.6, 4.0, 4.2, 4.4.0–4.4.29, 5.0.0–5.0.31, 6.0.0–6.0.26, 7.0.0–7.0.27, 8.0.0–8.0.16, 8.2.0–8.2.2).
  • net.compression.compressors ili networkMessageCompressors moraju uključivati zlib (podrazumevano na mnogim build-ovima). Proverite iz shell-a sa:
db.adminCommand({getParameter: 1, networkMessageCompressors: 1})
  • Napadaču je dovoljan samo mrežni pristup MongoDB portu. Autentikacija nije potrebna.

Exploitation & harvesting workflow

  1. Inicirajte wire-protocol handshake oglašavajući compressors:["zlib"] tako da sesija koristi zlib.
  2. Pošaljite OP_COMPRESSED frejmove čiji deklarisani uncompressedSize je daleko veći od stvarnog dekompresovanog payload-a kako biste primorali preveliku heap alokaciju punu starih podataka.
  3. Kreirajte ugrađeni BSON without a final \x00 tako da parser pređe preko podataka koje kontroliše napadač u preveliki bafer dok traži terminator.
  4. MongoDB emituje grešku koja uključuje originalnu poruku plus sve bajtove iz heapa koji su skenirani, leaking memory. Ponavljajte sa različitim dužinama/offsetima da biste agregirali tajne (creds/API keys/session tokens), WiredTiger stats i /proc artefakte.

The public PoC automates the probing offsets and carving of the returned fragments:

python3 mongobleed.py --host <target> --max-offset 50000 --output leaks.bin

Signal buke detekcije (povećana stopa konekcija)

Napad obično generiše mnogo kratkotrajnih zahteva. Pratite nagle poraste dolaznih konekcija prema mongod/mongod.exe. Primer XQL hunt (>500 konekcija/min po udaljenom IP, podrazumevano isključujući RFC1918/loopback/link-local/mcast/broadcast/reserved opsege):

Cortex XQL visokobrzinske Mongo konekcije ```sql // High-velocity inbound connections to mongod/mongod.exe (possible MongoBleed probing)

dataset = xdr_data | filter event_type = ENUM.NETWORK | filter lowercase(actor_process_image_name) in (“mongod”, “mongod.exe”) | filter action_network_is_server = true | filter action_remote_ip not in (null, “”) | filter incidr(action_remote_ip, “10.0.0.0/8”) != true and incidr(action_remote_ip, “192.168.0.0/16”) != true and incidr(action_remote_ip, “172.16.0.0/12”) != true and incidr(action_remote_ip, “127.0.0.0/8”) != true and incidr(action_remote_ip, “169.254.0.0/16”) != true and incidr(action_remote_ip, “224.0.0.0/4”) != true and incidr(action_remote_ip, “255.255.255.255/32”) != true and incidr(action_remote_ip, “198.18.0.0/15”) != true | filter action_network_session_duration <= 5000 | bin _time span = 1m | comp count(_time) as Counter by agent_hostname, action_remote_ip, _time | filter Counter >= 500

</details>


## Izvori

- [Unit 42 – Izveštaj o pretnji: MongoDB ranjivost (CVE-2025-14847)](https://unit42.paloaltonetworks.com/mongobleed-cve-2025-14847/)
- [Tenable – CVE-2025-14847 (MongoBleed): MongoDB Memory Leak Ranjivost iskorišćena u prirodi](https://www.tenable.com/blog/cve-2025-14847-mongobleed-mongodb-memory-leak-vulnerability-exploited-in-the-wild)
- [MongoDB Bezbednosno saopštenje SERVER-115508](https://jira.mongodb.org/browse/SERVER-115508)
- [Censys – MongoBleed saopštenje](https://censys.com/advisory/cve-2025-14847)
- [MongoBleed PoC (joe-desimone/mongobleed)](https://github.com/joe-desimone/mongobleed)

---

> [!TIP]
> Učite i vežbajte AWS Hacking:<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../../../images/arte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">\
> Učite i vežbajte GCP Hacking: <img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)<img src="../../../../../images/grte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
> Učite i vežbajte Azure Hacking: <img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">[**HackTricks Training Azure Red Team Expert (AzRTE)**](https://training.hacktricks.xyz/courses/azrte)<img src="../../../../../images/azrte.png" alt="" style="width:auto;height:24px;vertical-align:middle;">
>
> <details>
>
> <summary>Podržite HackTricks</summary>
>
> - Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
> - **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
>
> </details>