mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-17 23:25:37 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA
This commit is contained in:
@@ -186,7 +186,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
|
||||
Wenn Sie sich über die **CLI** bei Azure mit einem Programm anmelden, verwenden Sie eine **Azure-Anwendung** aus einem **Mandanten**, der zu **Microsoft** gehört. Diese Anwendungen, wie die, die Sie in Ihrem Konto erstellen können, **haben eine Client-ID**. Sie **werden nicht alle sehen können** in den **erlaubten Anwendungslisten**, die Sie in der Konsole sehen können, **aber sie sind standardmäßig erlaubt**.
|
||||
|
||||
Zum Beispiel verwendet ein **PowerShell-Skript**, das sich **authentifiziert**, eine App mit der Client-ID **`1950a258-227b-4e31-a9cf-717495945fc2`**. Selbst wenn die App nicht in der Konsole angezeigt wird, könnte ein Sysadmin **diese Anwendung blockieren**, sodass Benutzer nicht über Tools, die sich über diese App verbinden, darauf zugreifen können.
|
||||
Zum Beispiel verwendet ein **PowerShell-Skript**, das sich **authentifiziert**, eine App mit der Client-ID **`1950a258-227b-4e31-a9cf-717495945fc2`**. Selbst wenn die App nicht in der Konsole angezeigt wird, könnte ein Systemadministrator **diese Anwendung blockieren**, sodass Benutzer nicht über Tools, die sich über diese App verbinden, darauf zugreifen können.
|
||||
|
||||
Es gibt jedoch **andere Client-IDs** von Anwendungen, die **es Ihnen ermöglichen, sich mit Azure zu verbinden**:
|
||||
```bash
|
||||
@@ -597,7 +597,7 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> Der Eigentümer eines Service Principal kann sein Passwort ändern.
|
||||
> Der Eigentümer eines Dienstprinzipals kann sein Passwort ändern.
|
||||
|
||||
<details>
|
||||
|
||||
@@ -798,11 +798,11 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
> [!NOTE]
|
||||
> Ein geheimer String, den die Anwendung verwendet, um ihre Identität bei der Anforderung eines Tokens zu beweisen, ist das Anwendungskennwort.\
|
||||
> Wenn Sie also dieses **Kennwort** finden, können Sie als **Service Principal** **innerhalb** des **Mandanten** zugreifen.\
|
||||
> Beachten Sie, dass dieses Kennwort nur sichtbar ist, wenn es generiert wird (Sie können es ändern, aber nicht erneut abrufen).\
|
||||
> Beachten Sie, dass dieses Kennwort nur sichtbar ist, wenn es generiert wird (Sie könnten es ändern, aber Sie können es nicht erneut abrufen).\
|
||||
> Der **Besitzer** der **Anwendung** kann ihr **ein Kennwort hinzufügen** (damit er sich als diese ausgeben kann).\
|
||||
> Anmeldungen als diese Service Principals sind **nicht als riskant gekennzeichnet** und sie **werden kein MFA haben.**
|
||||
|
||||
Es ist möglich, eine Liste von häufig verwendeten App-IDs, die zu Microsoft gehören, unter [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) zu finden.
|
||||
Es ist möglich, eine Liste von häufig verwendeten App-IDs, die zu Microsoft gehören, in [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) zu finden.
|
||||
|
||||
### Managed Identities
|
||||
|
||||
@@ -892,16 +892,9 @@ Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/<res
|
||||
Get-AzDenyAssignment # Get from current subscription
|
||||
Get-AzDenyAssignment -Scope '/subscriptions/96231a05-34ce-4eb4-aa6a-70759cbb5e83/resourcegroups/testRG/providers/Microsoft.Web/sites/site1'
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Raw" }}
|
||||
|
||||
```bash
|
||||
# Berechtigungen über eine Ressource direkt mit ARM abrufen
|
||||
# Get permissions over a resource using ARM directly
|
||||
$Token = (Get-AzAccessToken).Token
|
||||
$URI = 'https://management.azure.com/subscriptions/b413826f-108d-4049-8c11-d52d5d388768/resourceGroups/Research/providers/Microsoft.Compute/virtualMachines/infradminsrv/providers/Microsoft.Authorization/permissions?api-version=2015-07-01'
|
||||
$RequestParams = @{
|
||||
@@ -913,13 +906,12 @@ Headers = @{
|
||||
}
|
||||
(Invoke-RestMethod @RequestParams).value
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Entra ID Roles
|
||||
### Entra ID Rollen
|
||||
|
||||
For more information about Azure roles check:
|
||||
Für weitere Informationen zu Azure-Rollen siehe:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -927,134 +919,125 @@ For more information about Azure roles check:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
```bash
|
||||
# Liste der Entra ID-Rollen-Vorlagen
|
||||
# List template Entra ID roles
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/directoryRoleTemplates"
|
||||
|
||||
# Liste der aktivierten integrierten Entra ID-Rollen
|
||||
# List enabled built-in Entra ID roles
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/directoryRoles"
|
||||
|
||||
# Liste aller Entra ID-Rollen mit ihren Berechtigungen (einschließlich benutzerdefinierter Rollen)
|
||||
# List all Entra ID roles with their permissions (including custom roles)
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions"
|
||||
|
||||
# Liste nur benutzerdefinierter Entra ID-Rollen
|
||||
# List only custom Entra ID roles
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleDefinitions" | jq '.value[] | select(.isBuiltIn == false)'
|
||||
|
||||
# Liste aller zugewiesenen Entra ID-Rollen
|
||||
# List all assigned Entra ID roles
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/roleManagement/directory/roleAssignments"
|
||||
|
||||
# Liste der Mitglieder einer Entra ID-Rolle
|
||||
# List members of a Entra ID roles
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/directoryRoles/<role-id>/members"
|
||||
|
||||
# Liste der Entra ID-Rollen, die einem Benutzer zugewiesen sind
|
||||
# List Entra ID roles assigned to a user
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/users/<user-id>/memberOf/microsoft.graph.directoryRole" \
|
||||
--query "value[]" \
|
||||
--output json
|
||||
|
||||
# Liste der Entra ID-Rollen, die einer Gruppe zugewiesen sind
|
||||
# List Entra ID roles assigned to a group
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/groups/$GROUP_ID/memberOf/microsoft.graph.directoryRole" \
|
||||
--query "value[]" \
|
||||
--output json
|
||||
|
||||
# Liste der Entra ID-Rollen, die einem Dienstprinzipal zugewiesen sind
|
||||
# List Entra ID roles assigned to a service principal
|
||||
az rest --method GET \
|
||||
--uri "https://graph.microsoft.com/v1.0/servicePrincipals/$SP_ID/memberOf/microsoft.graph.directoryRole" \
|
||||
--query "value[]" \
|
||||
--output json
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
|
||||
```bash
|
||||
# Alle verfügbaren Rollenvorlagen abrufen
|
||||
# Get all available role templates
|
||||
Get-AzureADDirectoryroleTemplate
|
||||
# Aktivierte Rollen (Zugewiesene Rollen)
|
||||
# Get enabled roles (Assigned roles)
|
||||
Get-AzureADDirectoryRole
|
||||
Get-AzureADDirectoryRole -ObjectId <roleID> # Informationen über die Rolle abrufen
|
||||
# Benutzerdefinierte Rollen - verwenden Sie AzureAdPreview
|
||||
Get-AzureADDirectoryRole -ObjectId <roleID> #Get info about the role
|
||||
# Get custom roles - use AzureAdPreview
|
||||
Get-AzureADMSRoleDefinition | ?{$_.IsBuiltin -eq $False} | select DisplayName
|
||||
# Benutzer, die einer Rolle zugewiesen sind (Global Administrator)
|
||||
# Users assigned a role (Global Administrator)
|
||||
Get-AzureADDirectoryRole -Filter "DisplayName eq 'Global Administrator'" | Get-AzureADDirectoryRoleMember
|
||||
Get-AzureADDirectoryRole -ObjectId <id> | fl
|
||||
# Rollen der Administrativen Einheit (wer Berechtigungen über die administrative Einheit und ihre Mitglieder hat)
|
||||
# Roles of the Administrative Unit (who has permissions over the administrative unit and its members)
|
||||
Get-AzureADMSScopedRoleMembership -Id <id> | fl *
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Devices
|
||||
### Geräte
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
```bash
|
||||
# Wenn du weißt, wie man das macht, sende einen PR!
|
||||
# If you know how to do this send a PR!
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
{{#tab name="MS Graph" }}
|
||||
|
||||
```bash
|
||||
# Geräte mit Microsoft Graph PowerShell auflisten
|
||||
# Enumerate devices using Microsoft Graph PowerShell
|
||||
Get-MgDevice -All
|
||||
|
||||
# Gerätedetails abrufen
|
||||
# Get device details
|
||||
Get-MgDevice -DeviceId <DeviceId> | Format-List *
|
||||
|
||||
# Geräte abrufen, die mit Intune verwaltet werden
|
||||
# Get devices managed using Intune
|
||||
Get-MgDevice -Filter "isCompliant eq true" -All
|
||||
|
||||
# Geräte abrufen, die einem Benutzer gehören
|
||||
# Get devices owned by a user
|
||||
Get-MgUserOwnedDevice -UserId test@corp.onmicrosoft.com
|
||||
|
||||
# Verfügbare Befehle in Microsoft Graph PowerShell auflisten
|
||||
# List available commands in Microsoft Graph PowerShell
|
||||
Get-Command -Module Microsoft.Graph.Identity.DirectoryManagement
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Azure AD" }}
|
||||
|
||||
```bash
|
||||
# Geräte auflisten
|
||||
# Enumerate Devices
|
||||
Get-AzureADDevice -All $true | fl *
|
||||
# Liste aller aktiven Geräte (und nicht der veralteten Geräte)
|
||||
# List all the active devices (and not the stale devices)
|
||||
Get-AzureADDevice -All $true | ?{$_.ApproximateLastLogonTimeStamp -ne $null}
|
||||
# Besitzer aller Geräte abrufen
|
||||
# Get owners of all devices
|
||||
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredOwner
|
||||
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredOwner -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
|
||||
# Registrierte Benutzer aller Geräte
|
||||
# Registred users of all the devices
|
||||
Get-AzureADDevice -All $true | Get-AzureADDeviceRegisteredUser
|
||||
Get-AzureADDevice -All $true | %{if($user=Get-AzureADDeviceRegisteredUser -ObjectId $_.ObjectID){$_;$user.UserPrincipalName;"`n"}}
|
||||
# Geräte abrufen, die mit Intune verwaltet werden
|
||||
# Get dives managed using Intune
|
||||
Get-AzureADDevice -All $true | ?{$_.IsCompliant -eq "True"}
|
||||
# Geräte abrufen, die einem Benutzer gehören
|
||||
# Get devices owned by a user
|
||||
Get-AzureADUserOwnedDevice -ObjectId test@corp.onmicrosoft.com
|
||||
# Administrative Einheiten eines Geräts abrufen
|
||||
# Get Administrative Units of a device
|
||||
Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember -ObjectId $_.ObjectId | where {$_.ObjectId -eq $deviceObjId} }
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
> [!WARNING]
|
||||
> If a device (VM) is **AzureAD joined**, users from AzureAD are going to be **able to login**.\
|
||||
> Moreover, if the logged user is **Owner** of the device, he is going to be **local admin**.
|
||||
> Wenn ein Gerät (VM) **AzureAD verbunden** ist, können Benutzer von AzureAD **einloggen**.\
|
||||
> Darüber hinaus, wenn der angemeldete Benutzer **Besitzer** des Geräts ist, wird er **lokaler Administrator** sein.
|
||||
|
||||
### Administrative Units
|
||||
### Administrative Einheiten
|
||||
|
||||
For more information about administrative units check:
|
||||
Für weitere Informationen zu administrativen Einheiten siehe:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -1062,76 +1045,72 @@ For more information about administrative units check:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
|
||||
```bash
|
||||
# Liste aller administrativen Einheiten
|
||||
# List all administrative units
|
||||
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits"
|
||||
# Informationen zur AU abrufen
|
||||
# Get AU info
|
||||
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53"
|
||||
# Mitglieder abrufen
|
||||
# Get members
|
||||
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/members"
|
||||
# Prinzipale mit Rollen über der AU abrufen
|
||||
# Get principals with roles over the AU
|
||||
az rest --method GET --uri "https://graph.microsoft.com/v1.0/directory/administrativeUnits/a76fd255-3e5e-405b-811b-da85c715ff53/scopedRoleMembers"
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="AzureAD" }}
|
||||
|
||||
```bash
|
||||
# Administrativen Einheiten abrufen
|
||||
# Get Administrative Units
|
||||
Get-AzureADMSAdministrativeUnit
|
||||
Get-AzureADMSAdministrativeUnit -Id <id>
|
||||
# ID der administrativen Einheit durch Zeichenfolge abrufen
|
||||
# Get ID of admin unit by string
|
||||
$adminUnitObj = Get-AzureADMSAdministrativeUnit -Filter "displayname eq 'Test administrative unit 2'"
|
||||
# Die Benutzer, Gruppen und Geräte auflisten, die von der administrativen Einheit betroffen sind
|
||||
# List the users, groups, and devices affected by the administrative unit
|
||||
Get-AzureADMSAdministrativeUnitMember -Id <id>
|
||||
# Die Rollen abrufen, die Benutzer über die Mitglieder der AU haben
|
||||
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Rollen-ID und Rollenmitglieder abrufen
|
||||
# Get the roles users have over the members of the AU
|
||||
Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
```
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Entra ID Privilege Escalation
|
||||
## Entra ID Privilegieneskalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/
|
||||
{{#endref}}
|
||||
|
||||
## Azure Privilege Escalation
|
||||
## Azure Privilegieneskalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-authorization-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Defensive Mechanisms
|
||||
## Verteidigungsmechanismen
|
||||
|
||||
### Privileged Identity Management (PIM)
|
||||
|
||||
Privileged Identity Management (PIM) in Azure helps to **prevent excessive privileges** to being assigned to users unnecessarily.
|
||||
Privileged Identity Management (PIM) in Azure hilft, **übermäßige Berechtigungen** zu verhindern, die unnötig Benutzern zugewiesen werden.
|
||||
|
||||
One of the main features provided by PIM is that It allows to not assign roles to principals that are constantly active, but make them **eligible for a period of time (e.g. 6months)**. Then, whenever the user wants to activate that role, he needs to ask for it indicating the time he needs the privilege (e.g. 3 hours). Then an **admin needs to approve** the request.\
|
||||
Note that the user will also be able to ask to **extend** the time.
|
||||
Eine der Hauptfunktionen von PIM ist, dass es ermöglicht, Rollen nicht ständig aktiven Benutzern zuzuweisen, sondern sie **für einen bestimmten Zeitraum (z.B. 6 Monate)** bereitzustellen. Dann, wann immer der Benutzer diese Rolle aktivieren möchte, muss er sie anfordern und die Zeit angeben, für die er die Berechtigung benötigt (z.B. 3 Stunden). Dann muss ein **Admin die Anfrage genehmigen**.\
|
||||
Beachten Sie, dass der Benutzer auch die Möglichkeit hat, die Zeit zu **verlängern**.
|
||||
|
||||
Moreover, **PIM send emails** whenever a privileged role is being assigned to someone.
|
||||
Darüber hinaus **sendet PIM E-Mails**, wann immer eine privilegierte Rolle jemandem zugewiesen wird.
|
||||
|
||||
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
When PIM is enabled it's possible to configure each role with certain requirements like:
|
||||
Wenn PIM aktiviert ist, ist es möglich, jede Rolle mit bestimmten Anforderungen zu konfigurieren, wie:
|
||||
|
||||
- Maximum duration (hours) of activation
|
||||
- Require MFA on activation
|
||||
- Require Conditional Access acuthenticaiton context
|
||||
- Require justification on activation
|
||||
- Require ticket information on activation
|
||||
- Require approval to activate
|
||||
- Max time to expire the elegible assignments
|
||||
- A lot more configuration on when and who to send notifications when certain actions happen with that role
|
||||
- Maximale Dauer (Stunden) der Aktivierung
|
||||
- MFA bei Aktivierung erforderlich
|
||||
- Erfordert den Kontext der bedingten Zugriffsauthentifizierung
|
||||
- Erfordert eine Begründung bei Aktivierung
|
||||
- Erfordert Ticketinformationen bei Aktivierung
|
||||
- Genehmigung zur Aktivierung erforderlich
|
||||
- Maximale Zeit bis zum Ablauf der berechtigten Zuweisungen
|
||||
- Viel mehr Konfigurationen, wann und an wen Benachrichtigungen gesendet werden, wenn bestimmte Aktionen mit dieser Rolle stattfinden
|
||||
|
||||
### Conditional Access Policies
|
||||
### Bedingte Zugriffsrichtlinien
|
||||
|
||||
Check:
|
||||
Überprüfen Sie:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
|
||||
@@ -1139,27 +1118,27 @@ Check:
|
||||
|
||||
### Entra Identity Protection
|
||||
|
||||
Entra Identity Protection is a security service that allows to **detect when a user or a sign-in is too risky** to be accepted, allowing to **block** the user or the sig-in attempt.
|
||||
Entra Identity Protection ist ein Sicherheitsdienst, der es ermöglicht, **zu erkennen, wann ein Benutzer oder ein Anmeldeversuch zu riskant** ist, um akzeptiert zu werden, und es ermöglicht, den Benutzer oder den Anmeldeversuch zu **blockieren**.
|
||||
|
||||
It allows the admin to configure it to **block** attempts when the risk is "Low and above", "Medium and above" or "High". Although, by default it's completely **disabled**:
|
||||
Es ermöglicht dem Admin, es so zu konfigurieren, dass es Versuche blockiert, wenn das Risiko "Niedrig und darüber", "Mittel und darüber" oder "Hoch" ist. Obwohl es standardmäßig vollständig **deaktiviert** ist:
|
||||
|
||||
<figure><img src="../../../images/image (356).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Nowadays it's recommended to add these restrictions via Conditional Access policies where it's possible to configure the same options.
|
||||
> Heutzutage wird empfohlen, diese Einschränkungen über bedingte Zugriffsrichtlinien hinzuzufügen, wo es möglich ist, die gleichen Optionen zu konfigurieren.
|
||||
|
||||
### Entra Password Protection
|
||||
### Entra Passwortschutz
|
||||
|
||||
Entra Password Protection ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) is a security feature that **helps prevent the abuse of weak passwords in by locking out accounts when several unsuccessful login attempts happen**.\
|
||||
It also allows to **ban a custom password list** that you need to provide.
|
||||
Entra Passwortschutz ([https://portal.azure.com/index.html#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade](https://portal.azure.com/#view/Microsoft_AAD_ConditionalAccess/PasswordProtectionBlade)) ist eine Sicherheitsfunktion, die **hilft, den Missbrauch schwacher Passwörter zu verhindern, indem Konten gesperrt werden, wenn mehrere erfolglose Anmeldeversuche auftreten**.\
|
||||
Es ermöglicht auch, eine **benutzerdefinierte Passwortliste zu sperren**, die Sie bereitstellen müssen.
|
||||
|
||||
It can be **applied both** at the cloud level and on-premises Active Directory.
|
||||
Es kann **sowohl** auf Cloud-Ebene als auch im lokalen Active Directory angewendet werden.
|
||||
|
||||
The default mode is **Audit**:
|
||||
Der Standardmodus ist **Audit**:
|
||||
|
||||
<figure><img src="../../../images/image (355).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## References
|
||||
## Referenzen
|
||||
|
||||
- [https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units](https://learn.microsoft.com/en-us/azure/active-directory/roles/administrative-units)
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
**Azure Cloud Shell** ist ein interaktives, authentifiziertes, browserzugängliches Terminal, das für die Verwaltung von Azure-Ressourcen konzipiert ist und die Flexibilität bietet, entweder mit Bash oder PowerShell zu arbeiten. Es läuft auf einem temporären, pro Sitzung zugewiesenen Host, der nach 20 Minuten Inaktivität abläuft, während Dateien im $HOME-Verzeichnis unter Verwendung eines 5-GB-Dateifreigabe gespeichert werden. Cloud Shell kann über mehrere Punkte aufgerufen werden, einschließlich des Azure-Portals, shell.azure.com, Azure CLI und PowerShell-Dokumentation, der Azure-Mobile-App und der Visual Studio Code Azure-Kontoerweiterung.
|
||||
|
||||
Es sind keine Berechtigungen für diesen Dienst zugewiesen, daher gibt es keine Techniken zur Privilegienerhöhung. Auch gibt es keine Art der Enumeration.
|
||||
Es sind keine Berechtigungen für diesen Dienst zugewiesen, daher gibt es keine Techniken zur Privilegieneskalation. Auch gibt es keine Art der Enumeration.
|
||||
|
||||
### Key Features
|
||||
|
||||
@@ -18,14 +18,14 @@ Es sind keine Berechtigungen für diesen Dienst zugewiesen, daher gibt es keine
|
||||
|
||||
## References
|
||||
|
||||
* [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
|
||||
* [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
|
||||
* [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
|
||||
- [https://learn.microsoft.com/en-us/azure/cloud-shell/overview](https://learn.microsoft.com/en-us/azure/cloud-shell/overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/cloud-shell/features](https://learn.microsoft.com/en-us/azure/cloud-shell/features)
|
||||
- [https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window](https://learn.microsoft.com/en-us/azure/cloud-shell/using-the-shell-window)
|
||||
|
||||
## Persistence
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-cloud-shell-persistence.md" %}
|
||||
[az-cloud-shell-persistence.md](../az-privilege-escalation/az-cloud-shell-persistence.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-persistence/az-cloud-shell-persistence.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Azure CosmosDB
|
||||
|
||||
**Azure Cosmos DB** ist eine vollständig **verwaltete NoSQL-, relationale und Vektordatenbank**, die Reaktionszeiten im einstelligen Millisekundenbereich, automatische Skalierbarkeit und SLA-unterstützte Verfügbarkeit mit Unternehmenssicherheit bietet. Es ermöglicht eine schnellere Anwendungsentwicklung durch schlüsselfertige, mehrregionale Datenverteilung, Open-Source-APIs, SDKs für beliebte Programmiersprachen und KI-Datenbankfunktionen wie integrierte Vektorstützung und nahtlose Azure KI-Integration.
|
||||
**Azure Cosmos DB** ist eine vollständig **verwaltete NoSQL-, relationale und Vektordatenbank**, die Reaktionszeiten im einstelligen Millisekundenbereich, automatische Skalierbarkeit und SLA-unterstützte Verfügbarkeit mit Unternehmenssicherheit bietet. Es ermöglicht eine schnellere Anwendungsentwicklung durch schlüsselfertige, mehrregionale Datenverteilung, Open-Source-APIs, SDKs für beliebte Programmiersprachen und KI-Datenbankfunktionen wie integrierte Vektorsupport und nahtlose Azure KI-Integration.
|
||||
|
||||
Azure Cosmos DB bietet mehrere Datenbank-APIs, um reale Daten mit Dokumenten, relationalen, Schlüssel-Wert-, Graph- und Spaltenfamilien-Datenmodellen zu modellieren. Diese APIs sind NoSQL, MongoDB, PostgreSQL, Cassandra, Gremlin und Table.
|
||||
|
||||
@@ -12,13 +12,9 @@ Ein wichtiger Aspekt von CosmosDB ist das Azure Cosmos-Konto. **Azure Cosmos-Kon
|
||||
|
||||
### NoSQL (sql)
|
||||
Die Azure Cosmos DB NoSQL-API ist eine dokumentenbasierte API, die JSON als Datenformat verwendet. Sie bietet eine SQL-ähnliche Abfragesyntax zum Abfragen von JSON-Objekten, was sie geeignet macht für die Arbeit mit strukturierten und semi-strukturierten Daten. Der Endpunkt des Dienstes ist:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
https://<Account-Name>.documents.azure.com:443/
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Datenbanken
|
||||
Innerhalb eines Kontos können Sie eine oder mehrere Datenbanken erstellen, die als logische Gruppierungen von Containern dienen. Eine Datenbank fungiert als Grenze für das Ressourcenmanagement und die Benutzerberechtigungen. Datenbanken können entweder die bereitgestellte Durchsatzrate über ihre Container teilen oder dedizierten Durchsatz für einzelne Container zuweisen.
|
||||
|
||||
@@ -27,9 +23,8 @@ Die zentrale Einheit der Datenspeicherung ist der Container, der JSON-Dokumente
|
||||
|
||||
#### Aufzählung
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# CosmoDB Account
|
||||
## List Azure Cosmos DB database accounts.
|
||||
@@ -65,11 +60,9 @@ az cosmosdb sql trigger list --account-name <AccountName> --container-name <Cont
|
||||
az cosmosdb sql user-defined-function list --account-name <AccountName> --container-name <ContainerName> --database-name <DatabaseName> --resource-group <ResourceGroupName>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.CosmosD
|
||||
|
||||
@@ -112,14 +105,12 @@ Get-AzCosmosDBSqlTrigger -ResourceGroupName "<ResourceGroupName>" -AccountName "
|
||||
# List all user-defined functions (UDFs) in a specific Cosmos DB SQL container.
|
||||
Get-AzCosmosDBSqlUserDefinedFunction -ResourceGroupName "<ResourceGroupName>" -AccountName "<AccountName>" -DatabaseName "<DatabaseName>" -ContainerName "<ContainerName>"
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
#### Verbindung
|
||||
|
||||
Um die azure-cosmosDB (pip install azure-cosmos) zu verbinden, wird die Bibliothek benötigt. Darüber hinaus sind der Endpunkt und der Schlüssel entscheidende Komponenten, um die Verbindung herzustellen.
|
||||
{% code overflow="wrap" %}
|
||||
Um die azure-cosmosDB (pip install azure-cosmos) Bibliothek zu verbinden, sind der Endpunkt und der Schlüssel entscheidende Komponenten, um die Verbindung herzustellen.
|
||||
```python
|
||||
from azure.cosmos import CosmosClient, PartitionKey
|
||||
|
||||
@@ -158,11 +149,7 @@ print("All items in the container:")
|
||||
for item in all_items:
|
||||
print(item)
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Eine weitere Möglichkeit, eine Verbindung herzustellen, besteht darin, **DefaultAzureCredential()** zu verwenden. Man muss sich nur mit dem Konto anmelden (az login), das die Berechtigungen hat, und es ausführen. In diesem Fall muss eine Rollen zuweisung vorgenommen werden, um die erforderlichen Berechtigungen zu gewähren (siehe für mor)
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Eine weitere Möglichkeit, eine Verbindung herzustellen, besteht darin, **DefaultAzureCredential()** zu verwenden. Es muss sich nur mit dem Konto angemeldet werden (az login), das die Berechtigungen hat, und es auszuführen. In diesem Fall muss eine Rollen zuweisung vorgenommen werden, um die erforderlichen Berechtigungen zu gewähren (siehe für mor)
|
||||
```python
|
||||
from azure.identity import DefaultAzureCredential
|
||||
from azure.cosmos import CosmosClient
|
||||
@@ -187,17 +174,11 @@ item = {
|
||||
container.create_item(item)
|
||||
print("Document inserted.")
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
### MongoDB
|
||||
Die MongoDB NoSQL-API ist eine dokumentenbasierte API, die BSON (Binary JSON) im JSON-ähnlichen Format als Datenformat verwendet. Sie bietet eine Abfragesprache mit Aggregationsfähigkeiten, die sie für die Arbeit mit strukturierten, semi-strukturierten und unstrukturierten Daten geeignet macht. Der Endpunkt des Dienstes folgt typischerweise diesem Format:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
Die MongoDB NoSQL-API ist eine dokumentenbasierte API, die JSON-ähnliches BSON (Binary JSON) als Datenformat verwendet. Sie bietet eine Abfragesprache mit Aggregationsfähigkeiten, die sie für die Arbeit mit strukturierten, semi-strukturierten und unstrukturierten Daten geeignet macht. Der Endpunkt des Dienstes folgt typischerweise diesem Format:
|
||||
```bash
|
||||
mongodb://<hostname>:<port>/<database>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
#### Datenbanken
|
||||
In MongoDB können Sie eine oder mehrere Datenbanken innerhalb einer Instanz erstellen. Jede Datenbank dient als logische Gruppierung von Sammlungen und bietet eine Grenze für die Organisation und Verwaltung von Ressourcen. Datenbanken helfen, Daten logisch zu trennen und zu verwalten, beispielsweise für verschiedene Anwendungen oder Projekte.
|
||||
|
||||
@@ -206,9 +187,8 @@ Die zentrale Einheit der Datenspeicherung in MongoDB ist die Sammlung, die Dokum
|
||||
|
||||
#### Aufzählung
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# CosmoDB Account
|
||||
## List Azure Cosmos DB database accounts.
|
||||
@@ -235,11 +215,9 @@ az cosmosdb mongodb role definition list --account-name <AccountName> --resource
|
||||
# List all user definitions for MongoDB within an Azure Cosmos DB account
|
||||
az cosmosdb mongodb user definition list --account-name <AccountName> --resource-group <ResourceGroupName>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.CosmosDB
|
||||
|
||||
@@ -271,14 +249,12 @@ Get-AzCosmosDBMongoDBDatabaseThroughput -AccountName <account-name> -ResourceGro
|
||||
Get-AzCosmosDBMongoDBRoleDefinition -AccountName <account-name> -ResourceGroupName <resource-group-name>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
#### Verbindung
|
||||
|
||||
Hier das Passwort, das Sie mit den Schlüsseln oder mit der im Privesc-Abschnitt beschriebenen Methode finden können.
|
||||
{% code overflow="wrap" %}
|
||||
```python
|
||||
from pymongo import MongoClient
|
||||
|
||||
@@ -311,33 +287,29 @@ document = {
|
||||
result = collection.insert_one(document)
|
||||
print(f"Inserted document with ID: {result.inserted_id}")
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
|
||||
* [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
|
||||
* [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
|
||||
* [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
|
||||
- [https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api](https://learn.microsoft.com/en-us/azure/cosmos-db/choose-api)
|
||||
- [https://learn.microsoft.com/en-us/azure/cosmos-db/](https://learn.microsoft.com/en-us/azure/cosmos-db/)
|
||||
- [https://learn.microsoft.com/en-us/azure/cosmos-db/introduction](https://learn.microsoft.com/en-us/azure/cosmos-db/introduction)
|
||||
- [https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli](https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/security/how-to-grant-data-plane-role-based-access?tabs=built-in-definition%2Ccsharp&pivots=azure-interface-cli)
|
||||
|
||||
## Privilegieneskalation
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-cosmosDB-privesc.md" %}
|
||||
[az-cosmosDB-privesc.md](../az-privilege-escalation/az-cosmosDB-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-cosmosDB-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post-Exploitation
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-cosmosDB-post-exploitation.md" %}
|
||||
[az-cosmosDB-post-exploitation.md](../az-post-exploitation/az-sql-post-exploitation.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-sql-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## ToDo
|
||||
|
||||
* Der Rest der DB hier, Tabellen, Cassandra, Gremlin...
|
||||
* Schau dir die Post-Exploitation "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" und Rollendefinitionen an, da hier möglicherweise eine Privilegieneskalation vorliegt
|
||||
* Schau dir Wiederherstellungen an
|
||||
|
||||
|
||||
* Einen Blick auf die Post-Exploitation "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write" && "Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read" und Rollendefinitionen werfen, da hier möglicherweise eine Privilegieneskalation vorliegt
|
||||
* Einen Blick auf Wiederherstellungen werfen
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundlegende Informationen
|
||||
## Grundinformationen
|
||||
|
||||
**Azure Files** ist ein vollständig verwalteter Cloud-Dateispeicherdienst, der gemeinsamen Dateispeicher über die standardmäßigen **SMB (Server Message Block)** und **NFS (Network File System)** Protokolle bereitstellt. Obwohl das Hauptprotokoll SMB ist, werden NFS Azure-Dateifreigaben für Windows nicht unterstützt (laut den [**Docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)). Es ermöglicht Ihnen, hochverfügbare Netzwerkdateifreigaben zu erstellen, die gleichzeitig von mehreren virtuellen Maschinen (VMs) oder lokalen Systemen zugegriffen werden können, was nahtloses Dateifreigeben über verschiedene Umgebungen hinweg ermöglicht.
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
- **Transaktionsoptimiert**: Optimiert für transaktionsintensive Operationen.
|
||||
- **Hot**: Ausgewogen zwischen Transaktionen und Speicherung.
|
||||
- **Cool**: Kostenwirksam für Speicherung.
|
||||
- **Premium:** Hochleistungs-Dateispeicher, optimiert für latenzarme und IOPS-intensive Workloads.
|
||||
- **Premium:** Hochleistungs-Dateispeicher, optimiert für latenzempfindliche und IOPS-intensive Workloads.
|
||||
|
||||
### Backups
|
||||
|
||||
@@ -23,15 +23,15 @@
|
||||
|
||||
### Unterstützte Authentifizierungen über SMB
|
||||
|
||||
- **On-premises AD DS-Authentifizierung**: Es verwendet lokale Active Directory-Anmeldeinformationen, die mit Microsoft Entra ID für identitätsbasierten Zugriff synchronisiert sind. Es erfordert eine Netzwerkverbindung zu lokalem AD DS.
|
||||
- **On-premises AD DS-Authentifizierung**: Es verwendet lokale Active Directory-Anmeldeinformationen, die mit Microsoft Entra ID für identitätsbasierten Zugriff synchronisiert sind. Es erfordert Netzwerkverbindung zu lokalem AD DS.
|
||||
- **Microsoft Entra Domain Services-Authentifizierung**: Es nutzt Microsoft Entra Domain Services (cloudbasiertes AD), um den Zugriff mit Microsoft Entra-Anmeldeinformationen bereitzustellen.
|
||||
- **Microsoft Entra Kerberos für hybride Identitäten**: Es ermöglicht Microsoft Entra-Benutzern, Azure-Dateifreigaben über das Internet mit Kerberos zu authentifizieren. Es unterstützt hybride Microsoft Entra-verbundene oder Microsoft Entra-verbundene VMs, ohne dass eine Verbindung zu lokalen Domänencontrollern erforderlich ist. Es unterstützt jedoch keine cloudbasierten Identitäten.
|
||||
- **AD Kerberos-Authentifizierung für Linux-Clients**: Es ermöglicht Linux-Clients, Kerberos für die SMB-Authentifizierung über lokales AD DS oder Microsoft Entra Domain Services zu verwenden.
|
||||
|
||||
## Aufzählung
|
||||
## Enumeration
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
{{#tabs }}
|
||||
{{#tab name="az" }}
|
||||
```bash
|
||||
# Get storage accounts
|
||||
az storage account list #Get the account name from here
|
||||
@@ -58,9 +58,9 @@ az storage file list --account-name <name> --share-name <share-name> --snapshot
|
||||
# Download snapshot/backup
|
||||
az storage file download-batch -d . --account-name <name> --source <share-name> --snapshot <snapshot-version>
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az PowerShell"}}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-AzStorageAccount
|
||||
|
||||
@@ -81,11 +81,11 @@ Get-AzStorageShare -Context (Get-AzStorageAccount -ResourceGroupName "<resource-
|
||||
Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -StorageAccountName "<storage-account-name>" -StorageAccountKey (Get-AzStorageAccountKey -ResourceGroupName "<resource-group-name>" -Name "<storage-account-name>" | Select-Object -ExpandProperty Value) -SnapshotTime "<snapshot-version>")
|
||||
|
||||
```
|
||||
{{#endtab}}
|
||||
{{#endtabs}}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
> [!NOTE]
|
||||
> Standardmäßig verwendet die `az` CLI einen Kontoschlüssel, um einen Schlüssel zu signieren und die Aktion auszuführen. Um die Berechtigungen des Entra ID-Principals zu verwenden, verwenden Sie die Parameter `--auth-mode login --enable-file-backup-request-intent`.
|
||||
> Standardmäßig verwendet die `az` CLI einen Kontoschlüssel, um einen Schlüssel zu signieren und die Aktion auszuführen. Um die Berechtigungen des Entra ID-Prinzipals zu verwenden, verwenden Sie die Parameter `--auth-mode login --enable-file-backup-request-intent`.
|
||||
|
||||
> [!TIP]
|
||||
> Verwenden Sie den Parameter `--account-key`, um den zu verwendenden Kontoschlüssel anzugeben\
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
### Verschiedene Pläne
|
||||
|
||||
- **Flex Consumption Plan**: Bietet **dynamisches, ereignisgesteuertes Skalieren** mit einer Pay-as-you-go-Preismodell, das das Hinzufügen oder Entfernen von Funktionsinstanzen basierend auf der Nachfrage ermöglicht. Es unterstützt **virtuelles Networking** und **vorab bereitgestellte Instanzen**, um Kaltstarts zu reduzieren, was es für **variable Workloads** geeignet macht, die keine Containerunterstützung benötigen.
|
||||
- **Flex Consumption Plan**: Bietet **dynamisches, ereignisgesteuertes Skalieren** mit einer Pay-as-you-go-Preismodell, das das Hinzufügen oder Entfernen von Funktionsinstanzen basierend auf der Nachfrage ermöglicht. Es unterstützt **virtuelles Networking** und **vorab bereitgestellte Instanzen**, um Kaltstarts zu reduzieren, was es für **variable Workloads** geeignet macht, die keine Containerunterstützung erfordern.
|
||||
- **Traditional Consumption Plan**: Die Standard-Serverless-Option, bei der Sie **nur für Rechenressourcen bezahlen, wenn Funktionen ausgeführt werden**. Es skaliert automatisch basierend auf eingehenden Ereignissen und umfasst **Optimierungen für Kaltstarts**, unterstützt jedoch keine Containerbereitstellungen. Ideal für **intermittierende Workloads**, die automatisches Skalieren erfordern.
|
||||
- **Premium Plan**: Entwickelt für **konstante Leistung**, mit **vorwärmenden Arbeitern**, um Kaltstarts zu eliminieren. Es bietet **erweiterte Ausführungszeiten, virtuelles Networking** und unterstützt **benutzerdefinierte Linux-Images**, was es perfekt für **geschäftskritische Anwendungen** macht, die hohe Leistung und erweiterte Funktionen benötigen.
|
||||
- **Dedicated Plan**: Läuft auf dedizierten virtuellen Maschinen mit **vorhersehbarer Abrechnung** und unterstützt manuelles oder automatisches Skalieren. Es ermöglicht das Ausführen mehrerer Apps im selben Plan, bietet **Rechenisolierung** und gewährleistet **sicheren Netzwerkzugang** über App Service Environments, was es ideal für **langfristige Anwendungen** macht, die eine konsistente Ressourcenzuteilung benötigen.
|
||||
@@ -19,12 +19,12 @@
|
||||
|
||||
### **Speicher-Buckets**
|
||||
|
||||
Beim Erstellen einer neuen nicht containerisierten Function App (aber mit dem Code, der ausgeführt werden soll) werden die **Code- und anderen funktionsbezogenen Daten in einem Speicherkonto gespeichert**. Standardmäßig erstellt die Webkonsole für jede Funktion ein neues Konto, um den Code zu speichern.
|
||||
Beim Erstellen einer neuen nicht containerisierten Function App (aber mit dem Code zum Ausführen) werden die **Code- und anderen funktionsbezogenen Daten in einem Speicherkonto gespeichert**. Standardmäßig erstellt die Webkonsole für jede Funktion ein neues Konto, um den Code zu speichern.
|
||||
|
||||
Darüber hinaus wird der Code im Bucket (in den verschiedenen Formaten, in denen er gespeichert werden kann) geändert, sodass der **Code der App auf den neuen geändert wird und beim nächsten Aufruf der Funktion ausgeführt wird**.
|
||||
|
||||
> [!CAUTION]
|
||||
> Dies ist aus der Perspektive eines Angreifers sehr interessant, da **Schreibzugriff auf diesen Bucket** einem Angreifer ermöglichen würde, **den Code zu kompromittieren und Berechtigungen** für die verwalteten Identitäten innerhalb der Function App zu eskalieren.
|
||||
> Dies ist aus der Perspektive eines Angreifers sehr interessant, da **Schreibzugriff auf diesen Bucket** es einem Angreifer ermöglichen würde, **den Code zu kompromittieren und Berechtigungen** für die verwalteten Identitäten innerhalb der Function App zu eskalieren.
|
||||
>
|
||||
> Mehr dazu im **Abschnitt zur Berechtigungseskalation**.
|
||||
|
||||
@@ -36,7 +36,7 @@ Beachten Sie, dass Funktionen auch die Möglichkeit bieten, den Code an einem en
|
||||
|
||||
Bei Verwendung eines HTTP-Triggers:
|
||||
|
||||
- Es ist möglich, **Zugriff auf eine Funktion von überall im Internet** zu gewähren, ohne eine Authentifizierung zu verlangen, oder den Zugriff IAM-basiert zu gewähren. Es ist jedoch auch möglich, diesen Zugriff einzuschränken.
|
||||
- Es ist möglich, **Zugriff auf eine Funktion von überall im Internet** zu gewähren, ohne eine Authentifizierung zu verlangen, oder den Zugriff IAM-basiert zu gewähren. Obwohl es auch möglich ist, diesen Zugriff einzuschränken.
|
||||
- Es ist auch möglich, **Zugriff auf eine Function App von einem internen Netzwerk (VPC)** zu gewähren oder einzuschränken.
|
||||
|
||||
> [!CAUTION]
|
||||
@@ -44,7 +44,7 @@ Bei Verwendung eines HTTP-Triggers:
|
||||
|
||||
### **Function App-Einstellungen & Umgebungsvariablen**
|
||||
|
||||
Es ist möglich, Umgebungsvariablen innerhalb einer App zu konfigurieren, die sensible Informationen enthalten könnten. Darüber hinaus werden standardmäßig die Umgebungsvariablen **`AzureWebJobsStorage`** und **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (unter anderem) erstellt. Diese sind besonders interessant, da sie **den Kontoschlüssel enthalten, um mit VOLLER Berechtigung auf das Speicherkonto zuzugreifen, das die Daten der Anwendung enthält**. Diese Einstellungen sind auch erforderlich, um den Code aus dem Speicherkonto auszuführen.
|
||||
Es ist möglich, Umgebungsvariablen innerhalb einer App zu konfigurieren, die sensible Informationen enthalten könnten. Darüber hinaus werden standardmäßig die Umgebungsvariablen **`AzureWebJobsStorage`** und **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (unter anderem) erstellt. Diese sind besonders interessant, da sie **den Kontoschlüssel enthalten, um mit VOLLBERECHTIGUNGEN auf das Speicherkonto zuzugreifen, das die Daten der Anwendung enthält**. Diese Einstellungen sind auch erforderlich, um den Code aus dem Speicherkonto auszuführen.
|
||||
|
||||
Diese Umgebungsvariablen oder Konfigurationsparameter steuern auch, wie die Funktion den Code ausführt, zum Beispiel, wenn **`WEBSITE_RUN_FROM_PACKAGE`** existiert, zeigt es die URL an, wo sich der Code der Anwendung befindet.
|
||||
|
||||
@@ -61,7 +61,7 @@ Genau wie [**VMs**](vms/index.html) können Funktionen **verwaltete Identitäten
|
||||
Die **systemzugewiesene** Identität ist eine verwaltete Identität, die **nur die Funktion**, die sie zugewiesen hat, verwenden kann, während die **benutzerzugewiesenen** verwalteten Identitäten verwaltete Identitäten sind, die **von jedem anderen Azure-Dienst verwendet werden können**.
|
||||
|
||||
> [!NOTE]
|
||||
> Genau wie bei [**VMs**](vms/index.html) können Funktionen **1 systemzugewiesene** verwaltete Identität und **mehrere benutzerzugewiesene** haben, daher ist es immer wichtig, zu versuchen, alle zu finden, wenn Sie die Funktion kompromittieren, da Sie möglicherweise Berechtigungen für mehrere verwaltete Identitäten von nur einer Funktion eskalieren können.
|
||||
> Genau wie bei [**VMs**](vms/index.html) können Funktionen **1 systemzugewiesene** verwaltete Identität und **mehrere benutzerzugewiesene** haben, daher ist es immer wichtig, alle zu finden, wenn Sie die Funktion kompromittieren, da Sie möglicherweise Berechtigungen für mehrere verwaltete Identitäten von nur einer Funktion eskalieren können.
|
||||
>
|
||||
> Wenn keine systemzugewiesene verwaltete Identität verwendet wird, aber eine oder mehrere benutzerverwaltete Identitäten an eine Funktion angehängt sind, können Sie standardmäßig kein Token erhalten.
|
||||
|
||||
@@ -84,7 +84,7 @@ Beim Erstellen eines Endpunkts innerhalb einer Funktion mit einem **HTTP-Trigger
|
||||
|
||||
**Arten von Schlüsseln:**
|
||||
|
||||
- **Funktionsschlüssel:** Funktionsschlüssel können entweder standardmäßig oder benutzerdefiniert sein und sind so konzipiert, dass sie ausschließlich den Zugriff auf **spezifische Funktionsendpunkte** innerhalb einer Function App gewähren, was einen feineren Zugriff auf die Endpunkte ermöglicht.
|
||||
- **Funktionsschlüssel:** Funktionsschlüssel können entweder standardmäßig oder benutzerdefiniert sein und sind dafür ausgelegt, den Zugriff ausschließlich auf **bestimmte Funktionsendpunkte** innerhalb einer Function App zu gewähren, was einen feineren Zugriff auf die Endpunkte ermöglicht.
|
||||
- **Host-Schlüssel:** Host-Schlüssel, die ebenfalls standardmäßig oder benutzerdefiniert sein können, gewähren Zugriff auf **alle Funktionsendpunkte innerhalb einer Function App mit FUNCTION-Zugriffslevel**.
|
||||
- **Master-Schlüssel:** Der Master-Schlüssel (`_master`) dient als administrativer Schlüssel, der erhöhte Berechtigungen bietet, einschließlich Zugriff auf alle Funktionsendpunkte (ADMIN-Zugriffslevel eingeschlossen). Dieser **Schlüssel kann nicht widerrufen werden.**
|
||||
- **Systemschlüssel:** Systemschlüssel werden **von bestimmten Erweiterungen verwaltet** und sind erforderlich, um auf Webhook-Endpunkte zuzugreifen, die von internen Komponenten verwendet werden. Beispiele sind der Event Grid-Trigger und Durable Functions, die Systemschlüssel verwenden, um sicher mit ihren jeweiligen APIs zu interagieren.
|
||||
@@ -96,7 +96,7 @@ Beim Erstellen eines Endpunkts innerhalb einer Funktion mit einem **HTTP-Trigger
|
||||
|
||||
### Basis-Authentifizierung
|
||||
|
||||
Genau wie bei App-Diensten unterstützen Funktionen auch die Basis-Authentifizierung, um sich mit **SCM** und **FTP** zu verbinden, um Code mit einem **Benutzernamen und Passwort in einer URL** bereitzustellen, die von Azure bereitgestellt wird. Weitere Informationen dazu finden Sie in:
|
||||
Genau wie in App Services unterstützen Funktionen auch die Basis-Authentifizierung, um sich mit **SCM** und **FTP** zu verbinden, um Code mit einem **Benutzernamen und Passwort in einer URL** bereitzustellen, die von Azure bereitgestellt wird. Weitere Informationen dazu finden Sie in:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
@@ -192,22 +192,21 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
Darüber hinaus wird eine **Managed Identity** erstellt, damit die Github Action aus dem Repository sich damit bei Azure anmelden kann. Dies geschieht durch die Generierung einer föderierten Anmeldeinformation über die **Managed Identity**, die den **Issuer** `https://token.actions.githubusercontent.com` und den **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` ermöglicht.
|
||||
Darüber hinaus wird eine **Managed Identity** erstellt, damit die Github Action aus dem Repository sich damit bei Azure anmelden kann. Dies geschieht durch die Generierung einer föderierten Berechtigung über die **Managed Identity**, die den **Issuer** `https://token.actions.githubusercontent.com` und den **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` ermöglicht.
|
||||
|
||||
> [!CAUTION]
|
||||
> Daher kann jeder, der dieses Repository kompromittiert, die Funktion und die daran angehängten Managed Identities kompromittieren.
|
||||
|
||||
### Containerbasierte Bereitstellungen
|
||||
|
||||
Nicht alle Pläne erlauben die Bereitstellung von Containern, aber für die, die es tun, wird die Konfiguration die URL des Containers enthalten. In der API wird die **`linuxFxVersion`** Einstellung etwas wie: `DOCKER|mcr.microsoft.com/...` haben, während in der Webkonsole die Konfiguration die **Bildeinstellungen** anzeigen wird.
|
||||
Nicht alle Pläne erlauben die Bereitstellung von Containern, aber für die, die es tun, enthält die Konfiguration die URL des Containers. In der API wird die **`linuxFxVersion`**-Einstellung etwas wie `DOCKER|mcr.microsoft.com/...` haben, während in der Webkonsole die Konfiguration die **Bildeinstellungen** anzeigen wird.
|
||||
|
||||
Darüber hinaus wird **kein Quellcode im Speicher**-Konto gespeichert, das mit der Funktion verbunden ist, da dies nicht erforderlich ist.
|
||||
Darüber hinaus **wird kein Quellcode im Speicher**-Konto gespeichert, das mit der Funktion verbunden ist, da dies nicht erforderlich ist.
|
||||
|
||||
## Enumeration
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# List all the functions
|
||||
az functionapp list
|
||||
@@ -253,11 +252,9 @@ curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/func
|
||||
# Get source code
|
||||
az rest --url "https://management.azure.com/<subscription>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
Get-Command -Module Az.Functions
|
||||
|
||||
@@ -273,9 +270,9 @@ Get-AzFunctionAppPlan -ResourceGroupName <String> -Name <String>
|
||||
# Retrieves the app settings for a specific Azure Function App.
|
||||
Get-AzFunctionAppSetting -Name <FunctionAppName> -ResourceGroupName <ResourceGroupName>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
|
||||
## Privilegieneskalation
|
||||
|
||||
|
||||
@@ -23,7 +23,7 @@ oder den Code im Abschnitt "**Logic app code view**" zu überprüfen.
|
||||
|
||||
### SSRF-Schutz
|
||||
|
||||
Selbst wenn Sie die **Logic App anfällig für SSRF** finden, können Sie die Anmeldeinformationen aus den Metadaten nicht abrufen, da Logic Apps dies nicht zulässt.
|
||||
Selbst wenn Sie die **Logic App anfällig für SSRF** finden, können Sie nicht auf die Anmeldeinformationen aus den Metadaten zugreifen, da Logic Apps dies nicht zulässt.
|
||||
|
||||
Zum Beispiel wird etwas wie dies das Token nicht zurückgeben:
|
||||
```bash
|
||||
@@ -35,17 +35,16 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
|
||||
Es gibt mehrere Hosting-Optionen:
|
||||
|
||||
* **Consumption**
|
||||
- **Multi-tenant**: bietet gemeinsame Rechenressourcen, arbeitet in der öffentlichen Cloud und folgt einem Preismodell pro Operation. Dies ist ideal für leichte und kosteneffektive Workloads.
|
||||
- **Multi-tenant**: bietet gemeinsame Rechenressourcen, arbeitet in der Public Cloud und folgt einem Preismodell, das pro Operation abgerechnet wird. Dies ist ideal für leichte und kosteneffiziente Workloads.
|
||||
* **Standard**
|
||||
- **Workflow Service Plan**: dedizierte Rechenressourcen mit VNET-Integration für Networking und Gebühren pro Workflow-Service-Plan-Instanz. Es ist geeignet für anspruchsvollere Workloads, die mehr Kontrolle erfordern.
|
||||
- **App Service Environment V3**: dedizierte Rechenressourcen mit vollständiger Isolation und Skalierbarkeit. Es integriert sich auch mit VNET für Networking und verwendet ein Preismodell basierend auf App Service-Instanzen innerhalb der Umgebung. Dies ist ideal für unternehmensgroße Anwendungen, die hohe Isolation benötigen.
|
||||
- **App Service Environment V3**: dedizierte Rechenressourcen mit vollständiger Isolation und Skalierbarkeit. Es integriert sich auch mit VNET für Networking und verwendet ein Preismodell, das auf App Service-Instanzen innerhalb der Umgebung basiert. Dies ist ideal für unternehmensgroße Anwendungen, die hohe Isolation benötigen.
|
||||
- **Hybrid**: entworfen für lokale Verarbeitung und Multi-Cloud-Unterstützung. Es ermöglicht kundenverwaltete Rechenressourcen mit lokalem Netzwerkzugang und nutzt Kubernetes Event-Driven Autoscaling (KEDA).
|
||||
|
||||
### Enumeration
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# List
|
||||
az logic workflow list --resource-group <ResourceGroupName>
|
||||
@@ -108,11 +107,9 @@ az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
# List all application settings for a specific Logic App
|
||||
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.LogicApp
|
||||
|
||||
@@ -137,11 +134,8 @@ Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName
|
||||
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Integrationskonten
|
||||
**Integrationskonten** sind eine Funktion von Azure Logic Apps. Integrationskonten werden verwendet, um unternehmensweite Integrationen zu erleichtern, indem sie erweiterte B2B-Funktionen wie EDI, AS2 und XML-Schema-Management ermöglichen. Integrationskonten sind ein Container in Azure, der die folgenden Artefakte speichert, die für Logic Apps verwendet werden:
|
||||
@@ -150,16 +144,15 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
|
||||
* Maps: Konfigurieren Sie XSLT-basierte Transformationen, um Datenformate innerhalb Ihrer Integrations-Workflows zu konvertieren.
|
||||
* Assemblies: Verwaltet Integrationskonten-Assemblies, um Logik und Datenverarbeitung zu optimieren.
|
||||
* Zertifikate: Verwaltet Zertifikate zur Verschlüsselung und Signierung von Nachrichten, um eine sichere Kommunikation zu gewährleisten.
|
||||
* Partner: Verwaltet Informationen über Handelspartner für B2B-Transaktionen und ermöglicht nahtlose Integrationen.
|
||||
* Partner: Verwaltet Informationen zu Handelspartnern für B2B-Transaktionen und ermöglicht nahtlose Integrationen.
|
||||
* Vereinbarungen: Konfigurieren Sie Regeln und Einstellungen für den Datenaustausch mit Handelspartnern (z. B. EDI, AS2).
|
||||
* Batch-Konfigurationen: Verwaltet Batch-Verarbeitungs-Konfigurationen, um Nachrichten effizient zu gruppieren und zu verarbeiten.
|
||||
* RosettaNet PIP: Konfigurieren Sie RosettaNet Partner Interface Processes (PIPs), um die B2B-Kommunikation zu standardisieren.
|
||||
|
||||
#### Aufzählung
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# Integration account
|
||||
az logic integration-account list --resource-group <resource-group-name>
|
||||
@@ -219,11 +212,9 @@ az logic integration-account assembly show \
|
||||
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
Get-Command -Module Az.LogicApp
|
||||
|
||||
@@ -254,23 +245,22 @@ Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -Integr
|
||||
# Retrieve details of a specific schema in an integration account
|
||||
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
|
||||
## Privilegienerweiterung
|
||||
## Privilegienausnutzung
|
||||
|
||||
Gleich wie bei Logic Apps Privesc:
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-logic-apps-privesc.md" %}
|
||||
[az-logic-apps-privesc.md](../az-privilege-escalation/az-logic-apps-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-logic-apps-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post-Exploitation
|
||||
## Nach der Ausnutzung
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-logic-apps-post-exploitation.md" %}
|
||||
[az-logic-apps-post-exploitation.md](../az-post-exploitation/az-logic-apps-post-exploitation.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-logic-apps-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
Azure Database for MySQL ist ein vollständig verwalteter relationaler Datenbankdienst, der auf der MySQL Community Edition basiert und darauf ausgelegt ist, Skalierbarkeit, Sicherheit und Flexibilität für verschiedene Anwendungsbedürfnisse zu bieten. Es gibt zwei verschiedene Bereitstellungsmodelle:
|
||||
|
||||
* **Single Server** (ist auf dem Rückzug):
|
||||
- Optimiert für kosteneffektive und einfach zu verwaltende MySQL-Bereitstellungen.
|
||||
- Optimiert für kosteneffiziente und einfach zu verwaltende MySQL-Bereitstellungen.
|
||||
- Zu den Funktionen gehören automatisierte Backups, hohe Verfügbarkeit und grundlegende Überwachung.
|
||||
- Ideal für Anwendungen mit vorhersehbaren Arbeitslasten.
|
||||
* **Flexible Server**:
|
||||
@@ -16,16 +16,15 @@ Azure Database for MySQL ist ein vollständig verwalteter relationaler Datenbank
|
||||
- Bietet Stop/Start-Funktionalität zur Kostensenkung.
|
||||
|
||||
### Hauptmerkmale
|
||||
* **Serververwaltung**: Die **ad-admin**-Funktion ermöglicht die Verwaltung von Azure Active Directory (AAD)-Administratoren für MySQL-Server, wodurch die Kontrolle über den administrativen Zugriff über AAD-Anmeldeinformationen bereitgestellt wird, während die **identity**-Funktion die Zuweisung und Verwaltung von Azure Managed Identities ermöglicht, die eine sichere, anmeldefreie Authentifizierung für den Zugriff auf Azure-Ressourcen bieten.
|
||||
* **Serververwaltung**: Die **ad-admin**-Funktion ermöglicht die Verwaltung von Azure Active Directory (AAD)-Administratoren für MySQL-Server und bietet Kontrolle über den administrativen Zugriff über AAD-Anmeldeinformationen, während die **identity**-Funktion die Zuweisung und Verwaltung von Azure Managed Identities ermöglicht, die eine sichere, anmeldeinformationsfreie Authentifizierung für den Zugriff auf Azure-Ressourcen bieten.
|
||||
* **Lebenszyklusverwaltung**: Optionen zum Starten oder Stoppen eines Servers, Löschen einer flexiblen Serverinstanz, Neustarten eines Servers, um Konfigurationsänderungen schnell anzuwenden, und Warten, um sicherzustellen, dass ein Server bestimmte Bedingungen erfüllt, bevor mit Automatisierungsskripten fortgefahren wird.
|
||||
* **Sicherheit und Netzwerk**: kann Server-Firewallregeln für den sicheren Datenbankzugriff verwalten und virtuelle Netzwerk-Konfigurationen nach Bedarf trennen.
|
||||
* **Datenschutz und Backup**: umfasst Optionen zur Verwaltung von flexiblen Server-Backups für die Datenwiederherstellung, Durchführung von Geo-Restore zur Wiederherstellung eines Servers in einer anderen Region, Export von Server-Backups zur externen Nutzung (in der Vorschau) und Wiederherstellung eines Servers aus einem Backup zu einem bestimmten Zeitpunkt.
|
||||
|
||||
### Aufzählung
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# List all flexible-servers
|
||||
az mysql flexible-server db list --resource-group <resource-group-name>
|
||||
@@ -55,11 +54,9 @@ az mysql flexible-server maintenance list --resource-group <resource-group-name>
|
||||
az mysql flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.MySql
|
||||
|
||||
@@ -95,15 +92,12 @@ Get-AzMySqlFlexibleServerMaintenanceWindow -ResourceGroupName <resource-group-na
|
||||
# List log files for a server
|
||||
Get-AzMySqlFlexibleServerLog -ResourceGroupName <resource-group-name> -ServerName <server_name>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Verbindung
|
||||
|
||||
Mit der Erweiterung rdbms-connect können Sie auf die Datenbank zugreifen mit:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az mysql flexible-server connect -n <server-name> -u <username> -p <password> --interactive
|
||||
|
||||
@@ -116,17 +110,11 @@ az mysql flexible-server execute \
|
||||
--querytext "SELECT * FROM <table-name>;"
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Oder mit dem MySQL-nativen Erweiterungs-Plugin
|
||||
{% code overflow="wrap" %}
|
||||
Oder mit dem MySQL-Native-Extension-Plugin
|
||||
```bash
|
||||
mysql -h <server-name>.mysql.database.azure.com -P 3306 -u <username> -p
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Außerdem können Sie Abfragen mit GitHub ausführen, aber das Passwort und der Benutzer sind ebenfalls erforderlich. Sie müssen eine SQL-Datei mit der auszuführenden Abfrage einrichten und dann:
|
||||
{% code overflow="wrap" %}
|
||||
Außerdem können Sie Abfragen mit GitHub ausführen, aber das Passwort und der Benutzer sind ebenfalls erforderlich. Sie müssen eine SQL-Datei mit der auszuführenden Abfrage einrichten und dann:
|
||||
```bash
|
||||
# Setup
|
||||
az mysql flexible-server deploy setup \
|
||||
@@ -145,22 +133,20 @@ az mysql flexible-server deploy run \
|
||||
--action-name <action-name> \
|
||||
--branch <branch-name>
|
||||
```
|
||||
{% endcode %}
|
||||
## Privilegienerhöhung
|
||||
|
||||
## Privilegienerweiterung
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-mysql-privesc.md" %}
|
||||
[az-mysql-privesc.md](../az-privilege-escalation/az-mysql-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-mysql-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Nach der Ausnutzung
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-mysql-post-exploitation.md" %}
|
||||
[az-sql-mysql-exploitation.md](../az-post-exploitation/az-mysql-post-exploitation.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-mysql-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## ToDo
|
||||
|
||||
* Suchen Sie nach einer Möglichkeit, mit mysql flexible-server als Admin zuzugreifen, um zu überprüfen, ob es sich um eine Privilegienerweiterungsmethode handelt
|
||||
* Suchen Sie nach einer Möglichkeit, mit mysql flexible-server ad-admin zuzugreifen, um zu überprüfen, ob es sich um eine Privilegienerhöhung handelt
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
**Azure Database for PostgreSQL** ist ein vollständig verwalteter **relationaler Datenbankdienst, der auf der PostgreSQL** Community Edition basiert. Er wurde entwickelt, um Skalierbarkeit, Sicherheit und Flexibilität für unterschiedliche Anwendungsbedürfnisse zu bieten. Ähnlich wie Azure MySQL bietet PostgreSQL zwei Bereitstellungsmodelle:
|
||||
|
||||
* **Single Server** (auf dem Rückzugspfad):
|
||||
- Optimiert für einfache, kosteneffiziente PostgreSQL-Bereitstellungen.
|
||||
- Optimiert für einfache, kosteneffektive PostgreSQL-Bereitstellungen.
|
||||
- Bietet automatisierte Backups, grundlegende Überwachung und hohe Verfügbarkeit.
|
||||
- Ideal für Anwendungen mit vorhersehbaren Arbeitslasten.
|
||||
* **Flexible Server**:
|
||||
- Bietet mehr Kontrolle über Datenbankverwaltung und -konfiguration.
|
||||
- Bietet mehr Kontrolle über Datenbankmanagement und -konfiguration.
|
||||
- Unterstützt hohe Verfügbarkeit, sowohl in derselben Zone als auch über Zonen hinweg.
|
||||
- Bietet elastische Skalierung, automatisierte Wartung und kostensparende Funktionen.
|
||||
- Ermöglicht das Starten und Stoppen des Servers zur Kostenoptimierung.
|
||||
@@ -18,17 +18,16 @@
|
||||
### Hauptmerkmale
|
||||
|
||||
* **Benutzerdefinierte Wartungsfenster**: Planen Sie Updates, um Störungen zu minimieren.
|
||||
* **Aktive Überwachung**: Zugriff auf detaillierte Metriken und Protokolle zur Verfolgung und Verbesserung der Datenbankleistung.
|
||||
* **Aktive Überwachung**: Greifen Sie auf detaillierte Metriken und Protokolle zu, um die Datenbankleistung zu verfolgen und zu verbessern.
|
||||
* **Server Stop/Start**: Benutzer können den Server stoppen und starten.
|
||||
* **Automatische Backups**: Eingebaute tägliche Backups mit konfigurierbaren Aufbewahrungsfristen von bis zu 35 Tagen.
|
||||
* **Rollenbasierter Zugriff**: Steuern Sie Benutzerberechtigungen und administrativen Zugriff über Azure Active Directory.
|
||||
* **Sicherheit und Netzwerk**: Kann Firewall-Regeln für den sicheren Datenbankzugriff verwalten und virtuelle Netzwerk-Konfigurationen nach Bedarf trennen.
|
||||
|
||||
### Enumeration
|
||||
### Aufzählung
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# List servers in a resource group
|
||||
az postgres flexible-server list --resource-group <resource-group-name>
|
||||
@@ -64,11 +63,9 @@ az postgres flexible-server maintenance list --resource-group <resource-group-na
|
||||
az postgres flexible-server server-logs list --resource-group <resource-group-name> --server-name <server_name>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
Get-Command -Module Az.PostgreSql
|
||||
|
||||
@@ -91,15 +88,12 @@ Get-AzPostgreSqlFlexibleServerLocationBasedCapability -Location <location>
|
||||
Get-AzPostgreSqlServer -ResourceGroupName <resource-group-name>
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Verbindung
|
||||
|
||||
Mit der Erweiterung rdbms-connect können Sie auf die Datenbank zugreifen mit:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
az postgres flexible-server connect -n <server-name> -u <username> -p <password> --interactive
|
||||
|
||||
@@ -112,36 +106,31 @@ az postgres flexible-server execute \
|
||||
--querytext "SELECT * FROM <table-name>;"
|
||||
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
Oder
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser <database-name>
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
## Referenzen
|
||||
|
||||
* [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
|
||||
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
|
||||
* [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/postgresql/](https://learn.microsoft.com/en-us/azure/postgresql/)
|
||||
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/service-overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview](https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/overview)
|
||||
|
||||
## Privilegieneskalation
|
||||
|
||||
{% content-ref url="../az-privilege-escalation/az-postgresql-privesc.md" %}
|
||||
[az-postgresql-privesc.md](../az-privilege-escalation/az-postgresql-privesc.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-postgresql-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## Post-Exploitation
|
||||
|
||||
{% content-ref url="../az-post-exploitation/az-postgresql-post-exploitation.md" %}
|
||||
[az-postgresql-post-exploitation.md](../az-post-exploitation/az-postgresql-post-exploitation.md)
|
||||
{% endcontent-ref %}
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-postgresql-post-exploitation.md
|
||||
{{#endref}}
|
||||
|
||||
## ToDo
|
||||
|
||||
* Eine Möglichkeit suchen, um mit ad-admin zuzugreifen, um zu überprüfen, ob es sich um eine Privilegieneskalationsmethode handelt
|
||||
* Suche nach einer Möglichkeit, mit ad-admin zuzugreifen, um zu überprüfen, ob es sich um eine Privilegieneskalationsmethode handelt
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,27 +4,27 @@
|
||||
|
||||
## Grundinformationen
|
||||
|
||||
Azure Queue Storage ist ein Dienst in Microsofts Azure-Cloud-Plattform, der für die Nachrichtenwarteschlange zwischen Anwendungskomponenten entwickelt wurde, **um asynchrone Kommunikation und Entkopplung zu ermöglichen**. Es ermöglicht Ihnen, eine unbegrenzte Anzahl von Nachrichten zu speichern, jede bis zu 64 KB groß, und unterstützt Operationen wie das Erstellen und Löschen von Warteschlangen, das Hinzufügen, Abrufen, Aktualisieren und Löschen von Nachrichten sowie das Verwalten von Metadaten und Zugriffsrichtlinien. Während es typischerweise Nachrichten in einer First-In-First-Out (FIFO)-Reihenfolge verarbeitet, wird strikte FIFO nicht garantiert.
|
||||
Azure Queue Storage ist ein Dienst in Microsofts Azure-Cloud-Plattform, der für die Nachrichtenwarteschlange zwischen Anwendungskomponenten entwickelt wurde, **um asynchrone Kommunikation und Entkopplung zu ermöglichen**. Es ermöglicht Ihnen, eine unbegrenzte Anzahl von Nachrichten zu speichern, von denen jede bis zu 64 KB groß sein kann, und unterstützt Operationen wie das Erstellen und Löschen von Warteschlangen, das Hinzufügen, Abrufen, Aktualisieren und Löschen von Nachrichten sowie das Verwalten von Metadaten und Zugriffsrichtlinien. Während es typischerweise Nachrichten in einer First-In-First-Out (FIFO)-Reihenfolge verarbeitet, wird strikte FIFO nicht garantiert.
|
||||
|
||||
### Aufzählung
|
||||
### Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Az Cli" }}
|
||||
```bash
|
||||
# You need to know the --account-name of the storage (az storage account list)
|
||||
az storage queue list --account-name <storage_account>
|
||||
az storage queue list --account-name <storage_account> # --auth-mode login
|
||||
|
||||
# Queue Metadata
|
||||
az storage queue metadata show --name <queue_name> --account-name <storage_account>
|
||||
az storage queue metadata show --name <queue_name> --account-name <storage_account> # --auth-mode login
|
||||
|
||||
#Get ACL
|
||||
az storage queue policy list --queue-name <queue_name> --account-name <storage_account>
|
||||
az storage queue policy list --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
|
||||
|
||||
# Get Messages (getting a message deletes it)
|
||||
az storage message get --queue-name <queue_name> --account-name <storage_account>
|
||||
az storage message get --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
|
||||
|
||||
# Peek Messages
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account>
|
||||
az storage message peek --queue-name <queue_name> --account-name <storage_account> # --auth-mode login
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
@@ -64,13 +64,13 @@ $queueMessage.Value
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### Privilegienerweiterung
|
||||
### Privilegieneskalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-queue-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
### Nach der Ausnutzung
|
||||
### Post-Exploitation
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-queue-post-exploitation.md
|
||||
|
||||
@@ -30,7 +30,7 @@ Einige erweiterte Funktionen sind:
|
||||
- **Transaktionen**: Gruppiert Operationen in atomare Ausführung.
|
||||
- **Filter & Aktionen**: Wendet Regeln an, um Nachrichten zu filtern oder zu annotieren.
|
||||
- **Automatisches Löschen bei Inaktivität**: Löscht Warteschlangen nach Inaktivität (min: 5 Minuten).
|
||||
- **Duplikaterkennung**: Entfernt doppelte Nachrichten während der erneuten Übertragung.
|
||||
- **Duplikaterkennung**: Entfernt doppelte Nachrichten während der erneuten Zustellung.
|
||||
- **Batch-Löschung**: Löscht im Bulk abgelaufene oder unnötige Nachrichten.
|
||||
|
||||
### Autorisierungsregel / SAS-Richtlinie
|
||||
@@ -51,9 +51,8 @@ sku, autorisierungsregel,
|
||||
|
||||
### Enumeration
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="az cli" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tabs }}
|
||||
{{#tab name="az cli" }}
|
||||
```bash
|
||||
# Queue Enumeration
|
||||
az servicebus queue list --resource-group <MyResourceGroup> --namespace-name <MyNamespace>
|
||||
@@ -81,11 +80,9 @@ az servicebus queue authorization-rule list --resource-group <MyResourceGroup> -
|
||||
az servicebus topic authorization-rule list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --topic-name <MyTopic>
|
||||
az servicebus namespace authorization-rule keys list --resource-group <MyResourceGroup> --namespace-name <MyNamespace> --name <MyAuthRule>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{{#endtab }}
|
||||
|
||||
{% tab title="Az PowerShell" %}
|
||||
{% code overflow="wrap" %}
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
Get-Command -Module Az.ServiceBus
|
||||
|
||||
@@ -128,12 +125,11 @@ Get-AzServiceBusSubscription -ResourceGroupName <ResourceGroupName> -NamespaceNa
|
||||
# Retrieves details of a specified topic in a Service Bus namespace.
|
||||
Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <NamespaceName>
|
||||
```
|
||||
{% endcode %}
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
|
||||
### Privilegienerweiterung
|
||||
### Privilegieneskalation
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-servicebus-privesc.md
|
||||
@@ -147,8 +143,8 @@ Get-AzServiceBusTopic -ResourceGroupName <ResourceGroupName> -NamespaceName <Nam
|
||||
|
||||
## Referenzen
|
||||
|
||||
- https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0
|
||||
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview
|
||||
- https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli
|
||||
- [https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0](https://learn.microsoft.com/en-us/powershell/module/az.servicebus/?view=azps-13.0.0)
|
||||
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-messaging-overview)
|
||||
- [https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli](https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-quickstart-cli)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Azure Netzwerk Grundinformationen
|
||||
|
||||
Azure-Netzwerke enthalten **verschiedene Entitäten und Möglichkeiten, sie zu konfigurieren.** Sie finden eine kurze **Beschreibung,** **Beispiele** und **Aufzählungs**befehle der verschiedenen Azure-Netzwerkinhalte in:
|
||||
Azure-Netzwerke enthalten **verschiedene Entitäten und Möglichkeiten, sie zu konfigurieren.** Sie finden eine kurze **Beschreibung,** **Beispiele** und **Aufzählungs**befehle der verschiedenen Azure-Netzwerkinstanzen in:
|
||||
|
||||
{{#ref}}
|
||||
az-azure-network.md
|
||||
@@ -76,10 +76,10 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## Bilder, Galerie-Bilder & Wiederherstellungspunkte
|
||||
|
||||
Ein **VM-Image** ist eine Vorlage, die das Betriebssystem, die Anwendungseinstellungen und das Dateisystem enthält, die benötigt werden, um **eine neue virtuelle Maschine (VM)** zu **erstellen**. Der Unterschied zwischen einem Image und einem Festplattensnapshot besteht darin, dass ein Festplattensnapshot eine schreibgeschützte, zeitpunktbezogene Kopie einer einzelnen verwalteten Festplatte ist, die hauptsächlich für Backup oder Fehlersuche verwendet wird, während ein Image **mehrere Festplatten enthalten kann und als Vorlage für die Erstellung neuer VMs** dient.\
|
||||
Ein **VM-Image** ist eine Vorlage, die das Betriebssystem, die Anwendungseinstellungen und das Dateisystem enthält, die benötigt werden, um **eine neue virtuelle Maschine (VM)** zu erstellen. Der Unterschied zwischen einem Image und einem Festplattensnapshot besteht darin, dass ein Festplattensnapshot eine schreibgeschützte, zeitpunktbezogene Kopie einer einzelnen verwalteten Festplatte ist, die hauptsächlich für Backup oder Fehlersuche verwendet wird, während ein Image **mehrere Festplatten enthalten kann und als Vorlage für die Erstellung neuer VMs** dient.\
|
||||
Bilder können im **Bilder-Bereich** von Azure oder in **Azure-Compute-Galerien** verwaltet werden, die es ermöglichen, **Versionen** zu erstellen und das Image tenantübergreifend zu **teilen** oder sogar öffentlich zu machen.
|
||||
|
||||
Ein **Wiederherstellungspunkt** speichert die VM-Konfiguration und **zeitpunktbezogene** anwendungs-konsistente **Snapshots aller verwalteten Festplatten**, die an die VM angeschlossen sind. Er ist mit der VM verbunden und hat den Zweck, diese VM auf den Zustand zu bringen, in dem sie zu diesem spezifischen Zeitpunkt war.
|
||||
Ein **Wiederherstellungspunkt** speichert die VM-Konfiguration und **zeitpunktbezogene** anwendungskonsistente **Snapshots aller verwalteten Festplatten**, die an die VM angeschlossen sind. Er ist mit der VM verbunden und dient dem Zweck, diese VM auf den Zustand zu bringen, in dem sie sich zu diesem spezifischen Zeitpunkt befand.
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -148,9 +148,9 @@ Aus den [**Docs**](https://learn.microsoft.com/en-us/azure/site-recovery/site-re
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
Azure Bastion ermöglicht sicheren und nahtlosen **Remote Desktop Protocol (RDP)** und **Secure Shell (SSH)** Zugriff auf Ihre virtuellen Maschinen (VMs) direkt über das Azure-Portal oder über eine Jump-Box. Durch **die Eliminierung der Notwendigkeit für öffentliche IP-Adressen** auf Ihren VMs.
|
||||
Azure Bastion ermöglicht sicheren und nahtlosen **Remote Desktop Protocol (RDP)** und **Secure Shell (SSH)** Zugriff auf Ihre virtuellen Maschinen (VMs) direkt über das Azure-Portal oder über eine Jump-Box. Durch **Beseitigung der Notwendigkeit für öffentliche IP-Adressen** auf Ihren VMs.
|
||||
|
||||
Der Bastion implementiert ein Subnetz namens **`AzureBastionSubnet`** mit einer `/26` Netzmaske im VNet, in dem er arbeiten muss. Dann ermöglicht es, **eine Verbindung zu internen VMs über den Browser** unter Verwendung von `RDP` und `SSH`, wodurch Ports der VMs nicht ins Internet exponiert werden. Es kann auch als **Jump-Host** fungieren.
|
||||
Der Bastion implementiert ein Subnetz namens **`AzureBastionSubnet`** mit einer `/26` Netzmaske im VNet, in dem er arbeiten muss. Dann ermöglicht es, **eine Verbindung zu internen VMs über den Browser** unter Verwendung von `RDP` und `SSH`, wodurch Ports der VMs nicht dem Internet ausgesetzt werden. Es kann auch als **Jump-Host** fungieren.
|
||||
|
||||
Um alle Azure Bastion-Hosts in Ihrem Abonnement aufzulisten und über diese eine Verbindung zu VMs herzustellen, können Sie die folgenden Befehle verwenden:
|
||||
|
||||
@@ -191,15 +191,18 @@ Get-AzBastion
|
||||
|
||||
Der Azure Instance Metadata Service (IMDS) **stellt Informationen über laufende virtuelle Maschineninstanzen bereit**, um deren Verwaltung und Konfiguration zu unterstützen. Er bietet Details wie SKU, Speicher, Netzwerkkonfigurationen und Informationen über bevorstehende Wartereignisse über **REST API, die unter der nicht routbaren IP-Adresse 169.254.169.254** verfügbar ist, die nur von innerhalb der VM zugänglich ist. Die Kommunikation zwischen der VM und IMDS bleibt innerhalb des Hosts, was einen sicheren Zugriff gewährleistet. Bei der Abfrage von IMDS sollten HTTP-Clients innerhalb der VM Web-Proxy-Server umgehen, um eine ordnungsgemäße Kommunikation sicherzustellen.
|
||||
|
||||
Darüber hinaus muss die HTTP-Anfrage, um den Metadaten-Endpunkt zu kontaktieren, den Header **`Metadata: true`** enthalten und darf nicht den Header **`X-Forwarded-For`** haben.
|
||||
Darüber hinaus muss die HTTP-Anfrage, um den Metadatenendpunkt zu kontaktieren, den Header **`Metadata: true`** enthalten und darf nicht den Header **`X-Forwarded-For`** haben.
|
||||
|
||||
Überprüfen Sie, wie man es auflistet in:
|
||||
Überprüfen Sie, wie Sie es auflisten können in:
|
||||
|
||||
{{#ref}}
|
||||
https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm
|
||||
{{#endref}}
|
||||
|
||||
## VM-Auflistung
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
```bash
|
||||
# VMs
|
||||
## List all VMs and get info about one
|
||||
@@ -335,7 +338,9 @@ az resource list --resource-type "Microsoft.Compute/virtualMachines" --query "[]
|
||||
# List all available run commands for virtual machines
|
||||
az vm run-command list --output table
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az Powershell" }}
|
||||
```bash
|
||||
# Get readable VMs
|
||||
Get-AzVM | fl
|
||||
@@ -427,13 +432,16 @@ Get-AzStorageAccount
|
||||
Get-AzVMExtension -VMName <VmName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
```
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
## Codeausführung in VMs
|
||||
|
||||
### VM-Erweiterungen
|
||||
|
||||
Azure VM-Erweiterungen sind kleine Anwendungen, die **Konfiguration nach der Bereitstellung** und Automatisierungsaufgaben auf Azure-virtuellen Maschinen (VMs) bereitstellen.
|
||||
|
||||
Dies würde es ermöglichen, **willkürlichen Code innerhalb von VMs auszuführen**.
|
||||
Dies würde es ermöglichen, **beliebigen Code innerhalb von VMs auszuführen**.
|
||||
|
||||
Die erforderliche Berechtigung ist **`Microsoft.Compute/virtualMachines/extensions/write`**.
|
||||
|
||||
@@ -539,7 +547,7 @@ Die erforderliche Berechtigung ist weiterhin **`Microsoft.Compute/virtualMachine
|
||||
|
||||
<summary>VMAccess-Erweiterung</summary>
|
||||
|
||||
Diese Erweiterung ermöglicht es, das Passwort von Benutzern innerhalb von Windows-VMs zu ändern (oder zu erstellen, wenn es nicht existiert).
|
||||
Diese Erweiterung ermöglicht es, das Passwort (oder zu erstellen, wenn es nicht existiert) von Benutzern innerhalb von Windows-VMs zu ändern.
|
||||
```bash
|
||||
# Run VMAccess extension to reset the password
|
||||
$cred=Get-Credential # Username and password to reset (if it doesn't exist it'll be created). "Administrator" username is allowed to change the password
|
||||
@@ -627,7 +635,7 @@ Dies sind die Pfade, wo die Anwendungen im Dateisystem heruntergeladen werden:
|
||||
> [!CAUTION]
|
||||
> Es ist möglich, **einzelne Apps und Galerien mit anderen Abonnements oder Mandanten zu teilen**. Was sehr interessant ist, da es einem Angreifer ermöglichen könnte, eine Anwendung zu hintertüren und zu anderen Abonnements und Mandanten zu pivotieren.
|
||||
|
||||
Aber es **gibt keinen "Marktplatz" für VM-Apps** wie für Erweiterungen.
|
||||
Aber es **gibt keinen "Marktplatz" für VM-Apps** wie es für Erweiterungen gibt.
|
||||
|
||||
Die erforderlichen Berechtigungen sind:
|
||||
|
||||
@@ -721,11 +729,11 @@ az vm application set \
|
||||
|
||||
### Benutzerdaten
|
||||
|
||||
Dies sind **persistente Daten**, die jederzeit vom Metadaten-Endpunkt abgerufen werden können. Beachten Sie, dass in Azure Benutzerdaten sich von AWS und GCP unterscheiden, da **wenn Sie hier ein Skript platzieren, es standardmäßig nicht ausgeführt wird**.
|
||||
Dies sind **persistente Daten**, die jederzeit über den Metadaten-Endpunkt abgerufen werden können. Beachten Sie, dass in Azure Benutzerdaten sich von AWS und GCP unterscheiden, da **wenn Sie hier ein Skript platzieren, es standardmäßig nicht ausgeführt wird**.
|
||||
|
||||
### Benutzerspezifische Daten
|
||||
|
||||
Es ist möglich, einige Daten an die VM zu übergeben, die an erwarteten Pfaden gespeichert werden:
|
||||
Es ist möglich, einige Daten an die VM zu übergeben, die an den erwarteten Pfaden gespeichert werden:
|
||||
|
||||
- In **Windows** werden benutzerspezifische Daten in `%SYSTEMDRIVE%\AzureData\CustomData.bin` als Binärdatei abgelegt und nicht verarbeitet.
|
||||
- In **Linux** wurden sie in `/var/lib/waagent/ovf-env.xml` gespeichert und jetzt werden sie in `/var/lib/waagent/CustomData/ovf-env.xml` gespeichert.
|
||||
|
||||
@@ -9,10 +9,10 @@ Darüber hinaus ist es möglich, VNets mit anderen VNets und mit lokalen Netzwer
|
||||
|
||||
## Virtuelles Netzwerk (VNET) & Subnetze
|
||||
|
||||
Ein Azure Virtual Network (VNet) ist eine Darstellung Ihres eigenen Netzwerks in der Cloud, die **logische Isolation** innerhalb der Azure-Umgebung bietet, die Ihrer Abonnements zugeordnet ist. VNets ermöglichen es Ihnen, virtuelle private Netzwerke (VPNs) in Azure bereitzustellen und zu verwalten, die Ressourcen wie virtuelle Maschinen (VMs), Datenbanken und Anwendungsdienste hosten. Sie bieten **vollständige Kontrolle über Netzwerkeinstellungen**, einschließlich IP-Adressbereiche, Erstellung von Subnetzen, Routing-Tabellen und Netzwerk-Gateways.
|
||||
Ein Azure Virtual Network (VNet) ist eine Darstellung Ihres eigenen Netzwerks in der Cloud, die **logische Isolation** innerhalb der Azure-Umgebung bietet, die Ihrer Abonnements zugeordnet ist. VNets ermöglichen es Ihnen, virtuelle private Netzwerke (VPNs) in Azure bereitzustellen und zu verwalten, die Ressourcen wie virtuelle Maschinen (VMs), Datenbanken und Anwendungsdienste hosten. Sie bieten **vollständige Kontrolle über Netzwerkeinstellungen**, einschließlich IP-Adressbereiche, Erstellung von Subnetzen, Routentabellen und Netzwerk-Gateways.
|
||||
|
||||
**Subnetze** sind Unterteilungen innerhalb eines VNet, die durch spezifische **IP-Adressbereiche** definiert sind. Durch die Segmentierung eines VNet in mehrere Subnetze können Sie Ressourcen gemäß Ihrer Netzwerkarchitektur organisieren und sichern.\
|
||||
Standardmäßig können alle Subnetze innerhalb des gleichen Azure Virtual Network (VNet) **miteinander kommunizieren**, ohne Einschränkungen.
|
||||
Standardmäßig können alle Subnetze innerhalb desselben Azure Virtual Network (VNet) **miteinander kommunizieren**, ohne Einschränkungen.
|
||||
|
||||
**Beispiel:**
|
||||
|
||||
@@ -91,19 +91,20 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
|
||||
|
||||
## Azure Firewall
|
||||
|
||||
Azure Firewall ist ein **verwalteter Netzwerk-Sicherheitsdienst** in Azure, der Cloud-Ressourcen schützt, indem er den Datenverkehr inspiziert und kontrolliert. Es handelt sich um eine **zustandsbehaftete Firewall**, die den Datenverkehr basierend auf Regeln für die Schichten 3 bis 7 filtert und die Kommunikation sowohl **innerhalb von Azure** (East-West-Datenverkehr) als auch **zu/von externen Netzwerken** (North-South-Datenverkehr) unterstützt. Bereitgestellt auf der **Virtual Network (VNet)-Ebene**, bietet es zentralen Schutz für alle Subnetze im VNet. Azure Firewall skaliert automatisch, um den Anforderungen des Datenverkehrs gerecht zu werden, und gewährleistet hohe Verfügbarkeit, ohne dass eine manuelle Einrichtung erforderlich ist.
|
||||
Azure Firewall ist ein **verwalteter Netzwerk-Sicherheitsdienst** in Azure, der Cloud-Ressourcen schützt, indem er den Datenverkehr inspiziert und kontrolliert. Es handelt sich um eine **zustandsbehaftete Firewall**, die den Datenverkehr basierend auf Regeln für die Schichten 3 bis 7 filtert und die Kommunikation sowohl **innerhalb von Azure** (East-West-Datenverkehr) als auch **zu/von externen Netzwerken** (North-South-Datenverkehr) unterstützt. Bereitgestellt auf der **Virtual Network (VNet)-Ebene** bietet es zentralisierten Schutz für alle Subnetze im VNet. Azure Firewall skaliert automatisch, um den Anforderungen des Datenverkehrs gerecht zu werden, und gewährleistet hohe Verfügbarkeit, ohne dass eine manuelle Einrichtung erforderlich ist.
|
||||
|
||||
Es ist in drei SKUs verfügbar—**Basic**, **Standard** und **Premium**, die jeweils auf spezifische Kundenbedürfnisse zugeschnitten sind:
|
||||
|
||||
| **Empfohlener Anwendungsfall** | Kleine/Mittlere Unternehmen (KMUs) mit begrenztem Bedarf | Allgemeine Unternehmensnutzung, Layer 3–7 Filtering | Hochsensible Umgebungen (z. B. Zahlungsabwicklung) |
|
||||
| ------------------------------- | ------------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------- |
|
||||
| **Leistung** | Bis zu 250 Mbps Durchsatz | Bis zu 30 Gbps Durchsatz | Bis zu 100 Gbps Durchsatz |
|
||||
| **Bedrohungsintelligenz** | Nur Warnungen | Warnungen und Blockierung (bösartige IPs/Domains) | Warnungen und Blockierung (erweiterte Bedrohungsintelligenz) |
|
||||
| **L3–L7 Filtering** | Grundlegendes Filtern | Zustandsbehaftetes Filtern über Protokolle | Zustandsbehaftetes Filtern mit erweiterter Inspektion |
|
||||
| **Erweiterter Bedrohungsschutz** | Nicht verfügbar | Bedrohungsintelligenz-basiertes Filtern | Beinhaltet Intrusion Detection and Prevention System (IDPS) |
|
||||
| **TLS-Inspektion** | Nicht verfügbar | Nicht verfügbar | Unterstützt eingehende/ausgehende TLS-Terminierung |
|
||||
| **Verfügbarkeit** | Fester Backend (2 VMs) | Autoscaling | Autoscaling |
|
||||
| **Verwaltungsaufwand** | Grundlegende Steuerung | Verwaltet über Firewall Manager | Verwaltet über Firewall Manager |
|
||||
| Kriterien/Funktion | Option 1 | Option 2 | Option 3 |
|
||||
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
|
||||
| **Empfohlener Anwendungsfall** | Kleine/Mittlere Unternehmen (KMUs) mit begrenztem Bedarf | Allgemeine Unternehmensnutzung, Layer 3–7 Filtering | Hochsensible Umgebungen (z. B. Zahlungsabwicklung) |
|
||||
| **Leistung** | Bis zu 250 Mbps Durchsatz | Bis zu 30 Gbps Durchsatz | Bis zu 100 Gbps Durchsatz |
|
||||
| **Bedrohungsintelligenz** | Nur Warnungen | Warnungen und Blockierung (bösartige IPs/Domains) | Warnungen und Blockierung (erweiterte Bedrohungsintelligenz) |
|
||||
| **L3–L7 Filtering** | Basisfilterung | Zustandsbehaftete Filterung über Protokolle | Zustandsbehaftete Filterung mit erweiterter Inspektion |
|
||||
| **Erweiterter Bedrohungsschutz** | Nicht verfügbar | Bedrohungsintelligenz-basiertes Filtern | Beinhaltet Intrusion Detection and Prevention System (IDPS) |
|
||||
| **TLS-Inspektion** | Nicht verfügbar | Nicht verfügbar | Unterstützt eingehende/ausgehende TLS-Terminierung |
|
||||
| **Verfügbarkeit** | Fester Backend (2 VMs) | Autoskalierung | Autoskalierung |
|
||||
| **Verwaltungsaufwand** | Grundlegende Steuerung | Verwaltet über Firewall Manager | Verwaltet über Firewall Manager |
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -142,9 +143,9 @@ Get-AzFirewall
|
||||
|
||||
## Azure Routen-Tabellen
|
||||
|
||||
Azure **Routen-Tabellen** werden verwendet, um das Routing des Netzwerkverkehrs innerhalb eines Subnetzes zu steuern. Sie definieren Regeln, die angeben, wie Pakete weitergeleitet werden sollen, entweder zu Azure-Ressourcen, dem Internet oder einem bestimmten nächsten Hop wie einem Virtuellen Gerät oder der Azure Firewall. Sie können eine Routentabelle mit einem **Subnetz** verknüpfen, und alle Ressourcen innerhalb dieses Subnetzes folgen den Routen in der Tabelle.
|
||||
Azure **Routen-Tabellen** werden verwendet, um das Routing des Netzwerkverkehrs innerhalb eines Subnetzes zu steuern. Sie definieren Regeln, die angeben, wie Pakete weitergeleitet werden sollen, entweder zu Azure-Ressourcen, dem Internet oder einem bestimmten nächsten Hop wie einem Virtuellen Appliance oder Azure Firewall. Sie können eine Routentabelle mit einem **Subnetz** verknüpfen, und alle Ressourcen innerhalb dieses Subnetzes folgen den Routen in der Tabelle.
|
||||
|
||||
**Beispiel:** Wenn ein Subnetz Ressourcen hostet, die ausgehenden Verkehr über ein Netzwerk-Virtual-Appliance (NVA) zur Inspektion routen müssen, können Sie eine **Route** in einer Routentabelle erstellen, um gesamten Verkehr (z. B. `0.0.0.0/0`) an die private IP-Adresse der NVA als nächsten Hop umzuleiten.
|
||||
**Beispiel:** Wenn ein Subnetz Ressourcen hostet, die ausgehenden Verkehr über eine Network Virtual Appliance (NVA) zur Inspektion routen müssen, können Sie eine **Route** in einer Routentabelle erstellen, um den gesamten Verkehr (z. B. `0.0.0.0/0`) an die private IP-Adresse der NVA als nächsten Hop umzuleiten.
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
@@ -173,7 +174,7 @@ Get-AzRouteTable
|
||||
|
||||
Azure Private Link ist ein Dienst in Azure, der **privaten Zugriff auf Azure-Dienste ermöglicht**, indem sichergestellt wird, dass **der Datenverkehr zwischen Ihrem Azure-virtuellen Netzwerk (VNet) und dem Dienst vollständig innerhalb des Backbone-Netzwerks von Microsoft Azure verläuft**. Es bringt den Dienst effektiv in Ihr VNet. Diese Konfiguration verbessert die Sicherheit, indem die Daten nicht dem öffentlichen Internet ausgesetzt werden.
|
||||
|
||||
Private Link kann mit verschiedenen Azure-Diensten verwendet werden, wie Azure Storage, Azure SQL Database und benutzerdefinierten Diensten, die über Private Link geteilt werden. Es bietet eine sichere Möglichkeit, Dienste von innerhalb Ihres eigenen VNet oder sogar von verschiedenen Azure-Abonnements zu konsumieren.
|
||||
Private Link kann mit verschiedenen Azure-Diensten verwendet werden, wie Azure Storage, Azure SQL Database und benutzerdefinierten Diensten, die über Private Link geteilt werden. Es bietet eine sichere Möglichkeit, Dienste aus Ihrem eigenen VNet oder sogar aus verschiedenen Azure-Abonnements zu konsumieren.
|
||||
|
||||
> [!CAUTION]
|
||||
> NSGs gelten nicht für private Endpunkte, was eindeutig bedeutet, dass die Zuordnung eines NSG zu einem Subnetz, das den Private Link enthält, keine Auswirkungen hat.
|
||||
@@ -295,11 +296,11 @@ Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupNam
|
||||
|
||||
## Azure Application Gateway und Azure Application Gateway WAF
|
||||
|
||||
Azure Application Gateway ist ein **Web-Traffic-Lastenausgleich**-Dienst, der es Ihnen ermöglicht, den Traffic zu Ihren **Web**-Anwendungen zu verwalten. Es bietet **Layer 7 Lastenausgleich, SSL-Terminierung und Webanwendungsfirewall (WAF)-Funktionen** im Application Delivery Controller (ADC) als Dienst. Zu den Hauptmerkmalen gehören URL-basiertes Routing, cookie-basiertes Sitzungsaffinität und SSL-Offloading, die für Anwendungen, die komplexe Lastenausgleichsfunktionen wie globales Routing und pfadbasiertes Routing erfordern, entscheidend sind.
|
||||
Azure Application Gateway ist ein **Web-Traffic-Lastenausgleich**-Dienst, der es Ihnen ermöglicht, den Traffic zu Ihren **Web**-Anwendungen zu verwalten. Es bietet **Layer 7 Lastenausgleich, SSL-Terminierung und Webanwendungsfirewall (WAF)-Funktionen** im Application Delivery Controller (ADC) als Dienst. Zu den Hauptfunktionen gehören URL-basiertes Routing, cookie-basierten Sitzungsaffinität und SSL-Offloading, die für Anwendungen, die komplexe Lastenausgleichsfunktionen wie globales Routing und pfadbasiertes Routing erfordern, entscheidend sind.
|
||||
|
||||
**Beispiel:**
|
||||
|
||||
Betrachten Sie ein Szenario, in dem Sie eine E-Commerce-Website haben, die mehrere Subdomains für verschiedene Funktionen umfasst, wie z. B. Benutzerkonten und Zahlungsabwicklung. Azure Application Gateway kann **Traffic basierend auf dem URL-Pfad an die entsprechenden Webserver weiterleiten**. Zum Beispiel könnte der Traffic zu `example.com/accounts` an den Dienst für Benutzerkonten geleitet werden, und der Traffic zu `example.com/pay` könnte an den Dienst für die Zahlungsabwicklung geleitet werden.\
|
||||
Betrachten Sie ein Szenario, in dem Sie eine E-Commerce-Website haben, die mehrere Subdomains für verschiedene Funktionen umfasst, wie z. B. Benutzerkonten und Zahlungsabwicklung. Azure Application Gateway kann **Traffic zu den entsprechenden Webservern basierend auf dem URL-Pfad** leiten. Zum Beispiel könnte der Traffic zu `example.com/accounts` an den Dienst für Benutzerkonten geleitet werden, und der Traffic zu `example.com/pay` könnte an den Zahlungsabwicklungsdienst geleitet werden.\
|
||||
Und **schützen Sie Ihre Website vor Angriffen mit den WAF-Funktionen.**
|
||||
|
||||
### **Enumeration**
|
||||
@@ -330,7 +331,7 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
|
||||
**Beispiel:**
|
||||
|
||||
Stellen Sie sich ein Unternehmen mit separaten Abteilungen wie Vertrieb, Personalwesen und Entwicklung vor, **die jeweils ihr eigenes VNet (die Speichen) haben**. Diese VNets **benötigen Zugriff auf gemeinsame Ressourcen** wie eine zentrale Datenbank, eine Firewall und ein Internet-Gateway, die sich alle in **einem anderen VNet (dem Hub)** befinden. Durch die Verwendung des Hub- und Spoke-Modells kann jede Abteilung **sicher auf die gemeinsamen Ressourcen über das Hub-VNet zugreifen, ohne diese Ressourcen dem öffentlichen Internet auszusetzen** oder eine komplexe Netzwerkstruktur mit zahlreichen Verbindungen zu schaffen.
|
||||
Stellen Sie sich ein Unternehmen mit separaten Abteilungen wie Vertrieb, Personalwesen und Entwicklung vor, **jede mit ihrem eigenen VNet (den Speichen)**. Diese VNets **benötigen Zugriff auf gemeinsame Ressourcen** wie eine zentrale Datenbank, eine Firewall und ein Internet-Gateway, die sich alle in **einem anderen VNet (dem Hub)** befinden. Durch die Verwendung des Hub- und Spoke-Modells kann jede Abteilung **sicher auf die gemeinsamen Ressourcen über das Hub-VNet zugreifen, ohne diese Ressourcen dem öffentlichen Internet auszusetzen** oder eine komplexe Netzwerkstruktur mit zahlreichen Verbindungen zu schaffen.
|
||||
|
||||
### Enumeration
|
||||
|
||||
|
||||
Reference in New Issue
Block a user