AzureAD是微软提供的云原生身份与访问管理服务,支持内外资源访问控制,具备基础与高级安全功能。渗透测试包括探测、邮箱枚举、密码喷洒和信息收集等步骤。
1.1.1Azure AD 基础认知Azure AD(Azure Active Directory)是微软提供的 云原生身份与访问管理服务 ,核心作用是管控用户对内外资源的访问权限,支持的资源类型包括: ● 外部资源:Microsoft 365、Azure 门户、SaaS 应用(如 Salesforce、Docusign); ● 内部资源:公司内网应用、自研云应用; ● 本地与云的联动:通过 “Azure AD Connect” 实现本地 Windows Server AD 与 Azure AD 的同步。 1.1.2Azure AD 核心安全功能 Azure AD 的安全机制分 “基础功能” 和 “高级功能”(部分依赖特定许可证),具体如下表:
安全功能
核心作用
依赖条件 / 关键细节
密码锁定策略
防御暴力破解:密码输错 10 次,账户锁定 60 秒
基础功能,所有租户默认启用
条件访问策略
基于 “信号 - 决策 - 执行” 逻辑管控访问(如 “登录 IP 不在信任范围则要求 MFA”)
需 Azure AD Premium P1 许可证;支持 5 类信号(用户 / 组、IP 定位、设备、应用、风险检测)
标识保护
检测高风险用户行为(如使用泄露密码登录),联动条件访问降低风险
需 Azure AD Premium P2 许可证;依赖微软全球用户行为数据识别风险
安全默认值
防御常见攻击(密码喷洒、钓鱼、重播):强制 MFA 注册、阻止旧协议(IMAP/SMTP)
2019 年 10 月 22 日后创建的租户默认启用;敏感管理员角色(如全局管理员)每次登录需额外验证
密码保护
阻止弱密码(含组织自定义弱密码),且不依赖云同步功能
本地部署需 “DC 代理”;用户明文密码永不离开本地域控制器
日志记录
跟踪登录行为、配置更改,支持导出到 Azure Logs Analytics 分析
基础功能,无需高级许可证;可追溯安全事件(如异常登录)
1.1.3渗透测试技术与工具 按 “探测→枚举→密码攻击→信息收集→权限提升→横向移动” 的渗透流程。 1. 3.1.1第一步:Azure AD 探测(重点 URL) 1.核心目标 :判断目标公司是否使用 Azure AD 探测 URL: https://login.microsoftonline.com/[email protected]&xml=1 URL 参数说明: (1)[email protected]:需替换为目标域的用户邮箱(格式为 “用户名 @目标域”); (2)ml=1:指定返回结果为 XML 格式,便于解析。 ○ 结果判断逻辑:解析 XML 响应中的<NameSpaceType>字段,若值为 “Managed”,则说明目标公司正在使用 Azure AD;若为其他值(如 “Federated”),则可能是联合身份验证(非纯 Azure AD)。
![Azure AD 渗透学习 Azure AD 渗透学习]()
1.1.3.2 第二步:邮箱枚举(获取有效账户) 核心目标 :从目标域中筛选出真实存在的用户邮箱(为后续密码攻击做准备) 工具:o365creeper(Python 脚本) ○原理:向 Office 365 发送 “空密码请求”,通过返回的IfExistsResult参数判断账户有效性(0= 有效,1= 无效); 特点:不会在 Azure AD 日志中留下痕迹; 下载地址: https://github.com/LMGsec/o365creeper ; 使用命令: # 单邮箱验证 python o365creeper.py -e [email protected] # 批量验证(从文件读取邮箱列表) python o365creeper.py -f emails.txt # 批量验证并导出有效邮箱 说明:该程序在python3下执行报错,可能需要在python2版本中执行,后面对代码进行优化后可以执行,效果如图1所示。
![Azure AD 渗透学习 Azure AD 渗透学习]()
1.1.3.3 第三步:密码喷洒(获取有效凭证) 核心目标 :用 “低频率、多账户、弱密码” 的方式,尝试匹配有效账户的密码(避免触发账户锁定) 1.MailSniper ○ 用途:不仅支持密码喷洒,还能搜索 Exchange 邮件、枚举域信息; ○ 密码喷洒命令(针对 EWS 门户): (1)当前邮箱文件进行密码遍历 Import-Module .MailSniper.ps1 Invoke-PasswordSprayEWS -ExchHostname outlook.office365.com -UserList gotham_emails.txt -Password Gotham2020
![Azure AD 渗透学习 Azure AD 渗透学习]()
(成功时会返回 “SUCCESS! User:[email protected] Password:Gotham2020”) (2)搜索域中的所有邮箱 Invoke-GlobalMailSearch -ImpersonationAccount current-username -ExchHostname Exch01 -OutputCsv global-email-search.csv 此命令将连接到位于“Exch01”的 Exchange 服务器,并提示输入管理员凭据(例如“Exchange 组织管理员”或“组织管理”组的成员)。输入管理员凭据后,将与 Exchange 服务器建立 PowerShell 远程会话,并将 ApplicationImpersonation 角色授予“current-username”用户。然后,系统会收集域中所有电子邮件地址的列表,并以“current-username”身份连接到 EWS,默认情况下,系统会在每个邮箱中搜索 100 封最新电子邮件,查找关键词“*pass*”、“*creds*”、“*credentials*”,并将其输出到名为 global-email-search.csv 的 CSV 文件中。
![Azure AD 渗透学习 Azure AD 渗透学习]()
(3) Invoke-SelfSearch搜索特点关键字 Invoke-SelfSearch 模块将使用 EWS 连接到 Microsoft Exchange 服务器,从当前用户的邮箱中收集大量电子邮件。然后,它会在其中搜索特定术语。这可能有助于在获取用户凭据后提升权限,或以非管理员用户身份定位敏感数据。 要搜索当前用户的邮箱: Invoke-SelfSearch -Mailbox [email protected] 此命令将连接到使用 EWS 输入的电子邮件地址自动发现的 Exchange 服务器,默认情况下,将从“邮箱”中的 100 封最新电子邮件中搜索术语“*pass*”、“*creds*”、“*credentials*”。 (4)额外的 MailSniper 模块 ● Get-GlobalAddressList 将尝试连接到 Outlook Web Access (OWA) 门户,并使用“FindPeople”方法(仅在 Exchange 2013 及更高版本中可用)从 GAL 收集电子邮件地址。如果此操作失败,脚本将尝试连接到 EWS 并尝试收集 GAL。 Get-GlobalAddressList -ExchHostname mail.domain.com -UserName domainusername -Password Spring2021 -OutFile gal.txt ● Get-MailboxFolders 将使用 EWS 连接到 Microsoft Exchange 服务器并从当前用户的邮箱中收集文件夹列表。 Get-MailboxFolders -Mailbox [email protected] ● Invoke-PasswordSprayOWA 将尝试连接到 OWA 门户并使用用户列表和单个密码执行密码喷洒攻击。 Invoke-PasswordSprayOWA -ExchHostname mail.domain.com -UserList .userlist.txt -Password Spring2021 -Threads 15 -OutFile owa-sprayed-creds.txt ● Invoke-PasswordSprayEWS 将尝试连接到 EWS 门户并使用用户列表和单个密码执行密码喷洒攻击。 Invoke-PasswordSprayEWS -ExchHostname mail.domain.com -UserList .userlist.txt -Password Spring2021 -Threads 15 -OutFile sprayed-ews-creds.txt ● Invoke-PasswordSprayGmail 该模块将首先尝试连接到 Gmail 身份验证门户,并使用用户列表和单个密码执行密码喷洒攻击。 Invoke-PasswordSprayGmail -UserList .userlist.txt -Password Fall2016 -Threads 15 -OutFile gmail-sprayed-creds.txt ● Invoke-DomainHarvestOWA 将尝试连接到 OWA 门户,并从服务器的 Web 响应中返回的 WWW-Authenticate 标头或基于登录尝试中的微小时间差异确定用于登录门户的有效域名。 Invoke-DomainHarvestOWA -ExchHostname mail.domain.com ● Invoke-UsernameHarvestOWA 将尝试连接到 OWA 门户,并根据登录尝试中的微小时间差异来获取有效的用户名。 Invoke-UsernameHarvestOWA -ExchHostname mail.domain.com -UserList .userlist.txt -Threads 1 -OutFile owa-valid-users.txt ● Invoke-UsernameHarvestGmail 是一个模块,它将尝试枚举 Google Apps 用户帐户并可能识别选择退出已实施的 2FA 解决方案的用户帐户。 ● Invoke-OpenInboxFinder 将尝试确定当前用户是否有权访问地址列表中每个电子邮件地址的收件箱。 Invoke-OpenInboxFinder -EmailList email-list.txt ● Get-ADUsernameFromEWS 将尝试确定单个电子邮件地址或地址列表的 Active Directory 用户名。使用 Get-GlobalAddressList 模块可以获取完整的电子邮件地址列表,以便与 Get-ADUsernameFromEWS 配合使用。 Get-ADUsernameFromEWS -EmailList email-list.txt ● Send-EWSEmail 将尝试连接到 EWS 并发送电子邮件。 Send-EWSEmail --ExchHostname substrate.office.com -Recipient $targetEmail -Subject "Foo" -EmailBody "Bar" -AccessToken $Accesstoken 2.MSOLSpray MSOLSpray( https://github.com/dafthack/MSOLSpray) 适用于 Microsoft Online 帐户(Azure/O365)的密码喷洒工具。该脚本会记录用户凭据是否有效、帐户是否启用了 MFA、租户是否不存在、用户是否不存在、帐户是否被锁定或帐户是否被禁用。在有限的测试中,我们发现,在有效登录 Microsoft Online OAuth2 端点时,它不会自动触发 MFA 文本/推送通知,这使得它在不引起目标注意的情况下查找有效凭据非常有用。最后,此工具与FireProx配合使用,可以在身份验证请求中轮换源 IP 地址。测试中,此方法似乎可以避免被 Azure 智能锁定阻止。 您需要一个用户列表文件,每行包含一个目标电子邮件地址。使用“powershell.exe -exec bypass”从 Windows 命令行打开 PowerShell 终端。 Import-Module .MSOLSpray.ps1 Invoke-MSOLSpray -UserList .userlist.txt -Password Winter2020 1.1.3.4. 第四步:信息收集(掌握目标环境) 已获取有效Azure AD凭证后,便可进行信息收集阶段。与Azure AD 交互的信息收集工具有很多,如o365recon、Stormspotter、Azucar、SkyArk、PowerZure、MSOline、MailSniper、ROADtools等。 1. Stormspotter:可视化 Azure AD 架构(权限关系、资源关联); 2. Azucar:枚举 Azure 云资源(VM、存储账户等); 3. SkyArk:检测 Azure AD 特权账户(如全局管理员、密钥管理员); 4. PowerZure:集成 Azure AD 渗透功能(权限提升、横向移动) https://mp.weixin.qq.com/s/3aRR35n4SiLyy9RF2dfuEw
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|




原文始发于微信公众号(小兵搞安全):Azure AD 渗透学习
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-


评论