# Az - CosmosDB {% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} ## Azure CosmosDB **Azure Cosmos DB** est une base de donnĂ©es **NoSQL, relationnelle et vectorielle entiĂšrement gĂ©rĂ©e** offrant des temps de rĂ©ponse en millisecondes Ă  un chiffre, une scalabilitĂ© automatique et une disponibilitĂ© soutenue par un SLA avec une sĂ©curitĂ© de niveau entreprise. Elle permet un dĂ©veloppement d'applications plus rapide grĂące Ă  une distribution de donnĂ©es multi-rĂ©gions clĂ© en main, des API open-source, des SDK pour des langages populaires, et des fonctionnalitĂ©s de base de donnĂ©es AI comme le support vectoriel intĂ©grĂ© et une intĂ©gration transparente avec Azure AI. Azure Cosmos DB fournit plusieurs API de base de donnĂ©es pour modĂ©liser des donnĂ©es du monde rĂ©el en utilisant des documents, des modĂšles de donnĂ©es relationnels, clĂ©-valeur, graphes et familles de colonnes, ces API Ă©tant NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin et Table. Un aspect clĂ© de CosmosDB est le Compte Azure Cosmos. **Le Compte Azure Cosmos** agit comme le point d'entrĂ©e vers les bases de donnĂ©es. Le compte dĂ©termine des paramĂštres clĂ©s tels que la distribution mondiale, les niveaux de cohĂ©rence et l'API spĂ©cifique Ă  utiliser, comme NoSQL. GrĂące au compte, vous pouvez configurer la rĂ©plication mondiale pour garantir que les donnĂ©es sont disponibles dans plusieurs rĂ©gions pour un accĂšs Ă  faible latence. De plus, vous pouvez choisir un niveau de cohĂ©rence qui Ă©quilibre performance et prĂ©cision des donnĂ©es, avec des options allant de la cohĂ©rence forte Ă  la cohĂ©rence Ă©ventuelle. ### NoSQL (sql) L'API NoSQL d'Azure Cosmos DB est une API basĂ©e sur des documents qui utilise JSON comme format de donnĂ©es. Elle fournit une syntaxe de requĂȘte similaire Ă  SQL pour interroger des objets JSON, ce qui la rend adaptĂ©e au travail avec des donnĂ©es structurĂ©es et semi-structurĂ©es. Le point de terminaison du service est : {% code overflow="wrap" %} ```bash https://.documents.azure.com:443/ ``` {% endcode %} #### Bases de donnĂ©es Dans un compte, vous pouvez crĂ©er une ou plusieurs bases de donnĂ©es, qui servent de regroupements logiques de conteneurs. Une base de donnĂ©es agit comme une limite pour la gestion des ressources et les autorisations des utilisateurs. Les bases de donnĂ©es peuvent soit partager le dĂ©bit provisionnĂ© entre leurs conteneurs, soit allouer un dĂ©bit dĂ©diĂ© Ă  des conteneurs individuels. #### Conteneurs L'unitĂ© de base du stockage de donnĂ©es est le conteneur, qui contient des documents JSON et est automatiquement indexĂ© pour des requĂȘtes efficaces. Les conteneurs sont Ă©lastiquement Ă©volutifs et distribuĂ©s sur des partitions, qui sont dĂ©terminĂ©es par une clĂ© de partition dĂ©finie par l'utilisateur. La clĂ© de partition est essentielle pour garantir des performances optimales et une distribution uniforme des donnĂ©es. Par exemple, un conteneur pourrait stocker des donnĂ©es clients, avec "customerId" comme clĂ© de partition. #### ÉnumĂ©ration {% tabs %} {% tab title="az cli" %} {% code overflow="wrap" %} ```bash # CosmoDB Account ## List Azure Cosmos DB database accounts. az cosmosdb list --resource-group az cosmosdb show --resource-group --name ## Lists the virtual network accounts associated with a Cosmos DB account az cosmosdb network-rule list --resource-group --name ## List the access keys or connection strings for a Azure Cosmos DB az cosmosdb keys list --name --resource-group ## List all the database accounts that can be restored. az cosmosdb restorable-database-account list --account-name ## Show the identities for a Azure Cosmos DB database account. az cosmosdb identity show --resource-group --name # CosmoDB (NoSQL) ## List the SQL databases under an Azure Cosmos DB account. az cosmosdb sql database list --resource-group --account-name ## List the SQL containers under an Azure Cosmos DB SQL database. az cosmosdb sql container list --account-name --database-name --resource-group ## List all SQL role assignments under an Azure Cosmos DB az cosmosdb sql role assignment list --resource-group --account-name ## List all SQL role definitions under an Azure Cosmos DB az cosmosdb sql role definition list --resource-group --account-name ## List the SQL stored procedures under an Azure Cosmos DB az cosmosdb sql stored-procedure list --account-name --container-name --database-name --resource-group ## List the SQL triggers under an Azure Cosmos DB SQL container. az cosmosdb sql trigger list --account-name --container-name --database-name --resource-group ## List the SQL user defined functions under an Azure Cosmos DB SQL container az cosmosdb sql user-defined-function list --account-name --container-name --database-name --resource-group ``` {% endcode %} {% endtab %} {% tab title="Az PowerShell" %} {% code overflow="wrap" %} ```powershell Get-Command -Module Az.CosmosD # List all Cosmos DB accounts in a specified resource group. Get-AzCosmosDBAccount -ResourceGroupName "" # Get the access keys for a specific Cosmos DB account. Get-AzCosmosDBAccountKey -ResourceGroupName "" -Name "" # Retrieve the client encryption keys for a specific Cosmos DB account. Get-AzCosmosDbClientEncryptionKey -ResourceGroupName "" -AccountName "" -DatabaseName "" # List all SQL containers in a specific Cosmos DB SQL database. Get-AzCosmosDBSqlContainer -ResourceGroupName "" -AccountName "" -DatabaseName "" # Get backup information for a specific Cosmos DB SQL container. Get-AzCosmosDBSqlContainerBackupInformation -ResourceGroupName "" -AccountName "" -DatabaseName "" -Name "" -Location "" # Get the throughput (RU/s) settings for a specific Cosmos DB SQL container. Get-AzCosmosDBSqlContainerThroughput -ResourceGroupName "" -AccountName "" -DatabaseName "" -Name "" # List all SQL databases under a specific Cosmos DB account. Get-AzCosmosDBSqlDatabase -ResourceGroupName "" -AccountName "" # Get the throughput (RU/s) settings for a specific Cosmos DB SQL database. Get-AzCosmosDBSqlDatabaseThroughput -ResourceGroupName "" -AccountName "" -Name "" # List all SQL role assignments for a specific Cosmos DB account. Get-AzCosmosDBSqlRoleAssignment -ResourceGroupName "" -AccountName "" # List all SQL role definitions for a specific Cosmos DB account. Get-AzCosmosDBSqlRoleDefinition -ResourceGroupName "" -AccountName "" # List all stored procedures in a specific Cosmos DB SQL container. Get-AzCosmosDBSqlStoredProcedure -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" # List all triggers in a specific Cosmos DB SQL container. Get-AzCosmosDBSqlTrigger -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" # List all user-defined functions (UDFs) in a specific Cosmos DB SQL container. Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "" -AccountName "" -DatabaseName "" -ContainerName "" ``` {% endcode %} {% endtab %} {% endtabs %} #### Connexion Pour se connecter, la bibliothĂšque azure-cosmosDB (pip install azure-cosmos) est nĂ©cessaire. De plus, le point de terminaison et la clĂ© sont des composants cruciaux pour Ă©tablir la connexion. {% code overflow="wrap" %} ```python from azure.cosmos import CosmosClient, PartitionKey # Connection details endpoint = "" key = "" # Initialize Cosmos Client client = CosmosClient(endpoint, key) # Access existing database and container database_name = '' container_name = '' 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) ``` {% endcode %} Une autre façon d'Ă©tablir une connexion est d'utiliser le **DefaultAzureCredential()**. Il suffit de se connecter (az login) avec le compte qui a les permissions et de l'exĂ©cuter. Dans ce cas, une attribution de rĂŽle doit ĂȘtre effectuĂ©e, en donnant les permissions nĂ©cessaires (voir pour plus) {% code overflow="wrap" %} ```python from azure.identity import DefaultAzureCredential from azure.cosmos import CosmosClient # Use Azure AD for authentication credential = DefaultAzureCredential() endpoint = "" client = CosmosClient(endpoint, credential) # Access database and container database_name = "" container_name = "" 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.") ``` {% endcode %} ### MongoDB L'API NoSQL MongoDB est une API basĂ©e sur des documents qui utilise BSON (Binary JSON) semblable Ă  JSON comme format de donnĂ©es. Elle fournit un langage de requĂȘte avec des capacitĂ©s d'agrĂ©gation, ce qui la rend adaptĂ©e au travail avec des donnĂ©es structurĂ©es, semi-structurĂ©es et non structurĂ©es. L'endpoint du service suit gĂ©nĂ©ralement ce format : {% code overflow="wrap" %} ```bash mongodb://:/ ``` {% endcode %} #### Bases de donnĂ©es Dans MongoDB, vous pouvez crĂ©er une ou plusieurs bases de donnĂ©es au sein d'une instance. Chaque base de donnĂ©es sert de regroupement logique de collections et fournit une limite pour l'organisation et la gestion des ressources. Les bases de donnĂ©es aident Ă  sĂ©parer et Ă  gĂ©rer les donnĂ©es de maniĂšre logique, par exemple pour diffĂ©rentes applications ou projets. #### Collections L'unitĂ© de base du stockage de donnĂ©es dans MongoDB est la collection, qui contient des documents et est conçue pour des requĂȘtes efficaces et un design de schĂ©ma flexible. Les collections sont Ă©lastiquement Ă©volutives et peuvent prendre en charge des opĂ©rations Ă  haut dĂ©bit sur plusieurs nƓuds dans une configuration distribuĂ©e. #### ÉnumĂ©ration {% tabs %} {% tab title="az cli" %} {% code overflow="wrap" %} ```bash # CosmoDB Account ## List Azure Cosmos DB database accounts. az cosmosdb list --resource-group az cosmosdb show --resource-group --name ## Lists the virtual network accounts associated with a Cosmos DB account az cosmosdb network-rule list --resource-group --name ## List the access keys or connection strings for a Azure Cosmos DB az cosmosdb keys list --name --resource-group ## List all the database accounts that can be restored. az cosmosdb restorable-database-account list --account-name ## Show the identities for a Azure Cosmos DB database account. az cosmosdb identity show --resource-group --name ``` {% endcode %} {% endtab %} {% tab title="Az PowerShell" %} {% code overflow="wrap" %} ```powershell Get-Command -Module Az.CosmosDB # List all Cosmos DB accounts in a specified resource group. Get-AzCosmosDBAccount -ResourceGroupName "" # Get the access keys for a specific Cosmos DB account. Get-AzCosmosDBAccountKey -ResourceGroupName "" -Name "" # Retrieve the client encryption keys for a specific Cosmos DB account. Get-AzCosmosDbClientEncryptionKey -ResourceGroupName "" -AccountName "" -DatabaseName "" # List all MongoDB collections in a specific database. Get-AzCosmosDBMongoDBCollection -AccountName -ResourceGroupName -DatabaseName # Retrieve backup information for a specific MongoDB collection in a database. Get-AzCosmosDBMongoDBCollectionBackupInformation -AccountName -ResourceGroupName -DatabaseName -Name -Location # Get the throughput (RU/s) of a specific MongoDB collection in a database. Get-AzCosmosDBMongoDBCollectionThroughput -AccountName -ResourceGroupName -DatabaseName -Name # List all MongoDB databases in a specified Cosmos DB account. Get-AzCosmosDBMongoDBDatabase -AccountName -ResourceGroupName # Get the throughput (RU/s) of a specific MongoDB database. Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName -ResourceGroupName -DatabaseName # Retrieve the role definitions for MongoDB users in a specified Cosmos DB account. Get-AzCosmosDBMongoDBRoleDefinition -AccountName -ResourceGroupName ``` {% endcode %} {% endtab %} {% endtabs %} #### Connexion Ici, le mot de passe que vous pouvez trouver avec les clĂ©s ou avec la mĂ©thode dĂ©crite dans la section privesc. {% code overflow="wrap" %} ```python from pymongo import MongoClient # Updated connection string with retryWrites=false connection_string = "mongodb://.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retryWrites=false" # Create the client client = MongoClient(connection_string, username="", password="") # Access the database db = client[''] # Access a collection collection = db[''] # 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}") ``` {% endcode %} ## RĂ©fĂ©rences * [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](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/) * [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](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](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) ## Escalade de privilĂšges {% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %} [az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md) {% endcontent-ref %} ## Post Exploitation {% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %} [az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md) {% endcontent-ref %} ## À faire * Le reste de la DB ici, tables, cassandra, gremlin... * Jetez un Ɠil Ă  la post exploitation "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" et aux dĂ©finitions de rĂŽle car ici il pourrait y avoir une escalade de privilĂšges * Jetez un Ɠil aux restaurations {% hint style="success" %} Apprenez et pratiquez le hacking AWS :[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Apprenez et pratiquez le hacking GCP : [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Soutenir HackTricks * VĂ©rifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) ! * **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐩 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.** * **Partagez des astuces de hacking en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dĂ©pĂŽts github.
{% endhint %}