27017,27018 - Pentesting MongoDB
Reading time: 4 minutes
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
Podstawowe informacje
MongoDB to system zarządzania bazą danych open source, który wykorzystuje model bazy danych oparty na dokumentach do obsługi różnych form danych. Oferuje elastyczność i skalowalność w zarządzaniu danymi niestrukturalnymi lub półstrukturalnymi w aplikacjach takich jak analityka big data i zarządzanie treścią. Domyślny port: 27017, 27018
PORT STATE SERVICE VERSION
27017/tcp open mongodb MongoDB 2.6.9 2.6.9
Enumeracja
Ręczna
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
Niektóre komendy MongoDB:
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
Automatyczny
nmap -sV --script "mongo* and default" -p 27017 <IP> #By default all the nmap mongo enumerate scripts are used
Shodan
- Wszystkie mongodb:
"mongodb server information"
- Szukaj pełnych otwartych serwerów mongodb:
"mongodb server information" -"partially enabled"
- Tylko częściowo włączona autoryzacja:
"mongodb server information" "partially enabled"
Login
Domyślnie mongo nie wymaga hasła.
Admin to powszechna baza danych mongo.
mongo <HOST>
mongo <HOST>:<PORT>
mongo <HOST>:<PORT>/<DB>
mongo <database> -u <username> -p '<password>'
Skrypt nmap: mongodb-brute sprawdzi, czy potrzebne są dane uwierzytelniające.
nmap -n -sV --script mongodb-brute -p 27017 <ip>
Brute force
Sprawdź w /opt/bitnami/mongodb/mongodb.conf, aby dowiedzieć się, czy potrzebne są dane uwierzytelniające:
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
Przykład stąd.
Mongo Object IDs to 12-bajtowe szesnastkowe ciągi:
Na przykład, oto jak możemy rozłożyć rzeczywisty Object ID zwrócony przez aplikację: 5f2459ac9fa6dc2500314019
- 5f2459ac: 1596217772 w systemie dziesiętnym = piątek, 31 lipca 2020 17:49:32
- 9fa6dc: Identyfikator maszyny
- 2500: Identyfikator procesu
- 314019: Licznik inkrementacyjny
Z powyższych elementów, identyfikator maszyny pozostanie taki sam tak długo, jak baza danych działa na tej samej fizycznej/wirtualnej maszynie. Identyfikator procesu zmieni się tylko, jeśli proces MongoDB zostanie zrestartowany. Znacznik czasu będzie aktualizowany co sekundę. Jedynym wyzwaniem w zgadywaniu Object IDs poprzez po prostu inkrementowanie wartości licznika i znacznika czasu, jest fakt, że Mongo DB generuje Object IDs i przypisuje Object IDs na poziomie systemowym.
Narzędzie https://github.com/andresriancho/mongo-objectid-predict, podając początkowy Object ID (możesz założyć konto i uzyskać początkowy ID), zwraca około 1000 prawdopodobnych Object IDs, które mogły zostać przypisane do następnych obiektów, więc wystarczy je bruteforce'ować.
Post
Jeśli jesteś rootem, możesz zmodyfikować plik mongodb.conf, aby nie były potrzebne żadne poświadczenia (noauth = true) i zalogować się bez poświadczeń.
tip
Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.