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 9779bc5c4..2fde1d9f2 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 @@ -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 @@ -94,11 +94,11 @@ az webapp deployment list-publishing-profiles --name --resource-group } ] ``` -Beachten Sie, dass der **Benutzername immer gleich ist** (außer bei FTP, wo der Name der App am Anfang hinzugefügt wird), aber das **Passwort für alle gleich ist**. +Beachten Sie, dass der **Benutzername immer derselbe ist** (außer bei FTP, wo der Name der App am Anfang hinzugefügt wird), aber das **Passwort für alle dasselbe ist**. Darüber hinaus ist die **SCM-URL `.scm.azurewebsites.net`**. -- Die Berechtigung **`Microsoft.Web/sites/config/list/action`** erlaubt den Aufruf: +- Die Berechtigung **`Microsoft.Web/sites/config/list/action`** erlaubt das Aufrufen: ```bash az webapp deployment list-publishing-credentials --name --resource-group # Example output @@ -131,7 +131,7 @@ Denken Sie daran, dass Sie, um auf die SCM-Plattform über das **Web zuzugreifen > [!WARNING] > Beachten Sie, dass jeder Benutzer seine eigenen Anmeldeinformationen konfigurieren kann, indem er den vorherigen Befehl aufruft, aber wenn der Benutzer nicht über ausreichende Berechtigungen verfügt, um auf das SCM oder FTP zuzugreifen, funktionieren die Anmeldeinformationen nicht. -- Wenn Sie sehen, dass diese Anmeldeinformationen **REDACTED** sind, liegt das daran, dass Sie **die Option für die grundlegende Authentifizierung des SCM aktivieren müssen**, und dafür benötigen Sie die zweite Berechtigung (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` +- Wenn Sie sehen, dass diese Anmeldeinformationen **REDACTED** sind, liegt das daran, dass Sie **die Option für die grundlegende SCM-Authentifizierung aktivieren müssen** und dafür benötigen Sie die zweite Berechtigung (`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 } -} +}' ``` ### Code mit SCM-Anmeldeinformationen veröffentlichen Mit gültigen SCM-Anmeldeinformationen ist es möglich, **Code** in den App-Dienst zu **veröffentlichen**. Dies kann mit dem folgenden Befehl erfolgen. -Für dieses Python-Beispiel können Sie das Repository von https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart herunterladen, beliebige **Änderungen** vornehmen und dann **zippen, indem Sie ausführen: `zip -r app.zip .`**. +Für dieses Python-Beispiel können Sie das Repository von https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart herunterladen, beliebige **Änderungen** vornehmen und dann **zippen Sie es mit: `zip -r app.zip .`**. -Dann können Sie den **Code** mit dem folgenden Befehl **veröffentlichen**: +Anschließend können Sie den **Code** mit dem folgenden Befehl in einer Webanwendung **veröffentlichen**: ```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-Anmeldeinformationen +### Webjobs: Microsoft.Web/sites/publish/Action | SCM-Anmeldeinformationen Die erwähnte Azure-Berechtigung ermöglicht es, mehrere interessante Aktionen durchzuführen, die auch mit den SCM-Anmeldeinformationen durchgeführt werden können: @@ -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 ``` - Lesen Sie den Quellcode von **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 + +Diese Berechtigungen ermöglichen es, **eine verwaltete Identität** dem App-Dienst zuzuweisen. Wenn ein App-Dienst zuvor kompromittiert wurde, kann der Angreifer neue verwaltete Identitäten dem App-Dienst zuweisen und **die Berechtigungen** auf diese erhöhen. +```bash +az webapp identity assign --name --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ +``` ### Microsoft.Web/sites/config/list/action Diese Berechtigung ermöglicht das Auflisten der **Verbindungszeichenfolgen** und der **App-Einstellungen** des App-Dienstes, die möglicherweise sensible Informationen wie Datenbankanmeldeinformationen enthalten. @@ -210,12 +216,6 @@ Diese Berechtigung ermöglicht das Auflisten der **Verbindungszeichenfolgen** un 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 - -Diese Berechtigungen ermöglichen es, **eine verwaltete Identität** dem App-Dienst zuzuweisen. Wenn ein App-Dienst zuvor kompromittiert wurde, kann der Angreifer neue verwaltete Identitäten dem App-Dienst zuweisen und **Berechtigungen** auf diese erhöhen. -```bash -az webapp identity assign --name --resource-group --identities /subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/ -``` ### Konfigurierte Drittanbieter-Anmeldeinformationen lesen Durch Ausführen des folgenden Befehls ist es möglich, die **Drittanbieter-Anmeldeinformationen** zu lesen, die im aktuellen Konto konfiguriert sind. Beachten Sie, dass Sie beispielsweise, wenn einige Github-Anmeldeinformationen in einem anderen Benutzer konfiguriert sind, nicht auf das Token eines anderen Benutzers zugreifen können. @@ -248,7 +248,7 @@ curl -H "Authorization: Bearer " \ -H "Accept: application/json" \ https://graph.microsoft.com/v1.0/me/drive/root/children ``` -### Update App Code from the source +### Update App-Code aus der Quelle - Wenn die konfigurierte Quelle ein Drittanbieter wie Github, BitBucket oder ein Azure Repository ist, können Sie den **Code** des App-Dienstes aktualisieren, indem Sie den Quellcode im Repository kompromittieren. - Wenn die App mit einem **remote git repository** (mit Benutzername und Passwort) konfiguriert ist, ist es möglich, die **URL und die grundlegenden Authentifizierungsdaten** zu erhalten, um Änderungen zu klonen und zu pushen mit: @@ -256,14 +256,14 @@ https://graph.microsoft.com/v1.0/me/drive/root/children - Verwendung der Berechtigung **`Microsoft.Web/sites/config/list/action`**: - `az webapp deployment list-publishing-credentials --name --resource-group ` - `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` -- Wenn die App so konfiguriert ist, dass sie ein **local git repository** verwendet, ist es möglich, das **Repository zu klonen** und **Änderungen** daran zu pushen: -- Verwendung der Berechtigung **`Microsoft.Web/sites/sourcecontrols/read`**: Sie können die URL des git-Repos mit `az webapp deployment source show --name --resource-group ` erhalten, aber es wird die gleiche sein wie die SCM-URL der App mit dem Pfad `/.git` (z. B. `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`). +- Wenn die App konfiguriert ist, um ein **local git repository** zu verwenden, ist es möglich, das **Repository zu klonen** und **Änderungen** daran vorzunehmen: +- Verwendung der Berechtigung **`Microsoft.Web/sites/sourcecontrols/read`**: Sie können die URL des git-Repos mit `az webapp deployment source show --name --resource-group ` erhalten, aber es wird die gleiche sein wie die SCM-URL der App mit dem Pfad `/.git` (z.B. `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`). - Um die SCM-Anmeldeinformationen zu erhalten, benötigen Sie die Berechtigung: - **`Microsoft.Web/sites/publishxml/action`**: Führen Sie dann `az webapp deployment list-publishing-profiles --resource-group -n ` aus. - **`Microsoft.Web/sites/config/list/action`**: Führen Sie dann `az webapp deployment list-publishing-credentials --name --resource-group ` aus. > [!WARNING] -> Beachten Sie, dass es mit der Berechtigung `Microsoft.Web/sites/config/list/action` und den SCM-Anmeldeinformationen immer möglich ist, in eine Webanwendung zu deployen (auch wenn sie so konfiguriert war, dass sie einen Drittanbieter verwendet), wie in einem vorherigen Abschnitt erwähnt. +> Beachten Sie, dass es mit der Berechtigung `Microsoft.Web/sites/config/list/action` und den SCM-Anmeldeinformationen immer möglich ist, in eine Webanwendung zu deployen (auch wenn sie konfiguriert wurde, um einen Drittanbieter zu verwenden), wie in einem vorherigen Abschnitt erwähnt. > [!WARNING] > Beachten Sie, dass es mit den untenstehenden Berechtigungen auch **möglich ist, einen beliebigen Container auszuführen**, selbst wenn die Webanwendung anders konfiguriert wurde. 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 a1ea44aa6..3382d8bda 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 @@ -8,7 +8,7 @@ Azure App Services ermöglicht Entwicklern, **Webanwendungen, mobile App-Backend Jede App läuft in einer Sandbox, aber die Isolation hängt von den App Service-Plänen ab: -- Apps in den kostenlosen und gemeinsamen Stufen laufen auf **gemeinsamen VMs** +- Apps in den kostenlosen und gemeinsamen Stufen laufen auf **geteilten VMs** - Apps in den Standard- und Premium-Stufen laufen auf **dedizierten VMs, die nur von Apps** im selben App Service-Plan geteilt werden. - Die isolierten Stufen laufen auf **dedizierten VMs in dedizierten virtuellen Netzwerken**, was die Isolation der Apps verbessert. @@ -17,9 +17,9 @@ Jede App läuft in einer Sandbox, aber die Isolation hängt von den App Service- Apps haben einige interessante Konfigurationen: -- **Always On**: Stellt sicher, dass die App immer läuft. Wenn nicht aktiviert, wird die App nach 20 Minuten Inaktivität gestoppt und startet wieder, wenn eine Anfrage eingeht. +- **Always On**: Stellt sicher, dass die App immer läuft. Wenn dies nicht aktiviert ist, wird die App nach 20 Minuten Inaktivität gestoppt und startet erneut, wenn eine Anfrage eingeht. - Dies ist entscheidend, wenn Sie einen Webjob haben, der kontinuierlich laufen muss, da der Webjob stoppt, wenn die App stoppt. -- **SSH**: Wenn aktiviert, kann ein Benutzer mit ausreichenden Berechtigungen über SSH eine Verbindung zur App herstellen. +- **SSH**: Wenn aktiviert, kann sich ein Benutzer mit ausreichenden Berechtigungen über SSH mit der App verbinden. - **Debugging**: Wenn aktiviert, kann ein Benutzer mit ausreichenden Berechtigungen die App debuggen. Dies wird jedoch automatisch alle 48 Stunden deaktiviert. - **Web App + Datenbank**: Die Webkonsole ermöglicht es, eine App mit einer Datenbank zu erstellen. In diesem Fall ist es möglich, die zu verwendende Datenbank auszuwählen (SQLAzure, PostgreSQL, MySQL, MongoDB), und es ermöglicht auch die Erstellung eines Azure Cache für Redis. - Die URL, die die Anmeldeinformationen für die Datenbank und Redis enthält, wird in den **appsettings** gespeichert. @@ -28,14 +28,14 @@ Apps haben einige interessante Konfigurationen: ## Basisauthentifizierung -Beim Erstellen einer Webanwendung (und einer Azure-Funktion normalerweise) ist es möglich anzugeben, ob **Basisauthentifizierung aktiviert werden soll** (standardmäßig deaktiviert). Dies aktiviert im Wesentlichen **SCM (Source Control Manager) und FTP (File Transfer Protocol)** für die Anwendung, sodass die Anwendung mit diesen Technologien bereitgestellt werden kann. +Beim Erstellen einer Webanwendung (und einer Azure-Funktion normalerweise) ist es möglich anzugeben, ob **die Basisauthentifizierung aktiviert werden soll** (standardmäßig deaktiviert). Dies aktiviert im Wesentlichen **SCM (Source Control Manager) und FTP (File Transfer Protocol)** für die Anwendung, sodass die Anwendung mit diesen Technologien bereitgestellt werden kann. Um auf die SCM- und FTP-Server zuzugreifen, sind ein **Benutzername und ein Passwort** erforderlich. Daher stellt Azure einige **APIs zur Verfügung, um die URLs** zu diesen Plattformen und die Anmeldeinformationen zu erhalten. -Der **FTP-Server hat keine besondere Magie**, mit der gültigen URL, dem Benutzernamen und dem Passwort ist es möglich, eine Verbindung herzustellen und Lese- und Schreibberechtigungen über die App-Umgebung zu erhalten. +Der **FTP-Server hat keine besondere Magie**, mit der gültigen URL, dem Benutzernamen und dem Passwort ist es möglich, sich zu verbinden und Lese- und Schreibberechtigungen über die App-Umgebung zu erhalten. -Die SCM -Es ist möglich, sich über einen Webbrowser unter `https:///BasicAuth` mit der SCM zu verbinden und alle Dateien und Bereitstellungen dort zu überprüfen. +Das SCM +Es ist möglich, sich über einen Webbrowser unter `https:///BasicAuth` mit dem SCM zu verbinden und alle Dateien und Bereitstellungen dort zu überprüfen. ### Kudu @@ -61,7 +61,7 @@ App Services erlauben standardmäßig das Hochladen des Codes als Zip-Datei, erm - Die derzeit unterstützten Drittanbieterquellen sind **Github** und **Bitbucket**. - Sie können die Authentifizierungstokens erhalten, indem Sie `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"` ausführen. - Azure wird standardmäßig eine **Github Action** einrichten, um den Code jedes Mal in den App Service bereitzustellen, wenn der Code aktualisiert wird. -- Es ist auch möglich, ein **remote git repository** (mit Benutzername und Passwort) anzugeben, um den Code von dort abzurufen. +- Es ist auch möglich, ein **remote git repository** (mit Benutzername und Passwort) anzugeben, um den Code von dort zu erhalten. - Sie können die Anmeldeinformationen für das Remote-Repo erhalten, indem Sie `az webapp deployment source show --name --resource-group ` oder `az rest --method POST --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Web/sites//config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"` ausführen. - Es ist auch möglich, ein **Azure Repository** zu verwenden. - Es ist auch möglich, ein **lokales git repository** zu konfigurieren. @@ -77,7 +77,7 @@ Es gibt 2 Arten von Webjobs: Webjobs sind aus der Perspektive eines Angreifers sehr interessant, da sie verwendet werden könnten, um **Code** in der Umgebung auszuführen und **Berechtigungen** auf die angehängten verwalteten Identitäten zu **eskalieren**. -Darüber hinaus ist es immer interessant, die von den Webjobs generierten **Protokolle** zu überprüfen, da sie **sensible Informationen** enthalten könnten. +Darüber hinaus ist es immer interessant, die **Protokolle** zu überprüfen, die von den Webjobs generiert werden, da sie **sensible Informationen** enthalten könnten. ## Slots @@ -89,7 +89,7 @@ Darüber hinaus ist es möglich, einen **Prozentsatz des Traffics** an einen bes Im Grunde sind **Azure Function Apps eine Untergruppe von Azure App Service** in der Webkonsole, und wenn Sie zur Webkonsole gehen und alle App-Dienste auflisten oder `az webapp list` im az cli ausführen, werden Sie auch **die Function Apps dort aufgelistet sehen**. -Daher haben beide Dienste tatsächlich größtenteils die **gleichen Konfigurationen, Funktionen und Optionen im az cli**, obwohl sie diese möglicherweise etwas anders konfigurieren (wie Standardwerte von appsettings oder die Verwendung eines Speicherkontos in den Function Apps). +Daher haben beide Dienste tatsächlich größtenteils die **gleichen Konfigurationen, Funktionen und Optionen im az cli**, obwohl sie sie möglicherweise etwas anders konfigurieren (wie Standardwerte von appsettings oder die Verwendung eines Speicherkontos in den Function Apps). ## Enumeration @@ -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 }} -#### Anmeldeinformationen erhalten & Zugriff auf den Webanwendungscode erhalten -```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}}