27017,27018 - Pentesting MongoDB

Reading time: 4 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Grundlegende Informationen

MongoDB ist ein Open-Source-Datenbankmanagementsystem, das ein dokumentenorientiertes Datenbankmodell verwendet, um verschiedene Datenformen zu verarbeiten. Es bietet Flexibilität und Skalierbarkeit für die Verwaltung von unstrukturierten oder semi-strukturierten Daten in Anwendungen wie Big Data-Analysen und Content-Management. Standardport: 27017, 27018

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

Aufzählung

Manuell

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

Einige MongoDB-Befehle:

bash
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

Automatisch

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

Shodan

  • Alle mongodb: "mongodb server information"
  • Suche nach vollständig offenen mongodb-Servern: "mongodb server information" -"partially enabled"
  • Nur teilweise aktivierte Authentifizierung: "mongodb server information" "partially enabled"

Login

Standardmäßig benötigt mongo kein Passwort.
Admin ist eine gängige mongo-Datenbank.

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

Das nmap-Skript: mongodb-brute wird überprüfen, ob Anmeldeinformationen benötigt werden.

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

Brute force

Schauen Sie in /opt/bitnami/mongodb/mongodb.conf hinein, um zu erfahren, ob Anmeldeinformationen benötigt werden:

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 Vorhersage

Beispiel von hier.

Mongo Object IDs sind 12-Byte hexadezimale Zeichenfolgen:

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

Zum Beispiel, hier ist, wie wir eine tatsächliche Object ID, die von einer Anwendung zurückgegeben wird, zerlegen können: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 in Dezimal = Freitag, 31. Juli 2020 17:49:32
  2. 9fa6dc: Maschinenidentifikator
  3. 2500: Prozess-ID
  4. 314019: Ein inkrementeller Zähler

Von den oben genannten Elementen bleibt der Maschinenidentifikator so lange gleich, wie die Datenbank auf derselben physischen/virtuellen Maschine läuft. Die Prozess-ID ändert sich nur, wenn der MongoDB-Prozess neu gestartet wird. Der Zeitstempel wird jede Sekunde aktualisiert. Die einzige Herausforderung beim Raten von Object IDs, indem man einfach die Zähler- und Zeitstempelwerte inkrementiert, ist die Tatsache, dass MongoDB Object IDs generiert und auf Systemebene zuweist.

Das Tool https://github.com/andresriancho/mongo-objectid-predict, gegeben eine Start-Object ID (Sie können ein Konto erstellen und eine Start-ID erhalten), sendet etwa 1000 wahrscheinliche Object IDs zurück, die möglicherweise den nächsten Objekten zugewiesen worden sein könnten, sodass Sie sie nur bruteforcen müssen.

Post

Wenn Sie root sind, können Sie die mongodb.conf Datei ändern, sodass keine Anmeldeinformationen benötigt werden (noauth = true) und ohne Anmeldeinformationen einloggen.


tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks