27017,27018 - Pentesting MongoDB

Reading time: 4 minutes

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)

Podržite HackTricks

Osnovne informacije

MongoDB je open source sistem za upravljanje bazama podataka koji koristi model baze podataka orijentisan na dokumente za rukovanje raznovrsnim 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čno

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

Neki MongoDB komandi:

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

Automatski

bash
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 autentifikacija: "mongodb server information" "partially enabled"

Login

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

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

Nmap skripta: mongodb-brute će proveriti da li su potrebne kredencijale.

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

Brute force

Pogledajte unutar /opt/bitnami/mongodb/mongodb.conf da biste saznali da li su potrebne akreditive:

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

Predikcija Mongo Objectid

Primer odavde.

Mongo Object ID-ovi su 12-bajtni heksadecimalni stringovi:

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

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

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

Od navedenih elemenata, identifikator mašine će ostati isti sve dok baza podataka radi na istoj fizičkoj/virtuelnoj mašini. ID procesa će se promeniti samo ako se MongoDB proces ponovo pokrene. Vremenska oznaka će se ažurirati svake sekunde. Jedini izazov u pogađanju Object ID-ova jednostavnim inkrementiranjem vrednosti brojača i vremenske oznake je činjenica da Mongo DB generiše Object ID-ove i dodeljuje Object ID-ove na sistemskom nivou.

Alat https://github.com/andresriancho/mongo-objectid-predict, uz datu početnu Object ID (možete napraviti nalog i dobiti početni ID), vraća oko 1000 verovatnih Object ID-ova koji bi mogli biti dodeljeni sledećim objektima, tako da ih samo treba bruteforce-ovati.

Post

Ako ste root, možete modifikovati mongodb.conf datoteku tako da nisu potrebne kredencijale (noauth = true) i prijaviti se bez kredencijala.


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)

Podržite HackTricks