Az - Azure App Service & Function Apps

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Podstawowe informacje o usłudze App Service

Z dokumentacji: Azure App Service to usługa oparta na protokole HTTP do hostowania aplikacji internetowych, interfejsów API REST i back-endów mobilnych. Możesz tworzyć w swoim ulubionym języku, takim jak .NET, .NET Core, Java, Ruby, Node.js, PHP lub Python. Aplikacje uruchamiają się i skalują łatwo zarówno w środowiskach opartych na systemie Windows, jak i Linux.

Każda aplikacja działa wewnątrz piaskownicy, ale izolacja zależy od planów usługi App Service.

  • Aplikacje w wersjach Free i Shared działają na współdzielonych maszynach wirtualnych.

  • Aplikacje w wersjach Standard i Premium działają na dedykowanych maszynach wirtualnych.

Należy zauważyć, że żadna z tych izolacji nie zapobiega innym powszechnym podatnościom internetowym (takim jak przesyłanie plików lub wstrzykiwanie). Jeśli używane jest tożsamość zarządzania, może ona być w stanie naruszyć swoje uprawnienia.

Wyliczanie

# List webapps
az webapp list

## Less information
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}"

# Get access restrictions
az webapp config access-restriction show --resource-group <res-group> -n <name>

# Remove access restrictions
az webapp config access-restriction remove --resource-group <res-group> -n <name> --rule-name <rule-name>

# Get snapshots
az webapp config snapshot list --resource-group <res-group> -n <name>

# Restore snapshot
az webapp config snapshot restore -g <res-group> -n <name> --time 2018-12-11T23:34:16.8388367

# Restart webapp
az webapp restart --name <name> --resource-group <res-group>
# Get App Services and Function Apps
Get-AzWebApp
# Get only App Services
Get-AzWebApp | ?{$_.Kind -notmatch "functionapp"}

Pobierz wszystkie zasoby Azure App Service w ramach subskrypcji:

az resource list --resource-type Microsoft.Web/sites

Pobierz wszystkie aplikacje internetowe w ramach zasobu Azure App Service:

az webapp list --resource-group <nazwa_grupy_zasobów>

Pobierz wszystkie sloty w ramach aplikacji internetowej:

az webapp deployment slot list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie konfiguracje aplikacji internetowej:

az webapp config list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie klucze uwierzytelniania aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplikacji_internetowej>

Pobierz wszystkie ustawienia konfiguracji aplikacji internetowej:

az webapp config appsettings list --resource-group <nazwa_grupy_zasobów> --name <nazwa_aplik
```bash
#!/bin/bash

# Get all App Service and Function Apps

# Define Azure subscription ID
azure_subscription="your_subscription_id"

# Log in to Azure
az login

# Select Azure subscription
az account set --subscription $azure_subscription

# Get all App Services in the specified subscription
list_app_services=$(az appservice list --query "[].{appServiceName: name, group: resourceGroup}" -o tsv)

# Iterate over each App Service
echo "$list_app_services" | while IFS=$'\t' read -r appServiceName group; do
# Get the type of the App Service
service_type=$(az appservice show --name $appServiceName --resource-group $group --query "kind" -o tsv)

# Check if it is a Function App and print its name
if [ "$service_type" == "functionapp" ]; then
echo "Function App Name: $appServiceName"
fi
done

Uzyskaj poświadczenia i uzyskaj dostęp do kodu aplikacji internetowej

Aby uzyskać dostęp do kodu aplikacji internetowej, musisz najpierw zdobyć poświadczenia. Istnieje kilka sposobów, aby to zrobić:

  1. Przechwyć ruch sieciowy: Możesz użyć narzędzi takich jak Wireshark lub tcpdump, aby przechwycić ruch sieciowy między aplikacją internetową a serwerem. W ten sposób możesz znaleźć poświadczenia, które są przesyłane w żądaniach HTTP lub w nagłówkach.

  2. Przechwyć żądania HTTP: Możesz użyć narzędzi takich jak Burp Suite lub Fiddler, aby przechwycić żądania HTTP wysyłane przez aplikację internetową. W ten sposób możesz znaleźć poświadczenia, które są przesyłane w nagłówkach żądania.

  3. Przeskanuj kod źródłowy: Jeśli masz dostęp do kodu źródłowego aplikacji internetowej, możesz przeskanować go w poszukiwaniu poświadczeń. Szukaj miejsc, w których są używane funkcje do uwierzytelniania, takie jak funkcje logowania, funkcje obsługujące tokeny uwierzytelniające itp.

Po zdobyciu poświadczeń, możesz uzyskać dostęp do kodu aplikacji internetowej. Możesz to zrobić na kilka sposobów:

  1. Przeskanuj pliki konfiguracyjne: Sprawdź pliki konfiguracyjne aplikacji internetowej, takie jak pliki web.config lub appsettings.json, w poszukiwaniu poufnych informacji, takich jak hasła do baz danych, klucze uwierzytelniania itp.

  2. Przeskanuj repozytorium kodu: Jeśli aplikacja internetowa jest hostowana w repozytorium kodu, takim jak GitHub lub Bitbucket, przeszukaj repozytorium w poszukiwaniu poufnych informacji, takich jak hasła do baz danych, klucze uwierzytelniania itp.

  3. Przeskanuj pliki logów: Sprawdź pliki logów aplikacji internetowej w poszukiwaniu poufnych informacji, takich jak hasła do baz danych, klucze uwierzytelniania itp.

Po uzyskaniu dostępu do kodu aplikacji internetowej, możesz przeprowadzić dalszą analizę pod kątem podatności i potencjalnych luk w zabezpieczeniach.

# 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

Dostęp do kontenera Docker z aplikacją internetową za pomocą SSH:

ssh -p <port> <username>@<ip_address>

Podstawowe dane do logowania:

  • <port>: Port SSH, na którym działa kontener Docker.

  • <username>: Nazwa użytkownika do logowania.

  • <ip_address>: Adres IP kontenera Docker.

Upewnij się, że masz uprawnienia do logowania za pomocą SSH do kontenera Docker.

# Get ssh session
az webapp create-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)
ssh root@127.0.0.1 -p 39895

Podstawowe informacje o aplikacjach funkcji

Azure Functions to rozwiązanie bezserwerowe, które pozwala na napisanie mniej kodu, utrzymanie mniejszej infrastruktury i oszczędność kosztów. Zamiast martwić się o wdrażanie i utrzymanie serwerów, infrastruktura chmurowa zapewnia wszystkie aktualne zasoby potrzebne do utrzymania działania Twoich aplikacji.

W portalu Azure, integracja między Azure Functions a Azure API Management jest ułatwiona, umożliwiając eksponowanie punktów końcowych funkcji wyzwalanych przez protokół HTTP jako interfejsy REST API. API eksponowane w ten sposób są opisane za pomocą definicji OpenAPI, zapewniając standardowy, językowo-niezależny interfejs dla API RESTful.

Funkcje aplikacji obsługują zarządzane tożsamości.

Ponadto, aplikacja funkcji może mieć pewne punkty końcowe, które wymagają określonego poziomu uwierzytelnienia, takiego jak "admin" lub "anonymous". Atakujący może próbować uzyskać dostęp do punktów końcowych zezwalających na anonimowy dostęp, aby ominąć ograniczenia i uzyskać dostęp do wrażliwych danych lub funkcjonalności.

Wyliczanie

# Get only Function Apps
Get-AzFunctionApp

Odnośniki

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated