# 27017,27018 - Pentesting MongoDB {{#include ../banners/hacktricks-training.md}} ## Temel Bilgiler **MongoDB**, çeşitli veri biçimlerini işlemek için **belge odaklı veritabanı modeli** kullanan **açık kaynak** bir veritabanı yönetim sistemidir. Büyük veri analitiği ve içerik yönetimi gibi uygulamalarda yapılandırılmamış veya yarı yapılandırılmış verileri 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 ``` ## Sayım ### Manuel ```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 ``` **Bazı MongoDB komutları:** ```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 ``` ### Otomatik ```bash nmap -sV --script "mongo* and default" -p 27017 #By default all the nmap mongo enumerate scripts are used ``` ### Shodan - Tüm mongodb: `"mongodb server information"` - Tam açık mongodb sunucularını ara: `"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. ```bash mongo mongo : mongo :/ mongo -u -p '' ``` nmap betiği: _**mongodb-brute**_ kimlik bilgilerine ihtiyaç olup olmadığını kontrol edecektir. ```bash nmap -n -sV --script mongodb-brute -p 27017 ``` ### [**Brute force**](../generic-hacking/brute-force.md#mongo) Kimlik bilgilerine ihtiyaç olup olmadığını öğrenmek için _/opt/bitnami/mongodb/mongodb.conf_ dosyasını kontrol edin: ```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 Tahmini Örnek [buradan](https://techkranti.com/idor-through-mongodb-object-ids-prediction/). Mongo Object ID'leri **12 baytlık onaltılık** dizelerdir: ![http://techidiocy.com/_id-objectid-in-mongodb/](../images/id-and-ObjectIds-in-MongoDB.png) Ö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: ondalık olarak 1596217772 = 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 Object ID'leri atamasıdır. Araç [https://github.com/andresriancho/mongo-objectid-predict](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**. --- {{#include ../banners/hacktricks-training.md}}