diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md index 4377c1d1b..90b705e99 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md @@ -23,7 +23,7 @@ az webapp ssh --name --resource-group ```bash az webapp create-remote-connection --name --resource-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 --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 è `.scm.azurewebsites.net`**. @@ -116,9 +116,9 @@ az webapp deployment list-publishing-credentials --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 ` [!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 "/api/publish?type=zip" --data-binary "@./app.zip" -u ':' -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 "/vfs/data/jobs/continuous/job_name/job_log.txt" \ ---user ':>' -v +--user ':' -v ``` - Leggi il codice sorgente di **Webjobs**: ```bash @@ -203,6 +203,12 @@ curl -X PUT \ --data-binary "@/Users/carlospolop/Downloads/rev.js" \ --user ':' ``` +### 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 --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ +``` ### 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 --resource-group az webapp config appsettings list --name --resource-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 --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ -``` ### 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 --resource-group ` - Utilizzando il permesso **`Microsoft.Web/sites/config/list/action`**: diff --git a/src/pentesting-cloud/azure-security/az-services/az-app-services.md b/src/pentesting-cloud/azure-security/az-services/az-app-services.md index b17ba82a3..5f875e096 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-app-services.md +++ b/src/pentesting-cloud/azure-security/az-services/az-app-services.md @@ -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 --resource-group # Get configured container (if any) in the webapp, it could contain credentials az webapp config container show --name --resource-group +# Get git URL to access the code +az webapp deployment source config-local-git --resource-group -n + # Get Webjobs az webapp webjob continuous list --resource-group --name az webapp webjob triggered list --resource-group --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 --resource-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 -n - - -# Get git URL to access the code -az webapp deployment source config-local-git --resource-group -n - -# Access/Modify the code via git -git clone 'https://:@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.