Z dokumentacji:Azure App Service to usługa oparta na HTTP do hostowania aplikacji webowych, REST API i mobilnych backendów. Możesz rozwijać w swoim ulubionym języku, czy to .NET, .NET Core, Java, Ruby, Node.js, PHP, czy Python. Aplikacje działają i skalują się z łatwością zarówno w środowiskach opartych na Windows, jak i Linux.
Każda aplikacja działa w piaskownicy, ale izolacja zależy od planów App Service
Aplikacje w darmowych i współdzielonych warstwach działają na współdzielonych VM
Aplikacje w standardowych i premium warstwach działają na dedykowanych VM
Zauważ, że żadna z tych izolacji nie zapobiega innym powszechnym wrażliwościom webowym (takim jak przesyłanie plików czy wstrzyknięcia). A jeśli używana jest tożsamość zarządzania, może być w stanie skompromentować swoje uprawnienia.
Enumeracja
# 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
Uzyskaj dane uwierzytelniające i uzyskaj dostęp do kodu aplikacji webowej
# 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
Dostęp do kontenera Docker z aplikacją webową za pomocą 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
Informacje podstawowe o aplikacjach funkcji
Azure Functions to rozwiązanie serverless, które pozwala na pisanie mniejszej ilości kodu, utrzymywanie mniejszej infrastruktury i oszczędzanie kosztów. Zamiast martwić się o wdrażanie i utrzymanie serwerów, infrastruktura chmurowa zapewnia wszystkie aktualne zasoby potrzebne do utrzymania aplikacji w działaniu.
W portalu Azure integracja między Azure Functions a Azure API Management jest ułatwiona, co pozwala na ujawnienie punktów końcowych funkcji wyzwalanych przez HTTP jako REST API. API ujawnione w ten sposób są opisane za pomocą definicji OpenAPI, co zapewnia standardowy, niezależny od języka interfejs do API RESTful.
Aplikacje funkcji obsługują zarządzane tożsamości.
Ponadto aplikacja funkcji może mieć określone punkty końcowe, które wymagają określonego poziomu uwierzytelnienia, takiego jak "admin" lub "anonimowy".
Atakujący może spróbować uzyskać dostęp do dozwolonych punktów końcowych anonimowych, aby obejść ograniczenia i uzyskać dostęp do wrażliwych danych lub funkcjonalności.