From 603441f554d5a79c7ff0402f22965bb5d57f4a07 Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 4 Jan 2025 03:47:47 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation --- .../az-app-services-privesc.md | 40 +++++++++---------- .../az-services/az-app-services.md | 40 ++++++------------- 2 files changed, 33 insertions(+), 47 deletions(-) diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md index f8a837f25..3bf503b5e 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md @@ -12,9 +12,9 @@ Aby uzyskać więcej informacji na temat usług Azure App, sprawdź: ### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read -Te uprawnienia pozwalają na uzyskanie **SSH shell** wewnątrz aplikacji webowej. Pozwalają również na **debugowanie** aplikacji. +Te uprawnienia pozwalają uzyskać **SSH shell** wewnątrz aplikacji webowej. Pozwalają również na **debugowanie** aplikacji. -- **SSH w pojedynczej komendzie**: +- **SSH w jednej komendzie**: ```bash # Direct option az webapp ssh --name --resource-group @@ -23,7 +23,7 @@ az webapp ssh --name --resource-group ```bash az webapp create-remote-connection --name --resource-group -## If successfull you will get a message such as: +## If successful 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 @@ -32,7 +32,7 @@ az webapp create-remote-connection --name --resource-group ## 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 ``` -- **Debugowanie aplikacji**: +- **Debuguj aplikację**: 1. Zainstaluj rozszerzenie Azure w VScode. 2. Zaloguj się w rozszerzeniu za pomocą konta Azure. 3. Wypisz wszystkie usługi aplikacji w subskrypcji. @@ -129,9 +129,9 @@ Następnie możesz użyć tych danych uwierzytelniających do **uzyskania dostę Pamiętaj, że aby uzyskać dostęp do platformy SCM z **sieci, musisz uzyskać dostęp do `/BasicAuth`**. > [!WARNING] -> Zauważ, że każdy użytkownik może skonfigurować swoje własne dane uwierzytelniające, wywołując poprzednie polecenie, ale jeśli użytkownik nie ma wystarczających uprawnień do uzyskania dostępu do SCM lub FTP, dane uwierzytelniające nie będą działać. +> Zauważ, że każdy użytkownik może skonfigurować własne dane uwierzytelniające, wywołując poprzednie polecenie, ale jeśli użytkownik nie ma wystarczających uprawnień do uzyskania dostępu do SCM lub FTP, dane uwierzytelniające nie będą działać. -- Jeśli widzisz, że te dane uwierzytelniające są **REDACTED**, to dlatego, że **musisz włączyć opcję podstawowej autoryzacji SCM**, a do tego potrzebujesz drugiego uprawnienia (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +- Jeśli widzisz, że te dane uwierzytelniające są **REDACTED**, to dlatego, że **musisz włączyć opcję podstawowej autoryzacji SCM**, a do tego potrzebujesz drugiego uprawnienia (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`): ```bash # Enable basic authentication for SCM az rest --method PUT \ @@ -149,19 +149,19 @@ az rest --method PUT \ "properties": { "allow": true } -} +}' ``` ### Publikowanie kodu za pomocą poświadczeń SCM -Mając ważne poświadczenia SCM, możliwe jest **publikowanie kodu** do usługi App. Można to zrobić za pomocą następującego polecenia. +Mając ważne poświadczenia SCM, możliwe jest **publikowanie kodu** w usłudze App. Można to zrobić za pomocą następującego polecenia. W tym przykładzie Pythona możesz pobrać repozytorium z https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, wprowadzić dowolne **zmiany**, a następnie **spakować je, uruchamiając: `zip -r app.zip .`**. -Następnie możesz **opublikować kod** za pomocą następującego polecenia: +Następnie możesz **opublikować kod** w aplikacji internetowej za pomocą następującego polecenia: ```bash curl -X POST "/api/publish?type=zip" --data-binary "@./app.zip" -u ':' -H "Content-Type: application/octet-stream" ``` -### Microsoft.Web/sites/publish/Action | SCM credentials +### Webjobs: Microsoft.Web/sites/publish/Action | SCM credentials Wspomniane uprawnienie Azure pozwala na wykonanie kilku interesujących działań, które można również wykonać za pomocą poświadczeń SCM: @@ -173,7 +173,7 @@ az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.az # Using SCM username and password: curl "/vfs/data/jobs/continuous/job_name/job_log.txt" \ ---user ':>' -v +--user ':' -v ``` - Przeczytaj kod źródłowy **Webjobs**: ```bash @@ -203,6 +203,12 @@ curl -X PUT \ --data-binary "@/Users/carlospolop/Downloads/rev.js" \ --user ':' ``` +### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action + +Te uprawnienia pozwalają na **przypisanie tożsamości zarządzanej** do usługi App, więc jeśli usługa App była wcześniej skompromitowana, to pozwoli to atakującemu na przypisanie nowych tożsamości zarządzanych do usługi App i **eskalację uprawnień** do nich. +```bash +az webapp identity assign --name --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ +``` ### Microsoft.Web/sites/config/list/action To uprawnienie pozwala na wylistowanie **connection strings** i **appsettings** usługi App, które mogą zawierać wrażliwe informacje, takie jak dane uwierzytelniające do bazy danych. @@ -210,12 +216,6 @@ To uprawnienie pozwala na wylistowanie **connection strings** i **appsettings** az webapp config connection-string list --name --resource-group az webapp config appsettings list --name --resource-group ``` -### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action - -Te uprawnienia pozwalają na **przypisanie zarządzanej tożsamości** do usługi App, więc jeśli usługa App została wcześniej skompromitowana, to pozwoli to atakującemu na przypisanie nowych zarządzanych tożsamości do usługi App i **eskalację uprawnień** do nich. -```bash -az webapp identity assign --name --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ -``` ### Odczytaj skonfigurowane dane uwierzytelniające stron trzecich Uruchamiając następujące polecenie, można **odczytać dane uwierzytelniające stron trzecich** skonfigurowane w bieżącym koncie. Należy zauważyć, że jeśli na przykład jakieś dane uwierzytelniające Github są skonfigurowane w innym użytkowniku, nie będziesz w stanie uzyskać dostępu do tokena z innego. @@ -248,7 +248,7 @@ curl -H "Authorization: Bearer " \ -H "Accept: application/json" \ https://graph.microsoft.com/v1.0/me/drive/root/children ``` -### Aktualizacja kodu aplikacji ze źródła +### Zaktualizuj kod aplikacji ze źródła - Jeśli skonfigurowane źródło to dostawca zewnętrzny, taki jak Github, BitBucket lub Azure Repository, możesz **zaktualizować kod** usługi aplikacji, kompromitując kod źródłowy w repozytorium. - Jeśli aplikacja jest skonfigurowana za pomocą **zdalnego repozytorium git** (z nazwą użytkownika i hasłem), możliwe jest uzyskanie **adresu URL i podstawowych poświadczeń autoryzacyjnych** do klonowania i wprowadzania zmian za pomocą: @@ -263,14 +263,14 @@ https://graph.microsoft.com/v1.0/me/drive/root/children - **`Microsoft.Web/sites/config/list/action`**: Następnie uruchom `az webapp deployment list-publishing-credentials --name --resource-group ` > [!WARNING] -> Zauważ, że posiadanie uprawnienia `Microsoft.Web/sites/config/list/action` oraz poświadczeń SCM zawsze umożliwia wdrożenie do aplikacji webowej (nawet jeśli była skonfigurowana do używania dostawcy zewnętrznego), jak wspomniano w poprzedniej sekcji. +> Zauważ, że posiadanie uprawnienia `Microsoft.Web/sites/config/list/action` i poświadczeń SCM zawsze umożliwia wdrożenie do aplikacji webowej (nawet jeśli była skonfigurowana do używania dostawcy zewnętrznego), jak wspomniano w poprzedniej sekcji. > [!WARNING] > Zauważ, że posiadanie poniższych uprawnień również **umożliwia wykonanie dowolnego kontenera**, nawet jeśli aplikacja webowa była skonfigurowana inaczej. ### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read` -To zestaw uprawnień, który pozwala na **modyfikację kontenera używanego** przez aplikację webową. Napastnik mógłby to wykorzystać do uruchomienia złośliwego kontenera w aplikacji webowej. +To zestaw uprawnień, który pozwala na **modyfikację kontenera używanego** przez aplikację webową. Napastnik mógłby to wykorzystać do zmuszenia aplikacji webowej do wykonania złośliwego kontenera. ```bash az webapp config container set \ --name \ diff --git a/src/pentesting-cloud/azure-security/az-services/az-app-services.md b/src/pentesting-cloud/azure-security/az-services/az-app-services.md index ebde0f0ce..ce9354143 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-app-services.md +++ b/src/pentesting-cloud/azure-security/az-services/az-app-services.md @@ -13,15 +13,15 @@ Każda aplikacja działa w piaskownicy, ale izolacja zależy od planów App Serv - Warstwy izolowane działają na **dedykowanych VM w dedykowanych sieciach wirtualnych**, co poprawia izolację aplikacji. > [!WARNING] -> Należy pamiętać, że **żadne** z tych izolacji **nie zapobiega** innym powszechnym **wrażliwościom internetowym** (takim jak przesyłanie plików czy wstrzyknięcia). A jeśli używana jest **tożsamość zarządzająca**, może ona **eskalować uprawnienia do nich**. +> Należy pamiętać, że **żadne** z tych izolacji **nie zapobiega** innym powszechnym **wrażliwościom internetowym** (takim jak przesyłanie plików czy wstrzyknięcia). A jeśli używana jest **tożsamość zarządzania**, może ona **eskalować uprawnienia do nich**. Aplikacje mają kilka interesujących konfiguracji: - **Always On**: Zapewnia, że aplikacja zawsze działa. Jeśli nie jest włączona, aplikacja przestanie działać po 20 minutach bezczynności i uruchomi się ponownie, gdy zostanie odebrane żądanie. -- Jest to istotne, jeśli masz webjob, który musi działać nieprzerwanie, ponieważ webjob zatrzyma się, jeśli aplikacja przestanie działać. +- Jest to niezbędne, jeśli masz webjob, który musi działać nieprzerwanie, ponieważ webjob zatrzyma się, jeśli aplikacja przestanie działać. - **SSH**: Jeśli włączone, użytkownik z wystarczającymi uprawnieniami może połączyć się z aplikacją za pomocą SSH. - **Debugowanie**: Jeśli włączone, użytkownik z wystarczającymi uprawnieniami może debugować aplikację. Jednak jest to automatycznie wyłączane co 48 godzin. -- **Aplikacja internetowa + Baza danych**: Konsola internetowa umożliwia utworzenie aplikacji z bazą danych. W tym przypadku można wybrać bazę danych do użycia (SQLAzure, PostgreSQL, MySQL, MongoDB) i umożliwia również utworzenie Azure Cache dla Redis. +- **Aplikacja webowa + Baza danych**: Konsola internetowa umożliwia utworzenie aplikacji z bazą danych. W tym przypadku można wybrać bazę danych do użycia (SQLAzure, PostgreSQL, MySQL, MongoDB) i umożliwia również utworzenie Azure Cache dla Redis. - URL zawierający dane uwierzytelniające do bazy danych i Redis będzie przechowywany w **appsettings**. - **Kontener**: Możliwe jest wdrożenie kontenera do App Service, wskazując URL kontenera i dane uwierzytelniające do jego dostępu. - **Montowanie**: Możliwe jest utworzenie 5 montowań z kont Storage, które mogą być Azure Blob (tylko do odczytu) lub Azure Files. Konfiguracja przechowa klucz dostępu w koncie Storage. @@ -48,7 +48,7 @@ Niektóre interesujące punkty końcowe, które można znaleźć w Kudu, to: - `/DebugConsole`: Konsola, która pozwala na wykonywanie poleceń w środowisku, w którym działa Kudu. - Należy pamiętać, że to środowisko **nie ma dostępu** do usługi metadanych w celu uzyskania tokenów. - `/webssh/host`: Klient SSH oparty na sieci, który pozwala na połączenie się wewnątrz kontenera, w którym działa aplikacja. -- To środowisko **ma dostęp do usługi metadanych**, aby uzyskać tokeny z przypisanych tożsamości zarządzających. +- To środowisko **ma dostęp do usługi metadanych**, aby uzyskać tokeny z przypisanych tożsamości zarządzanych. - `/Env`: Uzyskaj informacje o systemie, ustawieniach aplikacji, zmiennych środowiskowych, ciągach połączeń i nagłówkach HTTP. - `/wwwroot/`: Katalog główny aplikacji internetowej. Możesz pobrać wszystkie pliki stąd. @@ -66,16 +66,16 @@ App Services domyślnie pozwala na przesyłanie kodu jako pliku zip, ale równie - Możliwe jest również użycie **Azure Repository**. - Możliwe jest również skonfigurowanie **lokalnego repozytorium git**. - Możesz uzyskać URL repozytorium git, uruchamiając `az webapp deployment source show --name --resource-group `, a będzie to URL SCM aplikacji. -- Aby je sklonować, będziesz potrzebować danych uwierzytelniających SCM, które możesz uzyskać za pomocą `az webapp deployment list-publishing-profiles --resource-group -n ` +- Aby je sklonować, będziesz potrzebować danych uwierzytelniających SCM, które możesz uzyskać za pomocą `az webapp deployment list-publishing-profiles --resource-group -n `. ## Webjobs -Azure WebJobs to **zadania w tle, które działają w środowisku Azure App Service**. Umożliwiają deweloperom wykonywanie skryptów lub programów obok ich aplikacji internetowych, co ułatwia obsługę asynchronicznych lub czasochłonnych operacji, takich jak przetwarzanie plików, obsługa danych czy zadania zaplanowane. +Azure WebJobs to **zadania w tle, które działają w środowisku Azure App Service**. Umożliwiają deweloperom wykonywanie skryptów lub programów obok ich aplikacji internetowych, co ułatwia obsługę operacji asynchronicznych lub czasochłonnych, takich jak przetwarzanie plików, obsługa danych czy zadania zaplanowane. Istnieją 2 typy web jobs: - **Ciągłe**: Działa w nieskończoność w pętli i jest uruchamiane natychmiast po utworzeniu. Jest idealne do zadań, które wymagają stałego przetwarzania. Jednak jeśli aplikacja przestanie działać, ponieważ Always On jest wyłączone i nie otrzymała żądania w ciągu ostatnich 20 minut, web job również się zatrzyma. - **Wyzwalane**: Działa na żądanie lub na podstawie harmonogramu. Najlepiej nadaje się do okresowych zadań, takich jak aktualizacje danych wsadowych lub rutyny konserwacyjne. -Webjobs są bardzo interesujące z perspektywy atakującego, ponieważ mogą być używane do **wykonywania kodu** w środowisku i **eskalacji uprawnień** do przypisanych tożsamości zarządzających. +Webjobs są bardzo interesujące z perspektywy atakującego, ponieważ mogą być używane do **wykonywania kodu** w środowisku i **eskalacji uprawnień** do przypisanych tożsamości zarządzanych. Ponadto zawsze warto sprawdzić **logi** generowane przez Webjobs, ponieważ mogą zawierać **wrażliwe informacje**. @@ -156,6 +156,9 @@ az webapp config storage-account list --name --resource-group # Get configured container (if any) in the webapp, it could contain credentials az webapp config container show --name --resource-group +# Get git URL to access the code +az webapp deployment source config-local-git --resource-group -n + # Get Webjobs az webapp webjob continuous list --resource-group --name az webapp webjob triggered list --resource-group --name @@ -217,24 +220,7 @@ done {{#endtab }} {{#endtabs }} -#### Uzyskaj poświadczenia i uzyskaj dostęp do kodu aplikacji webowej -```bash -# Get connection strings that could contain credentials (with DBs for example) -az webapp config connection-string list --name --resource-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 -n - - -# Get git URL to access the code -az webapp deployment source config-local-git --resource-group -n - -# Access/Modify the code via git -git clone 'https://:@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 -``` {{#ref}} ../az-privilege-escalation/az-app-services-privesc.md {{#endref}} @@ -252,7 +238,7 @@ cd msdocs-python-flask-webapp-quickstart # Create webapp from this code az webapp up --runtime PYTHON:3.9 --sku B1 --logs ``` -Logując się do portalu SCM lub logując się przez FTP, można zobaczyć w `/wwwroot` skompresowany plik `output.tar.gz`, który zawiera kod aplikacji webowej. +Logując się do portalu SCM lub przez FTP, można zobaczyć w `/wwwroot` skompresowany plik `output.tar.gz`, który zawiera kod aplikacji webowej. > [!TIP] > Samo połączenie przez FTP i modyfikacja pliku `output.tar.gz` nie wystarczy, aby zmienić kod wykonywany przez aplikację webową. @@ -267,12 +253,12 @@ Ten samouczek oparty jest na poprzednim, ale wykorzystuje repozytorium Github. 2. Utwórz nową aplikację Web App w Azure. 3. W `Deployment Center` zmień źródło, zaloguj się do Github, wybierz forkowane repozytorium i kliknij `Save`. -Podobnie jak w poprzednim przypadku, logując się do portalu SCM lub logując się przez FTP, można zobaczyć w `/wwwroot` skompresowany plik `output.tar.gz`, który zawiera kod aplikacji webowej. +Podobnie jak w poprzednim przypadku, logując się do portalu SCM lub przez FTP, można zobaczyć w `/wwwroot` skompresowany plik `output.tar.gz`, który zawiera kod aplikacji webowej. > [!TIP] > Samo połączenie przez FTP i modyfikacja pliku `output.tar.gz` oraz ponowne uruchomienie wdrożenia nie wystarczy, aby zmienić kod wykonywany przez aplikację webową. -## Eskalacja Uprawnień +## Podwyższenie Uprawnień {{#ref}} ../az-privilege-escalation/az-app-services-privesc.md