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

7.5 KiB

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!

Podstawowe informacje

MongoDB to system zarządzania bazą danych typu open source, który wykorzystuje model bazy danych zorientowanej na dokumenty do obsługi różnych form danych. Oferuje elastyczność i skalowalność w zarządzaniu danymi nieustrukturyzowanymi lub półustrukturyzowanymi w aplikacjach takich jak analityka dużych zbiorów danych 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 polecenia 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"

Logowanie

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 ciągi szesnastkowe:

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

Na przykład, oto jak możemy rozłożyć rzeczywisty Object ID zwrócony przez aplikację: 5f2459ac9fa6dc2500314019

  1. 5f2459ac: 1596217772 w systemie dziesiętnym = piątek, 31 lipca 2020 17:49:32
  2. 9fa6dc: Identyfikator maszyny
  3. 2500: ID procesu
  4. 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. ID 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 dane uwierzytelniające (noauth = true) i zalogować się bez danych uwierzytelniających.


Dołącz do HackenProof Discord, aby komunikować się z doświadczonymi hackerami i łowcami bugów!

Hacking Insights
Zaangażuj się w treści, które zagłębiają się w emocje i wyzwania związane z hackingiem

Real-Time Hack News
Bądź na bieżąco z dynamicznym światem hackingu dzięki wiadomościom i spostrzeżeniom w czasie rzeczywistym

Latest Announcements
Bądź na bieżąco z najnowszymi nagrodami za błędy oraz istotnymi aktualizacjami platformy

Dołącz do nas na Discord i zacznij współpracować z najlepszymi hackerami już dziś!

{% hint style="success" %} Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie dla HackTricks
{% endhint %}