mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-27 15:24:32 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -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 <name> --resource-group <res-group>
|
||||
@@ -23,7 +23,7 @@ az webapp ssh --name <name> --resource-group <res-group>
|
||||
```bash
|
||||
az webapp create-remote-connection --name <name> --resource-group <res-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 <name> --resource-group <res-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 `<SCM-URL>/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 "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -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 "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>>' -v
|
||||
--user '<username>:<password>' -v
|
||||
```
|
||||
- Przeczytaj kod źródłowy **Webjobs**:
|
||||
```bash
|
||||
@@ -203,6 +203,12 @@ curl -X PUT \
|
||||
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
### 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 <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
|
||||
```
|
||||
### 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 <name> --resource-group <res-group>
|
||||
az webapp config appsettings list --name <name> --resource-group <res-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 <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
|
||||
```
|
||||
### 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 <token>" \
|
||||
-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 <name> --resource-group <res-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 <app-name> \
|
||||
|
||||
@@ -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 <app-name> --resource-group <res-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 <res-group> -n <name>`
|
||||
- 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 <res-group> -n <name>`.
|
||||
|
||||
## 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 <name> --resource-group <res-group>
|
||||
# Get configured container (if any) in the webapp, it could contain credentials
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get git URL to access the code
|
||||
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
|
||||
|
||||
# Get Webjobs
|
||||
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
|
||||
az webapp webjob triggered list --resource-group <res-group> --name <app-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 <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
|
||||
```
|
||||
{{#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
|
||||
|
||||
Reference in New Issue
Block a user