Desde la documentación:Azure App Service es un servicio basado en HTTP para alojar aplicaciones web, APIs REST y backends móviles. Puedes desarrollar en tu lenguaje favorito, ya sea .NET, .NET Core, Java, Ruby, Node.js, PHP o Python. Las aplicaciones se ejecutan y escalan fácilmente en entornos basados en Windows y Linux.
Cada aplicación se ejecuta dentro de un sandbox, pero el aislamiento depende de los planes del Servicio de Aplicaciones
Las aplicaciones en los niveles Free y Shared se ejecutan en VMs compartidas
Las aplicaciones en los niveles Standard y Premium se ejecutan en VMs dedicadas
Ten en cuenta que ninguno de esos aislamientos previene otras vulnerabilidades web comunes (como la carga de archivos o inyecciones). Y si se utiliza una identidad de gestión, podría ser capaz de comprometer sus permisos.
Enumeración
# List webappsazwebapplist## Less informationazwebapplist--query"[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}"# Get access restrictionsazwebappconfigaccess-restrictionshow--resource-group<res-group>-n<name># Remove access restrictionsazwebappconfigaccess-restrictionremove--resource-group<res-group>-n<name>--rule-name<rule-name># Get snapshotsazwebappconfigsnapshotlist--resource-group<res-group>-n<name># Restore snapshotazwebappconfigsnapshotrestore-g<res-group>-n<name>--time2018-12-11T23:34:16.8388367# Restart webappazwebapprestart--name<name>--resource-group<res-group>
# Get App Services and Function AppsGet-AzWebApp# Get only App ServicesGet-AzWebApp|?{$_.Kind-notmatch"functionapp"}
#!/bin/bash# Get all App Service and Function Apps# Define Azure subscription IDazure_subscription="your_subscription_id"# Log in to Azureazlogin# Select Azure subscriptionazaccountset--subscription $azure_subscription# Get all App Services in the specified subscriptionlist_app_services=$(azappservicelist--query"[].{appServiceName: name, group: resourceGroup}"-otsv)# Iterate over each App Serviceecho"$list_app_services"|while IFS=$'\t'read-rappServiceNamegroup; do# Get the type of the App Serviceservice_type=$(azappserviceshow--name $appServiceName --resource-group $group --query"kind"-otsv)# Check if it is a Function App and print its nameif [ "$service_type"=="functionapp" ]; thenecho"Function App Name: $appServiceName"fidone
Obtener credenciales y acceder al código de la aplicación web
# Get connection strings that could contain credentials (with DBs for example)azwebappconfigconnection-stringlist--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.azwebappdeploymentlist-publishing-profiles--resource-group<res-group>-n<name># Get git URL to access the codeazwebappdeploymentsourceconfig-local-git--resource-group<res-group>-n<name># Access/Modify the code via gitgitclone'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
Acceso al contenedor Docker con la aplicación web a través de ssh:
# Get ssh sessionazwebappcreate-remote-connection--subscription<SUBSCRIPTION-ID>--resource-group<RG-NAME>-n<APP-SERVICE-NAME>## If successfull 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#SSH is available { username: root, password: Docker! }## So from that machine ssh into that port (you might need generate a new ssh session to the jump host)sshroot@127.0.0.1-p39895
Información Básica de las Apps de Funciones
Azure Functions es una solución serverless que te permite escribir menos código, mantener menos infraestructura y ahorrar costos. En lugar de preocuparte por implementar y mantener servidores, la infraestructura en la nube proporciona todos los recursos actualizados necesarios para mantener tus aplicaciones en funcionamiento.
En el portal de Azure, la integración entre Azure Functions y Azure API Management se facilita, lo que permite exponer los puntos finales de las funciones de activación HTTP como APIs REST. Las APIs expuestas de esta manera se describen utilizando una definición OpenAPI, proporcionando una interfaz estándar y sin dependencia de lenguaje para APIs RESTful.
Las Function Apps admiten Identidades Administradas.
Además, una Function App podría tener ciertos puntos finales que requieren un cierto nivel de autenticación, como "admin" o "anónimo".
Un atacante podría intentar acceder a los puntos finales permitidos para anónimos para evadir las restricciones y obtener acceso a datos o funcionalidades sensibles.