Azure Pentesting

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Я ЩЕ БУДУЮ МЕТОДОЛОГІЮ AZURE

Основна інформація

Методологія тестування Azure Pentester/Red Team

Для аудиту середовища AZURE дуже важливо знати: які сервіси використовуються, що викладено, хто має доступ до чого, і як підключені внутрішні Azure сервіси та зовнішні сервіси.

З точки зору Red Team, першим кроком для компрометації середовища Azure є здійснення спроби отримати деякі підтвердження для Azure AD. Ось деякі ідеї, як це зробити:

  • Витоки в github (або подібні) - OSINT

  • Соціальна інженерія

  • Повторне використання пароля (витоки паролів)

  • Вразливості в Azure-хостованих додатках

  • Підроблення запиту на серверному боці з доступом до кінцевої точки метаданих

  • Читання локального файлу

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • Файл accessTokens.json в az cli до 2.30 - Jan2022 - зберігав підтвердження доступу у відкритому вигляді

  • Файл azureProfile.json містить інформацію про увійшовшого користувача.

  • az logout видаляє токен.

  • Старі версії Az PowerShell зберігали підтвердження доступу у відкритому вигляді в TokenCache.dat. Також зберігає ServicePrincipalSecret у відкритому вигляді в AzureRmContext.json. Командлет Save-AzContext може бути використаний для збереження токенів. Використовуйте Disconnect-AzAccount для їх видалення.

  • 3-ті сторони порушені

  • Внутрішні співробітники

  • Загальний Фішинг (підтвердження або Oauth App)

Навіть якщо ви не скомпрометували жодного користувача всередині атакованого вами Azure tenant, ви можете зібрати деяку інформацію з нього:

Після того, як ви змогли отримати підтвердження, вам потрібно знати, кому належать ці підтвердження, і до чого вони мають доступ, тому вам потрібно виконати деяку базову перелік:

Базовий перелік

Пам'ятайте, що найшумнішою частиною переліку є вхід, а не сам перелік.

SSRF

Якщо ви знайшли SSRF на машині всередині Azure, перевірте цю сторінку для хитрощів:

Обхід умов входу

У випадках, коли у вас є деякі дійсні облікові дані, але ви не можете увійти, це деякі загальні заходи захисту, які можуть бути на місці:

  • Білістинг IP -- Вам потрібно скомпрометувати дійсну IP-адресу

  • Гео-обмеження -- Знайдіть, де живе користувач або де знаходяться офіси компанії та отримайте IP з того ж міста (або країни, принаймні)

  • Браузер -- Можливо, дозволений лише браузер певної ОС (Windows, Linux, Mac, Android, iOS). Дізнайтеся, яку ОС використовує жертва/компанія.

  • Ви також можете спробувати скомпрометувати облікові дані службового принципалу, оскільки вони зазвичай менше обмежені, і їх вхід рідше перевіряється

Після обходу цього, ви, можливо, зможете повернутися до вашого початкового налаштування, і ви все ще матимете доступ.

Захоплення піддомену

Хто я

Дізнайтеся, як встановити az cli, AzureAD та Az PowerShell в розділі Az - AzureAD.

Одне з перших, що вам потрібно знати, - хто ви (в якому середовищі ви знаходитесь):

az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default

AzureAD - Це служба ідентифікації та управління доступом в Azure. Це може бути одним з перших місць, де ви знайдете вразливості. Ви можете використовувати PowerShell для взаємодії з AzureAD. Нижче наведено кілька корисних команд.

#Install the module
Install-Module -Name AzureAD

#Connect to AzureAD
Connect-AzureAD

#Get all users
Get-AzureADUser

#Get all groups
Get-AzureADGroup

#Get all applications
Get-AzureADApplication
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail

Захоплення токенів Azure AD

  1. Встановіть модуль Az та підключіться до вашого облікового запису Azure:

    Install-Module -Name Az -AllowClobber -Scope CurrentUser
    Connect-AzAccount
  2. Отримайте доступ до токенів Azure AD:

    $context = Get-AzContext
    $token = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile.DefaultContext.TokenCache.ReadItems() | Where-Object { $_.TenantId -eq $context.Tenant.TenantId }
    $token.AccessToken
  3. Використовуйте отриманий токен для автентифікації та доступу до ресурсів Azure.

# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user

Один з найважливіших команд для переліку Azure - Get-AzResource з Az PowerShell, оскільки вона дозволяє вам знати ресурси, які ваш поточний користувач може бачити.

Ви можете отримати ту ж інформацію в веб-консолі, перейшовши за посиланням https://portal.azure.com/#view/HubsExtension/BrowseAll або шукаючи "Усі ресурси"

Перелік AzureAD

За замовчуванням будь-який користувач повинен мати достатньо дозволів для переліку таких речей, як користувачі, групи, ролі, службові принципали... (перевірте стандартні дозволи AzureAD). Тут ви можете знайти посібник:

Тепер, коли у вас є деяка інформація про ваші облікові дані (і якщо ви - червона команда, сподіваємося, що вас не виявили). Час визначити, які служби використовуються в середовищі. У наступному розділі ви можете перевірити деякі способи переліку деяких загальних служб.

Службовий принципал та політика доступу

Azure-служба може мати системний ідентифікатор (самої служби) або використовувати призначений користувачем керований ідентифікатор. Цей ідентифікатор може мати політику доступу, наприклад, до KeyVault для читання секретів. Ці політики доступу повинні бути обмежені (принцип мінімальних привілеїв), але можуть мати більше дозволів, ніж потрібно. Зазвичай служба додатків використовуватиме KeyVault для отримання секретів та сертифікатів.

Тому корисно досліджувати ці ідентифікатори.

Служба додатків SCM

Консоль Kudu для входу в контейнер служби додатків.

Веб-оболонка

Використовуйте portal.azure.com та виберіть оболонку або використовуйте shell.azure.com для bash або powershell. 'Диск' цієї оболонки зберігаються як файл зображення в обліковому записі сховища.

Azure DevOps

Azure DevOps є окремим від Azure. В ньому є репозиторії, конвеєри (yaml або реліз), дошки, вікі та інше. Групи змінних використовуються для зберігання значень змінних та секретів.

Автоматизовані засоби реконнесансу

cd ROADTools
pipenv shell
roadrecon auth -u test@corp.onmicrosoft.com -p "Welcome2022!"
roadrecon gather
roadrecon gui

Import-Module monkey365
Get-Help Invoke-Monkey365
Get-Help Invoke-Monkey365 -Detailed
Invoke-Monkey365 -IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction Continue
Invoke-Monkey365 - Instance Azure -Analysis All -ExportTo HTML

# Start Backend
cd stormspotter\backend\
pipenv shell
python ssbackend.pyz

# Start Front-end
cd stormspotter\frontend\dist\spa\
quasar.cmd serve -p 9091 --history

# Run Stormcollector
cd stormspotter\stormcollector\
pipenv shell
az login -u test@corp.onmicrosoft.com -p Welcome2022!
python stormspotter\stormcollector\sscollector.pyz cli
# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)

# You need to use the Az PowerShell and Azure AD modules:
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
$creds = New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)
Connect-AzAccount -Credential $creds

Import-Module AzureAD\AzureAD.psd1
Connect-AzureAD -Credential $creds

# Launch AzureHound
. AzureHound\AzureHound.ps1
Invoke-AzureHound -Verbose

# Simple queries
## All Azure Users
MATCH (n:AZUser) return n.name
## All Azure Applications
MATCH (n:AZApp) return n.objectid
## All Azure Devices
MATCH (n:AZDevice) return n.name
## All Azure Groups
MATCH (n:AZGroup) return n.name
## All Azure Key Vaults
MATCH (n:AZKeyVault) return n.name
## All Azure Resource Groups
MATCH (n:AZResourceGroup) return n.name
## All Azure Service Principals
MATCH (n:AZServicePrincipal) return n.objectid
## All Azure Virtual Machines
MATCH (n:AZVM) return n.name
## All Principals with the ‘Contributor’ role
MATCH p = (n)-[r:AZContributor]->(g) RETURN p

# Advanced queries
## Get Global Admins
MATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p
## Owners of Azure Groups
MATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p
## All Azure Users and their Groups
MATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5' RETURN p
## Privileged Service Principals
MATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p
## Owners of Azure Applications
MATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p
## Paths to VMs
MATCH p = (n)-[r]->(g: AZVM) RETURN p
## Paths to KeyVault
MATCH p = (n)-[r]->(g:AZKeyVault) RETURN p
## Paths to Azure Resource Group
MATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p
## On-Prem users with edges to Azure
MATCH  p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise AD
MATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n

# You should use an account with at least read-permission on the assets you want to access
git clone https://github.com/nccgroup/azucar.git
PS> Get-ChildItem -Recurse c:\Azucar_V10 | Unblock-File

PS> .\Azucar.ps1 -AuthMode UseCachedCredentials -Verbose -WriteLog -Debug -ExportTo PRINT
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000

# resolve the TenantID for an specific username
PS> .\Azucar.ps1 -ResolveTenantUserName user@company.com

Import-Module .\MicroBurst.psm1
Import-Module .\Get-AzureDomainInfo.ps1
Get-AzureDomainInfo -folder MicroBurst -Verbose

Connect-AzAccount
ipmo C:\Path\To\Powerzure.psd1
Get-AzureTarget

# Reader
$ Get-Runbook, Get-AllUsers, Get-Apps, Get-Resources, Get-WebApps, Get-WebAppDetails

# Contributor
$ Execute-Command -OS Windows -VM Win10Test -ResourceGroup Test-RG -Command "whoami"
$ Execute-MSBuild -VM Win10Test  -ResourceGroup Test-RG -File "build.xml"
$ Get-AllSecrets # AllAppSecrets, AllKeyVaultContents
$ Get-AvailableVMDisks, Get-VMDisk # Download a virtual machine's disk

# Owner
$ Set-Role -Role Contributor -User test@contoso.com -Resource Win10VMTest

# Administrator
$ Create-Backdoor, Execute-Backdoor
Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated