27017,27018 - Pentesting MongoDB

Tip

AWS Hacking’i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking’i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Temel Bilgiler

MongoDB bir açık kaynak veritabanı yönetim sistemidir ve çeşitli veri biçimlerini işlemek için bir belge yönelimli veritabanı modeli kullanır. Yapısal olmayan veya yarı yapılandırılmış verilerin yönetiminde esneklik ve ölçeklenebilirlik sağlar; büyük veri analitiği ve içerik yönetimi gibi uygulamalarda kullanılır. Varsayılan port: 27017, 27018

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

Keşif

Manuel

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

Bazı MongoDB komutları:

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

Otomatik

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

Shodan

  • Tüm mongodb: "mongodb server information"
  • Tamamen açık mongodb sunucularını ara: "mongodb server information" -"partially enabled"
  • Yalnızca kısmen etkinleştirilmiş auth: "mongodb server information" "partially enabled"

Giriş

Varsayılan olarak mongo parola gerektirmez.
Admin yaygın bir mongo veritabanıdır.

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

Bu nmap script: mongodb-brute creds gerekip gerekmediğini kontrol eder.

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

Brute force

Kimlik bilgileri gerekip gerekmediğini görmek için /opt/bitnami/mongodb/mongodb.conf dosyasına bakın:

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

Örnek buradan.

Mongo Object ID’leri 12-byte hexadecimal dizilerdir:

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

Örneğin, bir uygulamanın döndürdüğü gerçek bir Object ID’yi şöyle ayırabiliriz: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 ondalık = Cuma, 31 Temmuz 2020 17:49:32
  2. 9fa6dc: Makine Tanımlayıcısı
  3. 2500: Process ID
  4. 314019: Artan sayaç

Yukarıdaki öğelerden makine tanımlayıcısı, veritabanı aynı fiziksel/sanal makinede çalıştığı sürece aynı kalır. Process ID yalnızca MongoDB süreci yeniden başlatıldığında değişir. Zaman damgası her saniye güncellenir. Sayaç ve zaman damgası değerlerini basitçe artırarak Object ID’leri tahmin etmedeki tek zorluk, MongoDB’nin Object ID’leri sistem seviyesinde oluşturup atıyor olmasıdır.

Araç https://github.com/andresriancho/mongo-objectid-predict, bir başlangıç Object ID verildiğinde (bir hesap oluşturup başlangıç ID’si alabilirsiniz), sonraki objelere atanmış olabilecek yaklaşık 1000 olası Object ID döndürür; bu yüzden bunları sadece bruteforce etmeniz yeterlidir.

Post

Eğer root iseniz mongodb.conf dosyasını değiştirerek kimlik bilgilerine gerek kalmayacak şekilde (noauth = true) ayarlayabilir ve login without credentials yapabilirsiniz.

MongoBleed zlib Memory Disclosure (CVE-2025-14847)

Geniş çapta etkili doğrulanmamış bir bellek açığa çıkması (“MongoBleed”), MongoDB 3.6–8.2 sürümlerini etkiler; bu, zlib network compressor is enabled olduğunda ortaya çıkar. OP_COMPRESSED header, saldırgan tarafından sağlanan uncompressedSize’a güvenir; sunucu o boyutta bir buffer ayırır ve çok daha küçük sıkıştırılmış bir payload sağlanmış olmasına rağmen yanıtların içine geri kopyalar. Ek byte’lar diğer bağlantılardan, /proc’tan veya WiredTiger cache’inden gelen uninitialized heap data’dır. Saldırganlar beklenen BSON \x00 terminator’ü atlayınca MongoDB’nin parser’ı o aşırı büyük buffer’ı bir terminator bulana dek taramaya devam eder ve hata yanıtı hem kötü amaçlı belgeyi hem de taranan heap byte’larını pre-auth olarak TCP/27017 üzerinde yansıtır.

Açığa çıkma gereksinimleri ve hızlı kontroller

  • Sunucu sürümü aşağıdaki etkilenebilir aralıklarda olmalıdır (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 veya networkMessageCompressors içinde zlib bulunmalıdır (birçok build’te varsayılan). Bunu shell’den şu şekilde kontrol edin:
db.adminCommand({getParameter: 1, networkMessageCompressors: 1})
  • Saldırganın yalnızca MongoDB portuna ağ erişimi olması yeterlidir. Kimlik doğrulaması gerekli değildir.

Exploitation & harvesting workflow

  1. compressors:["zlib"] belirterek wire-protocol handshake’i başlatın, böylece oturum zlib kullanır.
  2. Gerçek açılmış yükten çok daha büyük olarak bildirilen uncompressedSize değerine sahip OP_COMPRESSED frame’leri gönderin ve böylece oversized heap allocation full of old data zorlayın.
  3. Gömülü BSON’u son bir \x00 içermeyecek şekilde oluşturun; böylece parser terminator ararken saldırgan kontrollü verinin ötesine geçip oversized buffer’a girer.
  4. MongoDB, orijinal mesaj ile taranan heap baytlarını içeren bir hata üretir ve leaking memory. Farklı uzunluklar/offset’lerle tekrarlayarak sırları (creds/API keys/session tokens), WiredTiger stats ve /proc artefaktlarını biriktirin.

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

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

Tespit gürültü sinyali (yüksek hacimli bağlantılar)

Saldırı genellikle birçok kısa ömürlü istek üretir. mongod/mongod.exe’ye gelen bağlantılarda ani artışlara dikkat edin. Örnek XQL avı (>500 connections/min her uzak IP için, varsayılan olarak RFC1918/loopback/link-local/mcast/broadcast/reserved aralıkları hariç):

Cortex XQL yüksek hızlı Mongo bağlantıları ```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>


## Referanslar

- [Unit 42 – Threat Brief: MongoDB Vulnerability (CVE-2025-14847)](https://unit42.paloaltonetworks.com/mongobleed-cve-2025-14847/)
- [Tenable – CVE-2025-14847 (MongoBleed): MongoDB Memory Leak Vulnerability Exploited in the Wild](https://www.tenable.com/blog/cve-2025-14847-mongobleed-mongodb-memory-leak-vulnerability-exploited-in-the-wild)
- [MongoDB Security Advisory SERVER-115508](https://jira.mongodb.org/browse/SERVER-115508)
- [Censys – MongoBleed Advisory](https://censys.com/advisory/cve-2025-14847)
- [MongoBleed PoC (joe-desimone/mongobleed)](https://github.com/joe-desimone/mongobleed)

---

> [!TIP]
> AWS Hacking'i öğrenin ve pratik yapın:<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;">\
> GCP Hacking'i öğrenin ve pratik yapın: <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;">
> Azure Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
>
> - [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
> - **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** bizi **takip edin** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)**.**
> - **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
>
> </details>