Teilen Sie Hacking-Tricks, indem Sie PRs an dieHackTricks und HackTricks Cloud Github-Repositories einreichen.
Grundlegende Informationen zum App Service
Aus den Dokumenten:Azure App Service ist ein auf HTTP basierender Dienst zum Hosten von Webanwendungen, REST-APIs und mobilen Back-Ends. Sie können in Ihrer bevorzugten Sprache entwickeln, sei es .NET, .NET Core, Java, Ruby, Node.js, PHP oder Python. Anwendungen laufen und skalieren problemlos in Windows- und Linux-Umgebungen.
Jede App läuft in einer Sandbox, aber die Isolierung hängt von den App Service-Plänen ab
Apps in den Free- und Shared-Tarifen laufen auf gemeinsam genutzten VMs
Apps in den Standard- und Premium-Tarifen laufen auf dedizierten VMs
Beachten Sie, dass keine dieser Isolierungen andere häufige Web-Schwachstellen (wie Datei-Upload oder Injektionen) verhindert. Und wenn eine Verwaltungsidentität verwendet wird, könnte sie in der Lage sein, ihre Berechtigungen zu kompromittieren.
Enumeration
# 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
Zugriff auf Anmeldedaten erhalten & Zugriff auf den Web-App-Code erhalten
# 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
Zugriff auf den Docker-Container mit der Webanwendung über 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
Funktion Apps Grundinformationen
Azure Functions ist eine serverlose Lösung, die es Ihnen ermöglicht, weniger Code zu schreiben, weniger Infrastruktur zu pflegen und Kosten zu sparen. Anstatt sich um das Bereitstellen und Pflegen von Servern zu kümmern, stellt die Cloud-Infrastruktur alle aktuellen Ressourcen bereit, die benötigt werden, um Ihre Anwendungen am Laufen zu halten.
Im Azure-Portal wird die Integration zwischen Azure Functions und Azure API Management erleichtert, wodurch HTTP-Trigger-Funktionsendpunkte als REST-APIs freigegeben werden können. Die auf diese Weise freigegebenen APIs werden mithilfe einer OpenAPI-Definition beschrieben, die eine standardisierte, sprachunabhängige Schnittstelle für RESTful APIs bereitstellt.
Darüber hinaus kann eine Funktions-App bestimmte Endpunkte haben, die eine bestimmte Authentifizierungsstufe erfordern, wie z.B. "admin" oder "anonymous".
Ein Angreifer könnte versuchen, auf die anonym erlaubten Endpunkte zuzugreifen, um die Beschränkungen zu umgehen und Zugriff auf sensible Daten oder Funktionen zu erlangen.