Azure Pentesting

支持 HackTricks

我正在构建 AZURE 方法论

基本信息

Az - Basic Information

Azure 渗透测试/红队方法论

为了审计一个 AZURE 环境,了解:使用了哪些服务,暴露了什么,谁有访问权限,以及内部 Azure 服务和外部服务如何连接是非常重要的。

从红队的角度来看,攻破 Azure 环境的第一步是设法获取一些 Azure AD 的凭证。这里有一些方法:

  • github(或类似平台)上的泄漏 - OSINT

  • 社会工程

  • 密码重用(密码泄漏)

  • Azure 托管应用程序中的漏洞

  • 服务器端请求伪造 访问元数据端点

  • 本地文件读取

  • /home/USERNAME/.azure

  • C:\Users\USERNAME\.azure

  • az cli 2.30 之前的 accessTokens.json 文件 - 2022年1月 - 以明文存储访问令牌

  • azureProfile.json 文件包含已登录用户的信息

  • az logout 移除令牌

  • 旧版本的 Az PowerShell明文存储访问令牌TokenCache.dat 文件中。它还以明文存储 ServicePrincipalSecretAzureRmContext.json 文件中。可以使用 cmdlet Save-AzContext 存储 令牌。 使用 Disconnect-AzAccount 移除它们。

  • 第三方被攻破

  • 内部员工

  • 常见钓鱼(凭证或 Oauth 应用)

即使你没有攻破任何用户在你攻击的 Azure 租户中,你也可以收集一些信息

Az - Unauthenticated Enum & Initial Entry

在你设法获取凭证之后,你需要知道这些凭证属于谁,以及他们有权访问什么,所以你需要进行一些基本的枚举:

基本枚举

记住,枚举中最吵闹的部分是登录,而不是枚举本身。

SSRF

如果你在 Azure 内部的机器上发现了 SSRF,请查看此页面获取技巧:

绕过登录条件

在你有一些有效凭证但无法登录的情况下,这些是一些常见的保护措施:

  • IP 白名单 -- 你需要攻破一个有效的 IP

  • 地理限制 -- 找出用户居住地或公司办公室所在地,并获取同一城市(或至少同一国家)的 IP

  • 浏览器 -- 可能只允许某些操作系统(Windows, Linux, Mac, Android, iOS)的浏览器。找出受害者/公司使用的操作系统。

  • 你也可以尝试攻破服务主体凭证,因为它们通常限制较少,登录审查较少

绕过后,你可能能够恢复到初始设置,并且仍然有访问权限。

子域接管

Whoami

学习如何安装 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

枚举 Azure 最重要的命令之一是 Az PowerShell 中的 Get-AzResource,因为它可以让你了解当前用户可见的资源

你也可以在网页控制台中获取相同的信息,访问 https://portal.azure.com/#view/HubsExtension/BrowseAll 或搜索 "All resources"

AzureAD 枚举

默认情况下,任何用户都应该有足够的权限来枚举用户、组、角色、服务主体等(查看 default AzureAD permissions)。 你可以在这里找到一个指南:

Az - AzureAD (AAD)

现在你已经了解了一些关于你凭证的信息(如果你是红队,希望你还没有被检测到)。是时候弄清楚环境中使用了哪些服务了。 在接下来的部分中,你可以查看一些枚举常见服务的方法。

Service Principal 和 Access Policy

一个 Azure 服务可以有一个系统身份(服务本身)或使用一个用户分配的托管身份。这个身份可以有访问策略,例如,读取 KeyVault 中的秘密。这些访问策略应该受到限制(最小权限原则),但可能拥有超出所需的权限。通常一个 App Service 会使用 KeyVault 来检索秘密和证书。

因此,探索这些身份是有用的。

App Service SCM

Kudu 控制台登录到 App Service 'container'。

Webshell

使用 portal.azure.com 并选择 shell,或使用 shell.azure.com,获取 bash 或 powershell。这个 shell 的 'disk' 作为一个镜像文件存储在 storage-account 中。

Azure DevOps

Azure DevOps 与 Azure 是分开的。它有存储库、管道(yaml 或 release)、看板、wiki 等。变量组用于存储变量值和秘密。

自动化侦察工具

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

Azucar 是一个用于 Azure 环境的安全审计工具。它可以帮助识别潜在的安全问题,并提供修复建议。

# 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
支持 HackTricks

Last updated