Selon la documentation :Azure App Service est un service basé sur HTTP pour héberger des applications web, des API REST et des back-ends mobiles. Vous pouvez développer dans votre langage préféré, que ce soit .NET, .NET Core, Java, Ruby, Node.js, PHP ou Python. Les applications s'exécutent et se mettent à l'échelle facilement sur des environnements basés sur Windows et Linux.
Chaque application s'exécute dans un bac à sable, mais l'isolation dépend des plans App Service
Les applications dans les niveaux Gratuit et Partagé s'exécutent sur des VM partagées
Les applications dans les niveaux Standard et Premium s'exécutent sur des VM dédiées
Notez que aucune de ces isolations ne prévient d'autres vulnérabilités web courantes (telles que le téléchargement de fichiers ou les injections). Et si une identité de gestion est utilisée, elle pourrait être capable de compromettre ses permissions.
Énumération
# 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
Obtenir des identifiants et accéder au code de l'application 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
Accès au conteneur Docker avec l'application web via 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
Informations de base sur les applications de fonction
Azure Functions est une solution sans serveur qui vous permet d'écrire moins de code, de maintenir moins d'infrastructure et de réaliser des économies. Au lieu de vous soucier du déploiement et de la maintenance des serveurs, l'infrastructure cloud fournit toutes les ressources à jour nécessaires pour faire fonctionner vos applications.
Dans le portail Azure, l'intégration entre Azure Functions et Azure API Management est facilitée, permettant aux points de terminaison de fonction déclenchés par HTTP d'être exposés en tant qu'API REST. Les API exposées de cette manière sont décrites à l'aide d'une définition OpenAPI, fournissant une interface standard et indépendante du langage pour les API RESTful.
Les applications de fonction prennent en charge les identités gérées.
De plus, l'application de fonction peut avoir certains points de terminaison qui nécessitent un certain niveau d'authentification, tel que "admin" ou "anonyme".
Un attaquant pourrait essayer d'accéder aux points de terminaison autorisés anonymes pour contourner les restrictions et accéder à des données ou des fonctionnalités sensibles.