Az - CosmosDB
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Azure CosmosDB
Azure Cosmos DB είναι μια πλήρως διαχειριζόμενη NoSQL, σχεσιακή και διανυσματική βάση δεδομένων που προσφέρει χρόνους απόκρισης σε χιλιοστά του δευτερολέπτου, αυτόματη κλιμάκωση και διαθεσιμότητα υποστηριζόμενη από SLA με ασφάλεια επιπέδου επιχείρησης. Διευκολύνει την ταχύτερη ανάπτυξη εφαρμογών μέσω έτοιμης διανομής δεδομένων πολλαπλών περιοχών, ανοιχτών APIs, SDKs για δημοφιλείς γλώσσες και δυνατότητες βάσης δεδομένων AI όπως η ενσωματωμένη υποστήριξη διανυσμάτων και η απρόσκοπτη ενσωμάτωσή της με Azure AI.
Η Azure Cosmos DB παρέχει πολλαπλά APIs βάσεων δεδομένων για να μοντελοποιήσει τα δεδομένα του πραγματικού κόσμου χρησιμοποιώντας μοντέλα δεδομένων εγγράφων, σχεσιακά, κλειδί-τιμή, γραφήματα και οικογένειες στηλών, με αυτά τα APIs να είναι NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin και Table.
Ένας βασικός τομέας του CosmosDB είναι ο Azure Cosmos Account. Azure Cosmos Account, λειτουργεί ως σημείο εισόδου στις βάσεις δεδομένων. Ο λογαριασμός καθορίζει βασικές ρυθμίσεις όπως η παγκόσμια διανομή, τα επίπεδα συνέπειας και το συγκεκριμένο API που θα χρησιμοποιηθεί, όπως το NoSQL. Μέσω του λογαριασμού, μπορείτε να ρυθμίσετε την παγκόσμια αναπαραγωγή για να διασφαλίσετε ότι τα δεδομένα είναι διαθέσιμα σε πολλές περιοχές για γρήγορη πρόσβαση. Επιπλέον, μπορείτε να επιλέξετε ένα επίπεδο συνέπειας που ισορροπεί μεταξύ απόδοσης και ακρίβειας δεδομένων, με επιλογές που κυμαίνονται από Strong έως Eventual consistency.
Η Azure Cosmos DB υποστηρίζει ταυτότητες που ανατίθενται από τον χρήστη και ταυτότητες που διαχειρίζονται από το σύστημα που δημιουργούνται αυτόματα και συνδέονται με τον κύκλο ζωής του πόρου. Ωστόσο, το Cosmos DB δεν διαθέτει μηχανισμό ενσωματωμένο για άμεση ερώτηση εξωτερικών πηγών δεδομένων όπως το Azure Blob Storage. Σε αντίθεση με τις δυνατότητες εξωτερικών πινάκων του SQL Server, το Cosmos DB απαιτεί τα δεδομένα να εισάγονται στα κοντέινερ του χρησιμοποιώντας εξωτερικά εργαλεία όπως το Azure Data Factory, το Data Migration Tool ή προσαρμοσμένα σενάρια πριν μπορέσουν να ερωτηθούν με τις εγγενείς δυνατότητες ερωτήσεων του.
NoSQL
Το API NoSQL της Azure Cosmos DB είναι ένα API βασισμένο σε έγγραφα που χρησιμοποιεί το JSON ως μορφή δεδομένων του. Παρέχει μια σύνταξη ερωτήσεων παρόμοια με τη SQL για την ερώτηση αντικειμένων JSON, καθιστώντας το κατάλληλο για εργασία με δομημένα και ημι-δομημένα δεδομένα. Το endpoint της υπηρεσίας είναι:
https://<Account-Name>.documents.azure.com:443/
Βάσεις Δεδομένων
Μέσα σε έναν λογαριασμό, μπορείτε να δημιουργήσετε μία ή περισσότερες βάσεις δεδομένων, οι οποίες λειτουργούν ως λογικές ομάδες κοντέινερ. Μια βάση δεδομένων λειτουργεί ως όριο για τη διαχείριση πόρων και τα δικαιώματα χρηστών. Οι βάσεις δεδομένων μπορούν είτε να επιτρέπουν σε πολλαπλά κοντέινερ να χρησιμοποιούν μια κοινή δεξαμενή απόδοσης είτε να δίνουν σε κάθε κοντέινερ τη δική του αφιερωμένη ισχύ.
Κοντέινερ
Η βασική μονάδα αποθήκευσης δεδομένων είναι το κοντέινερ, το οποίο περιέχει έγγραφα JSON και είναι αυτόματα ευρετηριασμένο για αποδοτική αναζήτηση. Τα κοντέινερ είναι ελαστικά κλιμακούμενα και κατανεμημένα σε κατατμήσεις, οι οποίες καθορίζονται από ένα κλειδί κατατμήσεων που ορίζει ο χρήστης. Το κλειδί κατατμήσεων είναι κρίσιμο για την εξασφάλιση βέλτιστης απόδοσης και ομοιόμορφης κατανομής δεδομένων. Για παράδειγμα, ένα κοντέινερ μπορεί να αποθηκεύει δεδομένα πελατών, με το “customerId” ως το κλειδί κατατμήσεων.
Κύρια Χαρακτηριστικά
- Παγκόσμια Κατανομή: Ενεργοποιήστε ή απενεργοποιήστε τη Γεω-Αντίγραφα για διασυνοριακή αναπαραγωγή και Πολυ-περιοχικές Εγγραφές για βελτιωμένη διαθεσιμότητα.
- Δικτύωση & Ασφάλεια: μεταξύ δημόσιων (όλων/επιλεγμένων δικτύων) ή ιδιωτικών σημείων για συνδεσιμότητα. Ασφαλείς συνδέσεις με κρυπτογράφηση TLS 1.2. Υποστηρίζει CORS (Cross-Origin Resource Sharing) για ελεγχόμενη πρόσβαση σε πόρους. Μπορεί να ενεργοποιηθεί ο Microsoft Defender for Cloud. Για να κάνετε τη σύνδεση μπορείτε να χρησιμοποιήσετε κλειδιά.
- Αντίγραφα & Ανάκτηση: από περιοδικές, συνεχείς (7 ημέρες) ή συνεχείς (30 ημέρες) πολιτικές αντιγράφων με ρυθμιζόμενα διαστήματα και διατήρηση.
- Κρυπτογράφηση Δεδομένων: Προεπιλεγμένα κλειδιά διαχείρισης υπηρεσίας ή κλειδιά διαχείρισης πελατών (CMK) για κρυπτογράφηση (η επιλογή CMK είναι μη αναστρέψιμη).
Αριθμητική
# CosmoDB Account
## List Azure Cosmos DB database accounts.
az cosmosdb list --resource-group <ResourceGroupName>
az cosmosdb show --resource-group <ResourceGroupName> --name <AccountName>
## Lists the virtual network accounts associated with a Cosmos DB account
az cosmosdb network-rule list --resource-group <ResourceGroupName> --name <AccountName>
## List the access keys or connection strings for a Azure Cosmos DB
az cosmosdb keys list --name <AccountName> --resource-group <ResourceGroupName>
## List all the database accounts that can be restored.
az cosmosdb restorable-database-account list --account-name <AccountName>
## Show the identities for a Azure Cosmos DB database account.
az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountName>
# CosmoDB (NoSQL)
## List the NoSQL databases under an Azure Cosmos DB account.
az cosmosdb sql database list --resource-group <ResourceGroupName> --account-name <AccountName>
## List the NoSQL containers under an Azure Cosmos DB NoSQL database.
az cosmosdb sql container list --account-name <AccountName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List all NoSQL role assignments under an Azure Cosmos DB
az cosmosdb sql role assignment list --resource-group <ResourceGroupName> --account-name <AccountName>
## List all NoSQL role definitions under an Azure Cosmos DB
az cosmosdb sql role definition list --resource-group <ResourceGroupName> --account-name <AccountName>
## List the NoSQL stored procedures under an Azure Cosmos DB
az cosmosdb sql stored-procedure list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List the NoSQL triggers under an Azure Cosmos DB NoSQL container.
az cosmosdb sql trigger list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## List the NoSQL user defined functions under an Azure Cosmos DB NoSQL container
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
## MongoDB (vCore)
# Install az cli extension
az extension add --name cosmosdb-preview
# List all MongoDB databases in a specified Azure Cosmos DB account
az cosmosdb mongocluster list
az cosmosdb mongocluster show --cluster-name <name> --resource-group <ResourceGroupName>
# Get firewall rules
az cosmosdb mongocluster firewall rule list --cluster-name <name> --resource-group <ResourceGroupName>
# Connect to in
brew install mongosh
mongosh "mongodb://<username>:<password>@<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" --username <username> --password <password>
Σύνδεση
Έχει 2 τύπους κλειδιών, Read-write (full) και Read-only. Δίνουν την υποδεικνυόμενη πρόσβαση σε όλες τις βάσεις δεδομένων, συλλογές και δεδομένα μέσα στον λογαριασμό Cosmos DB. Για να συνδεθεί, απαιτείται η βιβλιοθήκη azure-cosmosDB (pip install azure-cosmos). Επιπλέον, το endpoint και το κλειδί είναι κρίσιμα στοιχεία για να γίνει η σύνδεση.
from azure.cosmos import CosmosClient, PartitionKey
# Connection details
endpoint = "<your-account-endpoint>"
key = "<your-account-key>"
# Initialize Cosmos Client
client = CosmosClient(endpoint, key)
# Access existing database and container
database_name = '<SampleDB>'
container_name = '<SampleContainer>'
database = client.get_database_client(database_name)
container = database.get_container_client(container_name)
# Insert multiple documents
items_to_insert = [
{"id": "1", "name": "Sample Item", "description": "This is a sample document."},
{"id": "2", "name": "Another Sample Item", "description": "This is another sample document."},
{"id": "3", "name": "Sample Item", "description": "This is a duplicate name sample document."},
]
for item in items_to_insert:
container.upsert_item(item)
# Query all documents
query = "SELECT * FROM c"
all_items = list(container.query_items(
query=query,
enable_cross_partition_query=True
))
# Print all queried items
print("All items in the container:")
for item in all_items:
print(item)
Ένας άλλος τρόπος για να καθιερώσετε μια σύνδεση είναι να χρησιμοποιήσετε το DefaultAzureCredential(). Απλώς χρειάζεται να συνδεθείτε (az login) με τον λογαριασμό που έχει τις άδειες και να το εκτελέσετε. Για αυτή την περίπτωση, πρέπει να γίνει μια ανάθεση ρόλου, δίνοντας τις απαραίτητες άδειες (δείτε για περισσότερα).
from azure.identity import DefaultAzureCredential
from azure.cosmos import CosmosClient
# Use Azure AD for authentication
credential = DefaultAzureCredential()
endpoint = "<your-account-endpoint>"
client = CosmosClient(endpoint, credential)
# Access database and container
database_name = "<mydatabase>"
container_name = "<mycontainer>"
database = client.get_database_client(database_name)
container = database.get_container_client(container_name)
# Insert a document
item = {
"id": "1",
"name": "Sample Item",
"description": "This is a test item."
}
container.create_item(item)
print("Document inserted.")
MongoDB
Η API NoSQL του MongoDB είναι μια API βασισμένη σε έγγραφα που χρησιμοποιεί το BSON (Binary JSON) σε μορφή δεδομένων. Παρέχει μια γλώσσα ερωτήσεων με δυνατότητες συγκέντρωσης, καθιστώντας την κατάλληλη για εργασία με δομημένα, ημι-δομημένα και αδόμητα δεδομένα. Το endpoint της υπηρεσίας συνήθως ακολουθεί αυτή τη μορφή:
mongodb://<hostname>:<port>/<database>
Βάσεις Δεδομένων
Στο MongoDB, μπορείτε να δημιουργήσετε μία ή περισσότερες βάσεις δεδομένων εντός μιας παρουσίας. Κάθε βάση δεδομένων λειτουργεί ως λογική ομαδοποίηση συλλογών και παρέχει ένα όριο για την οργάνωση και διαχείριση πόρων. Οι βάσεις δεδομένων βοηθούν στη λογική διαχωριστική και διαχείριση δεδομένων, όπως για διαφορετικές εφαρμογές ή έργα.
Συλλογές
Η βασική μονάδα αποθήκευσης δεδομένων στο MongoDB είναι η συλλογή, η οποία περιέχει έγγραφα και έχει σχεδιαστεί για αποδοτική αναζήτηση και ευέλικτο σχεδιασμό σχήματος. Οι συλλογές είναι ελαστικά κλιμακούμενες και μπορούν να υποστηρίξουν λειτουργίες υψηλής απόδοσης σε πολλαπλούς κόμβους σε μια κατανεμημένη ρύθμιση.
Κύρια Χαρακτηριστικά του τύπου Request unit (RU)
Παγκόσμια Κατανομή: Ενεργοποιήστε ή απενεργοποιήστε τη Γεω-Αντίγραφο για διασυνοριακή αναπαραγωγή και Multi-region Writes για βελτιωμένη διαθεσιμότητα.
Δικτύωση & Ασφάλεια: μεταξύ δημόσιων (όλων/επιλεγμένων δικτύων) ή ιδιωτικών σημείων για συνδεσιμότητα. Ασφαλείς συνδέσεις με κρυπτογράφηση TLS 1.2. Υποστηρίζει CORS (Cross-Origin Resource Sharing) για ελεγχόμενη πρόσβαση σε πόρους. Για να κάνετε τη σύνδεση μπορείτε να χρησιμοποιήσετε κλειδιά.
Αντίγραφα & Ανάκτηση: από περιοδικές, συνεχείς (7 ημέρες, δωρεάν) ή συνεχείς (30 ημέρες, πληρωμένες) πολιτικές αντιγράφων με ρυθμιζόμενα διαστήματα και διατήρηση.
Κρυπτογράφηση Δεδομένων: Προεπιλεγμένα κλειδιά διαχείρισης υπηρεσίας ή κλειδιά διαχείρισης πελάτη (CMK) για κρυπτογράφηση (η επιλογή CMK είναι μη αναστρέψιμη).
Κύρια Χαρακτηριστικά του τύπου vCore cluster
Παγκόσμια Κατανομή: Ενεργοποιήστε μια αναγνωστική αναπαραγωγή σε άλλη περιοχή Azure για υψηλή διαθεσιμότητα και υποστήριξη αποτυχίας. Ρυθμίστε το όνομα της αναπαραγωγής, την περιοχή και την αποθήκευση ανά θραύσμα.
Δικτύωση & Ασφάλεια: Υποστηρίζει δημόσια πρόσβαση με ανατεθειμένες δημόσιες IP και ιδιωτική πρόσβαση. Περιορίστε τις συνδέσεις χρησιμοποιώντας κανόνες τείχους προστασίας—κατά προεπιλογή, δεν επιτρέπονται δημόσιες IP.
Κρυπτογραφημένες Συνδέσεις: Επιβάλλει κρυπτογράφηση TLS για ασφαλή μετάδοση δεδομένων.
Αριθμητική
# CosmoDB Account
## List Azure Cosmos DB database accounts.
az cosmosdb list --resource-group <ResourceGroupName>
az cosmosdb show --resource-group <ResourceGroupName> --name <AccountName>
## Lists the virtual network accounts associated with a Cosmos DB account
az cosmosdb network-rule list --resource-group <ResourceGroupName> --name <AccountName>
## List the access keys or connection strings for a Azure Cosmos DB
az cosmosdb keys list --name <AccountName> --resource-group <ResourceGroupName>
## List all the database accounts that can be restored.
az cosmosdb restorable-database-account list --account-name <AccountName>
## Show the identities for a Azure Cosmos DB database account.
az cosmosdb identity show --resource-group <ResourceGroupName> --name <AccountName>
## MongoDB
# List all MongoDB databases in a specified Azure Cosmos DB account
az cosmosdb mongodb database list --account-name <AccountName> --resource-group <ResourceGroupName>
# List all collections in a specific MongoDB database within an Azure Cosmos DB account
az cosmosdb mongodb collection list --account-name <AccountName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
#RBAC FUNCTIONALITIES MUST BE ENABLED TO USE THIS
# List all role definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb role definition list --account-name <AccountName> --resource-group <ResourceGroupName>
# List all user definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
## MongoDB (vCore)
# Install az cli extension
az extension add --name cosmosdb-preview
# List all MongoDB databases in a specified Azure Cosmos DB account
az cosmosdb mongocluster list
az cosmosdb mongocluster show --cluster-name <name> --resource-group <ResourceGroupName>
# Get firewall rules
az cosmosdb mongocluster firewall rule list --cluster-name <name> --resource-group <ResourceGroupName>
# Connect to in
brew install mongosh
mongosh "mongodb://<username>:<password>@<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" --username <username> --password <password>
Σύνδεση
Ο τύπος RU MongoDB στο CosmoDB έχει 2 τύπους κλειδιών, Read-write (πλήρης) και Read-only. Παρέχουν την υποδεικνυόμενη πρόσβαση σε όλες τις βάσεις δεδομένων, συλλογές και δεδομένα μέσα στον λογαριασμό Cosmos DB. Για τον κωδικό πρόσβασης μπορείτε να χρησιμοποιήσετε τα κλειδιά ή με τη μέθοδο που περιγράφεται στην ενότητα privesc.
from pymongo import MongoClient
# Updated connection string with retryWrites=false
connection_string = "mongodb://<account-name>.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false"
# Create the client. The password and username is a custom one if the type is "vCore cluster".
# In case that is a Request unit (RU) the username is the account name and the password is the key of the cosomosDB account.
client = MongoClient(connection_string, username="<username>", password="<password>")
# Access the database
db = client['<database>']
# Access a collection
collection = db['<collection>']
# Insert a single document
document = {
"name": "John Doe",
"email": "johndoe@example.com",
"age": 30,
"address": {
"street": "123 Main St",
"city": "Somewhere",
"state": "CA",
"zip": "90210"
}
}
# Insert document
result = collection.insert_one(document)
print(f"Inserted document with ID: {result.inserted_id}")
Ή χρησιμοποιώντας έναν χρήστη μέσα στο mongo:
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
Αναφορές
- https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api
- https://learn.microsoft.com/en-us/azure/cosmos-db/
- https://learn.microsoft.com/en-us/azure/cosmos-db/introduction
- https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli
Ανύψωση Δικαιωμάτων
Μετά την Εκμετάλλευση
ToDo
- Η υπόλοιπη βάση δεδομένων εδώ, πίνακες, cassandra, gremlin…
- Ρίξτε μια ματιά στην εκμετάλλευση “Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write” && “Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read” και τους ορισμούς ρόλων γιατί εδώ μπορεί να υπάρχει ανύψωση δικαιωμάτων
- Ρίξτε μια ματιά στις αποκαταστάσεις
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

