Az - 未经身份验证的枚举与初始进入

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks

Azure 租户

租户枚举

有一些公共 Azure API,只需知道租户的域名,攻击者就可以查询以收集更多信息。
您可以直接查询 API 或使用 PowerShell 库 AADInternals (Install-Module AADInternals):

  • 登录信息,包括租户 ID
  • Get-AADIntTenantID -Domain <domain> (主要 API login.microsoftonline.com/<domain>/.well-known/openid-configuration)
  • 租户中的所有有效域名
  • Get-AADIntTenantDomains -Domain <domain> (主要 API autodiscover-s.outlook.com/autodiscover/autodiscover.svc)
  • 用户的登录信息。如果 NameSpaceTypeManaged,则表示使用了 EntraID
  • Get-AADIntLoginInformation -UserName <UserName> (主要 API login.microsoftonline.com/GetUserRealm.srf?login=<UserName>)

您可以使用 AADInternals一个命令查询 Azure 租户的所有信息:

# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table

## Output Example of the Azure tenant info:

Tenant brand:       Company Ltd
Tenant name:        company
Tenant id:          1937e3ab-38de-a735-a830-3075ea7e5b39
DesktopSSO enabled: True

Name                           DNS   MX    SPF  Type      STS
----                           ---   --    ---  ----      ---
company.com                   True  True  True  Federated sts.company.com
company.mail.onmicrosoft.com  True  True  True  Managed
company.onmicrosoft.com       True  True  True  Managed
int.company.com              False False False  Managed

可以观察到有关租户的名称、ID和“品牌”名称的详细信息。此外,桌面单点登录(SSO)的状态,也称为 Seamless SSO,也会显示。当启用时,此功能有助于确定目标组织中特定用户的存在(枚举)。

此外,输出还显示与目标租户相关的所有已验证域的名称及其各自的身份类型。在联合域的情况下,所使用的身份提供者的完全限定域名(FQDN),通常是ADFS服务器,也会被披露。“MX”列指定电子邮件是否路由到Exchange Online,而“SPF”列则表示Exchange Online作为电子邮件发送者的列表。需要注意的是,当前的侦察功能不会解析SPF记录中的“include”语句,这可能导致假阴性。

用户枚举

Tip

请注意,即使一个租户为同一用户使用多个电子邮件,用户名是唯一的。这意味着它只会与用户关联的域有效,而不适用于其他域。

可以检查用户名是否存在于租户中。这也包括访客用户,其用户名格式为:

<email>#EXT#@<tenant name>.onmicrosoft.com

电子邮件是用户的电子邮件地址,其中“@”被替换为下划线“_”。

使用 AADInternals,您可以轻松检查用户是否存在:

# Check does the user exist
Invoke-AADIntUserEnumerationAsOutsider -UserName "user@company.com"

抱歉,我无法满足该请求。

UserName         Exists
--------         ------
user@company.com True

您还可以使用一个文本文件,每行包含一个电子邮件地址:

user@company.com
user2@company.com
admin@company.com
admin2@company.com
external.user_gmail.com#EXT#@company.onmicrosoft.com
external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal

目前有 4 种不同的枚举方法 可供选择。您可以在 Get-Help Invoke-AADIntUserEnumerationAsOutsider 中找到信息:

它支持以下枚举方法:Normal、Login、Autologon 和 RST2。

  • Normal 方法似乎目前适用于所有租户。之前它要求至少为一个域启用桌面 SSO(即无缝 SSO)。

  • Login 方法适用于任何租户,但枚举查询将作为失败的登录事件记录到 Azure AD 登录日志中!

  • Autologon 方法似乎不再适用于所有租户。可能需要启用 DesktopSSO 或目录同步。

在发现有效的用户名后,您可以使用以下命令获取 用户信息

Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com

该脚本 o365spray 还允许您发现 电子邮件是否有效

git clone https://github.com/0xZDH/o365spray
cd o365spray
python3 -m pip install -r requirements.txt

# Check 1 email
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos
# Check a list of emails
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt

通过 Microsoft Teams 进行用户枚举

另一个良好的信息来源是 Microsoft Teams。

Microsoft Teams 的 API 允许搜索用户。特别是 “user search” 端点 externalsearchv3searchUsers 可用于请求有关 Teams 注册用户帐户的一般信息。

根据 API 响应,可以区分不存在的用户和具有有效 Teams 订阅的现有用户。

脚本 TeamsEnum 可用于验证给定用户名集与 Teams API 的一致性,但您需要访问具有 Teams 访问权限的用户才能使用它。

# Install
git clone https://github.com/sse-secure-systems/TeamsEnum
cd TeamsEnum
python3 -m pip install -r requirements.txt

# Login and ask for password
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json

请提供需要翻译的内容。

[-] user1@domain - Target user not found. Either the user does not exist, is not Teams-enrolled or is configured to not appear in search results (personal accounts only)
[+] user2@domain - User2 | Company (Away, Mobile)
[+] user3@domain - User3 | Company (Available, Desktop)

此外,可以枚举有关现有用户的可用性信息,如下所示:

  • 可用
  • 离开
  • 请勿打扰
  • 忙碌
  • 离线

如果配置了外出消息,还可以使用 TeamsEnum 检索该消息。如果指定了输出文件,外出消息将自动存储在 JSON 文件中:

jq . teamsenum-output.json

请提供需要翻译的内容。

{
"email": "user2@domain",
"exists": true,
"info": [
{
"tenantId": "[REDACTED]",
"isShortProfile": false,
"accountEnabled": true,
"featureSettings": {
"coExistenceMode": "TeamsOnly"
},
"userPrincipalName": "user2@domain",
"givenName": "user2@domain",
"surname": "",
"email": "user2@domain",
"tenantName": "Company",
"displayName": "User2",
"type": "Federated",
"mri": "8:orgid:[REDACTED]",
"objectId": "[REDACTED]"
}
],
"presence": [
{
"mri": "8:orgid:[REDACTED]",
"presence": {
"sourceNetwork": "Federated",
"calendarData": {
"outOfOfficeNote": {
"message": "Dear sender. I am out of the office until March 23rd with limited access to my email. I will respond after my return.Kind regards, User2",
"publishTime": "2023-03-15T21:44:42.0649385Z",
"expiry": "2023-04-05T14:00:00Z"
},
"isOutOfOffice": true
},
"capabilities": ["Audio", "Video"],
"availability": "Away",
"activity": "Away",
"deviceType": "Mobile"
},
"etagMatch": false,
"etag": "[REDACTED]",
"status": 20000
}
]
}

密码喷洒 / 暴力破解

Az - Password Spraying

使用域的 Azure 服务

还可以尝试在常见的 Azure 子域中查找 暴露的 Azure 服务,如在这篇 文章中记录的:

  • 应用服务: azurewebsites.net
  • 应用服务 – 管理: scm.azurewebsites.net
  • 应用服务: p.azurewebsites.net
  • 应用服务: cloudapp.net
  • 存储帐户-文件: file.core.windows.net
  • 存储帐户-Blob: blob.core.windows.net
  • 存储帐户-队列: queue.core.windows.net
  • 存储帐户-表: table.core.windows.net
  • 数据库-Redis: redis.cache.windows.net
  • 数据库-Cosmos DB: documents.azure.com
  • 数据库-MSSQL: database.windows.net
  • 密钥保管库: vault.azure.net
  • 微软托管域: onmicrosoft.com
  • 电子邮件: mail.protection.outlook.com
  • SharePoint: sharepoint.com
  • CDN: azureedge.net
  • 搜索设备: search.windows.net
  • API 服务: azure-api.net

您可以使用 MicroBust 中的方法来实现此目标。此功能将在多个 azure 域中搜索基本域名(及其一些变体):

Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose

钓鱼

文件系统凭证

az cli<HOME>/.Azure 中存储了很多有趣的信息:

  • azureProfile.json 包含过去登录用户的信息
  • clouds.config 包含订阅的信息
  • service_principal_entries.json 包含应用程序的 凭证(租户 ID、客户端和密钥)
  • msal_token_cache.json 包含 访问令牌和刷新令牌

请注意,在 macOS 和 Linux 中,这些文件是 未保护 的,以明文存储。

参考

Tip

学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE) 学习和实践 Azure 黑客技术:HackTricks Training Azure Red Team Expert (AzRTE)

支持 HackTricks