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 1ac3a96d4..7fbc1c26d 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 @@ -43,7 +43,7 @@ ssh root@127.0.0.1 -p 39895 Para obtener las credenciales SCM, puedes usar los siguientes **comandos y permisos**: -- El permiso **`Microsoft.Web/sites/publishxml/action`** permite llamar: +- El permiso **`Microsoft.Web/sites/publishxml/action`** permite llamar a: ```bash az webapp deployment list-publishing-profiles --name --resource-group # Example output @@ -129,9 +129,9 @@ Luego, puedes usar estas credenciales para **acceder a las plataformas SCM y FTP Recuerda que para acceder a la plataforma SCM desde la **web necesitas acceder a `/BasicAuth`**. > [!WARNING] -> Ten en cuenta que cada usuario puede configurar sus propias credenciales llamando al comando anterior, pero si el usuario no tiene suficientes permisos para acceder al SCM o FTP, las credenciales no funcionarán. +> Ten en cuenta que cada usuario puede configurar sus propias credenciales llamando al comando anterior, pero si el usuario no tiene suficientes permisos para acceder a SCM o FTP, las credenciales no funcionarán. -- Si ves que esas credenciales están **REDACTED**, es porque **necesitas habilitar la opción de autenticación básica de SCM** y para eso necesitas el segundo permiso (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +- Si ves que esas credenciales están **REDACTED**, es porque **necesitas habilitar la opción de autenticación básica de SCM** y para eso necesitas el segundo permiso (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`): ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -149,21 +149,21 @@ az rest --method PUT \ "properties": { "allow": true } -} +}' ``` ### Publicar código usando credenciales de SCM -Solo con tener credenciales de SCM válidas es posible **publicar código** en el servicio de App. Esto se puede hacer utilizando el siguiente comando. +Solo con tener credenciales de SCM válidas es posible **publicar código** en el servicio de App. Esto se puede hacer usando el siguiente comando. Para este ejemplo en python, puedes descargar el repositorio de https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, hacer cualquier **cambio** que desees y luego **comprimirlo ejecutando: `zip -r app.zip .`**. -Luego puedes **publicar el código** con el siguiente comando: +Luego puedes **publicar el código** en una aplicación web con el siguiente 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 | Credenciales de SCM +### Webjobs: Microsoft.Web/sites/publish/Action | Credenciales de SCM -El permiso de Azure mencionado permite realizar varias acciones interesantes que también se pueden realizar con las credenciales de SCM: +El permiso de Azure mencionado permite realizar varias acciones interesantes que también se pueden llevar a cabo con las credenciales de SCM: - Leer los registros de **Webjobs**: ```bash @@ -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 ``` - Leer el código fuente de **Webjobs**: ```bash @@ -203,19 +203,19 @@ curl -X PUT \ --data-binary "@/Users/carlospolop/Downloads/rev.js" \ --user ':' ``` -### Microsoft.Web/sites/config/list/action - -Este permiso permite listar las **connection strings** y los **appsettings** del servicio de aplicaciones, que pueden contener información sensible como credenciales de base de datos. -```bash -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 Estos permisos permiten **asignar una identidad administrada** al servicio de App, por lo que si un servicio de App fue comprometido anteriormente, esto permitirá al atacante asignar nuevas identidades administradas al servicio de App y **escalar privilegios** a ellas. ```bash az webapp identity assign --name --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ ``` +### Microsoft.Web/sites/config/list/action + +Este permiso permite listar las **connection strings** y los **appsettings** del servicio de App, que pueden contener información sensible como credenciales de base de datos. +```bash +az webapp config connection-string list --name --resource-group +az webapp config appsettings list --name --resource-group +``` ### Leer Credenciales de Terceros Configuradas Ejecutando el siguiente comando es posible **leer las credenciales de terceros** configuradas en la cuenta actual. Ten en cuenta que si, por ejemplo, algunas credenciales de Github están configuradas en un usuario diferente, no podrás acceder al token desde otro. @@ -250,7 +250,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children ``` ### Actualizar el código de la aplicación desde la fuente -- Si la fuente configurada es un proveedor de terceros como Github, BitBucket o un repositorio de Azure, puedes **actualizar el código** del servicio de la aplicación comprometiendo el código fuente en el repositorio. +- Si la fuente configurada es un proveedor de terceros como Github, BitBucket o un Repositorio de Azure, puedes **actualizar el código** del servicio de la aplicación comprometiendo el código fuente en el repositorio. - Si la aplicación está configurada utilizando un **repositorio git remoto** (con nombre de usuario y contraseña), es posible obtener la **URL y las credenciales de autenticación básica** para clonar y enviar cambios con: - Usando el permiso **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name --resource-group ` - Usando el permiso **`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 2fe858776..fcec603ed 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 @@ -44,7 +44,7 @@ Kudu es la plataforma que **gestiona tanto el SCM como una interfaz web y API** Tenga en cuenta que las versiones de Kudu utilizadas por App Services y por Function Apps son diferentes, siendo la versión de las Function Apps mucho más limitada. Algunos puntos finales interesantes que puede encontrar en Kudu son: -- `/BasicAuth`: Necesita acceder a esta ruta para **iniciar sesión en Kudu**. +- `/BasicAuth`: Necesita acceder a esta ruta para **iniciar sesión dentro de Kudu**. - `/DebugConsole`: Una consola que permite ejecutar comandos en el entorno donde se está ejecutando Kudu. - Tenga en cuenta que este entorno **no tiene acceso** al servicio de metadatos para obtener tokens. - `/webssh/host`: Un cliente SSH basado en web que permite conectarse dentro del contenedor donde se está ejecutando la aplicación. @@ -56,13 +56,13 @@ Además, Kudu solía ser de código abierto en [https://github.com/projectkudu/k ## Fuentes -Los App Services permiten subir el código como un archivo zip por defecto, pero también permiten conectarse a un servicio de terceros y obtener el código desde allí. +Los App Services permiten cargar el código como un archivo zip por defecto, pero también permiten conectarse a un servicio de terceros y obtener el código desde allí. - Las fuentes de terceros actualmente soportadas son **Github** y **Bitbucket**. - Puede obtener los tokens de autenticación ejecutando `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"` - Azure por defecto configurará una **Github Action** para implementar el código en el App Service cada vez que se actualice el código. - También es posible indicar un **repositorio git remoto** (con nombre de usuario y contraseña) para obtener el código desde allí. -- Puede obtener las credenciales del repositorio remoto ejecutando `az webapp deployment source show --name --resource-group ` o `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` +- Puede obtener las credenciales para el repositorio remoto ejecutando `az webapp deployment source show --name --resource-group ` o `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` - También es posible usar un **Azure Repository**. - También es posible configurar un **repositorio git local**. - Puede obtener la URL del repositorio git con `az webapp deployment source show --name --resource-group ` y será la URL SCM de la aplicación. @@ -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,29 +220,12 @@ done {{#endtab }} {{#endtabs }} -#### Obtener credenciales y acceder al código de la aplicación 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}} -## Ejemplos para generar aplicaciones web +## Ejemplos para generar Aplicaciones Web ### Python desde local