hacktricks/network-services-pentesting/27017-27018-mongodb.md

7.5 KiB
Raw Blame History

27017,27018 - Pentesting MongoDB

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Join HackenProof Discord server to communicate with experienced hackers and bug bounty hunters!

Hacking Insights
Engage with content that delves into the thrill and challenges of hacking

Real-Time Hack News
Keep up-to-date with fast-paced hacking world through real-time news and insights

Latest Announcements
Stay informed with the newest bug bounties launching and crucial platform updates

Join us on Discord and start collaborating with top hackers today!

Temel Bilgiler

MongoDB, çeşitli veri biçimlerini işlemek için belge odaklı veritabanı modeli kullanan ık kaynak bir veritabanı yönetim sistemidir. Yapısal olmayan veya yarı yapısal verileri büyük veri analitiği ve içerik yönetimi gibi uygulamalarda yönetmek için esneklik ve ölçeklenebilirlik sunar. Varsayılan port: 27017, 27018

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

Enumeration

Manual

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ı arayın: "mongodb server information" -"partially enabled"
  • Sadece kısmen kimlik doğrulama etkin: "mongodb server information" "partially enabled"

Giriş

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

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

nmap betiği: mongodb-brute kimlik bilgilerine ihtiyaç olup olmadığını kontrol edecektir.

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

Brute force

Kimlik bilgilerine ihtiyaç olup olmadığını öğrenmek 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 Tahmini

Örnek buradan alınmıştır.

Mongo Object ID'leri 12 baytlık onaltılık dizelerdir:

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

Örneğin, bir uygulama tarafından döndürülen gerçek bir Object ID'yi nasıl parçalayabileceğimize bakalım: 5f2459ac9fa6dc2500314019

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

Yukarıdaki öğelerden, makine tanımlayıcısı, veritabanı aynı fiziksel/sanal makinede çalıştığı sürece aynı kalacaktır. Süreç ID'si yalnızca MongoDB süreci yeniden başlatıldığında değişecektir. Zaman damgası her saniye güncellenecektir. Object ID'leri tahmin etmenin tek zorluğu, sayaç ve zaman damgası değerlerini basitçe artırmak, Mongo DB'nin Object ID'leri oluşturması ve sistem düzeyinde atamasıdır.

Araç https://github.com/andresriancho/mongo-objectid-predict, başlangıç Object ID'si verildiğinde (bir hesap oluşturabilir ve bir başlangıç ID'si alabilirsiniz), muhtemel olarak bir sonraki nesnelere atanmış olabilecek yaklaşık 1000 olası Object ID'si geri gönderir, böylece bunları brute force ile denemeniz yeterlidir.

Post

Eğer root iseniz, mongodb.conf dosyasını değiştirebilirsiniz böylece kimlik bilgilerine ihtiyaç duyulmaz (noauth = true) ve kimlik bilgileri olmadan giriş yapabilirsiniz.


Deneyimli hackerlar ve bug bounty avcıları ile iletişim kurmak için HackenProof Discord sunucusuna katılın!

Hacking İçgörüleri
Hacking'in heyecanı ve zorluklarına dalan içeriklerle etkileşimde bulunun

Gerçek Zamanlı Hack Haberleri
Gerçek zamanlı haberler ve içgörülerle hızlı tempolu hacking dünyasında güncel kalın

Son Duyurular
Yeni başlayan bug bounty'ler ve kritik platform güncellemeleri hakkında bilgi sahibi olun

Bugün en iyi hackerlarla işbirliği yapmak için Discord sunucumuza katılın!

{% hint style="success" %} 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)

HackTricks'i Destekleyin
{% endhint %}