1. 查看当前Azure AD存在的用户

当我们在获取了Azure AD登录管理凭据后,可以使用"Get-AzureADUser -All $true"命令在Azure AD PowerShell中查看所有用户的详细信息。其中该命令"-All $true"参数可用于绕过默认的返回数量限制,返回当前Azure AD租户中所有存在的用户完整列表,如图1-1所示。

图1-1 通过命令查看当前Azure AD存在的用户

我们可以在上述命令返回结果中看到其输出了若干个用户的"ObjectId"、"DisplayName"、"UserPrincipalName"和"UserType"字段信息内容,在Azure AD中,这四个字段信息含义如下所示:

  • ObjectId:是一个唯一标识符,为Azure AD中的每个对象自动生成,用于区分不同的用户或资源。

  • DisplayName:用户的显示名称,通常是我们可以识别的名字,如本案例中的"admin"、"DangJason"等,

  • UserPrincipalName:又简单称为"UPN",其是用户的主要登录名,UPN的格式通常类似于电子邮件地址,如"jasonDang@adtest.example.com"。

  • UserType:通常是指用户的类型,在Azure AD中用户类型通常分为两种类型,一种类型通常是"Member"(组织内的正式员工)另一种类型是"Guest"(外部用户或来宾)。

2.查看当前Azure AD中所有用户名和用户类型

若想快速获取当前Azure AD中所有用户的主要用户名和用户类型,去更近一步的区分常规用户和来宾用户,方便下一步的账户配置不当及未授权的访问利用,我们可以在Azure AD PowerShell中执行"Get-AzureADUser -all $true | Select-Object UserPrincipalName, Usertype"命令来检索当前Azure AD中所有用户的UserPrincipalName(用户名)和Usertype(用户类型)属性。如图1-2所示,通过这条命令,我们可以快速获取一个包含用户主要名称和用户类型(如成员或来宾)的列表。

 

图1-2

3.查看定位具有管理员权限或相关命名的用户对象

若我们要在Azure AD 中快速检索定位具有管理员权限或相关命名的用户对象,可以通过在Azure AD PowerShell中执行"Get-AzureADUser -All $true |?{$_.Displayname -match "admin"}"命令来快速检索定位用户对象,在本例中,该命令中的"|?{$_.Displayname -match "admin"}"管道部分定义了筛选检索到的用户对象,仅包含 DisplayName 属性包含 "admin" 一词的用户(不区分大小写),在实际Azure AD攻防中,我们可根据具体的场景来使用"|?{$_.Displayname -match "xxx"}"管道部分来动态定义筛选DisplayName 属性包含要检索的用户对象名称,执行结果如图1-3所示。

图1-3

如果通过使用"Get-AzureADUser -All $true |?{$_.Displayname -match "xxx"}"命令筛选不出来要检索的用户对象名称,我们可以通过Get-AzureADUser -SearchString "xxx"命令来进行泛匹配,其中"xxx"要替换为要枚举的用户名称,在本例中枚举的是"admin"和"JasonDang"这两个用户,详情如图1-4所示,Get-AzureADUser -SearchString "xxx"命令可以搜索匹配用户的多种属性,如显示名称、用户主要名称等,这也是我们在对Azure AD攻防时,一种快速找出当前Azure AD中可能具有管理权限或与管理相关命名约定的用户账户的有效方法。

图1-4

4.通过ObjectId查看特定的租户信息

如在对Azure AD攻防期间,我们通过其他信息收集的方式获得了"ObjectId唯一标识符"信息,可在Azure AD PowerShell中执行"Get-AzureADUser -ObjectId <ID>"命令来枚举特定的用户,其中该命令中的<ID>参数选项在实际利用中,要去填写我们之前获取到"ObjectId唯一标识符",如图1-5所示

图1-5

5.查看Azure AD租户对象的所有属性信息

若要列出某一个Azure AD用户对象的所有属性信息(包括许可证分配、组成员身份、账户状态等详细信息),我们可以执行"Get-AzureADUser -ObjectId JasonDang@adtest.onmicrosoft.cn | fl "命令在Azure AD PowerShell中获取与该用户相关联的所有属性和值。如图1-5所示,需要读者注意的是,这里的 -ObjectId 参数选项用于指定要查询的用户对象,在本案例中,笔者用了"JasonDang@adtest.onmicrosoft.cn"这个用户,读者在实际操作过程中,需要以自身实际情况而定,而"fl "命令参数选项(即 Format-List *)表示列出该用户的所有属性信息,所列出的用户具体属性信息字段内容含义如表1-1所示。

表1-1  AzureAD用户具体属性信息字段内容含义

字段属性

字段描述

ExtensionProperty

包含用户的扩展属性集合

DeletionTimestamp

用户被删除的时间戳(如果用户已被删除)

ObjectId

Azure AD 中用户的唯一标识符

ObjectType

对象类型,在此为“User”

AccountEnabled

表示用户账号是否启用

AgeGroup

用户的年龄组

AssignedLicenses

分配给用户的Azure订阅许可证列表

AssignedPlans

分配给用户的服务计划列表

City

用户所在城市

CompanyName

用户所属公司名称

Country

用户所在国家/地区

CreationType

用户创建的方式或来源

Department

用户所在的部门

DirSyncEnabled

指示用户是否已经与本地目录同步

DisplayName

用户的显示名称

FacsimileTelephoneNumber

用户的传真号码

GivenName

用户的名字

IsCompromised

用户是否被标记为受到威胁或已被泄露的账户

ImmutableId

在Azure AD与本地AD同步时用于保持用户唯一性的标识符

JobTitle

用户的职位名称

LastDirSyncTime

用户最后一次与本地目录同步的时间戳

Mail

用户的电子邮件地址

MailNickName

用户的邮箱别名

Mobile

用户的移动电话号码

OnPremisesSecurityIdentifier

用户在本地Active Directory中的安全标识符

OtherMails

用户的其他电子邮件地址列表

PasswordPolicies

用户账户的密码策略,例如密码是否过期

PasswordProfile

用户的密码配置文件

RefreshTokensValidFromDateTime

用户刷新令牌有效的开始时间

SignInNames

用于登录的用户名列表

UserState

用户的状态

UserStateChangedOn

用户状态最后变更的时间

UserType

用户类型,如“Member”代表组织成员

于此同时,我们通过执行"Get-AzureADUser  -ObjectId JasonDang@adtest.onmicrosoft.cn| %{$_.PSObject.Properties.Name}"也能获取指定ObjectId的Azure AD用户的所有属性名称。该命令中的"%{}"是代表"ForEach-Object "的别名,其对每个属性执行脚本块内的操作。而$_.PSObject.Properties.Name 则代表获取当前对象中每个属性的名称。如图1-6所示,我们可以看到此命令的输出结果只输出了一个不包含属性值的属性名称列表。