Skip to content

Latest commit

 

History

History
279 lines (189 loc) · 11.7 KB

[RowTeam]-2023-7-14-【Office 365】通过 OneDrive 枚举.md

File metadata and controls

279 lines (189 loc) · 11.7 KB

【Office 365】通过 OneDrive 枚举

Rcoil RowTeam

RowTeam

微信号 RowTeam

功能介绍 没有什么好介绍的消遣地


__发表于

收录于合集 #King 8个

0x00 前言

今天,我们来探讨如何通过 OneDrive 对 Office365 用户进行枚举。目前来说,OneDrive 可能是最适合用于用户枚举了,因为它有以下几个优点:

    1. 未做登录尝试,也就是不需要像 Windows Exchange 那样,需要通过登录的方式进行判断。
    1. 由于不需要登录,因此也不会产生日志。
    1. 由于不需要登录,因此也没有速率等限制。

如果目标组织启用了 OneDrive,那么这就是一种最完美的枚举方法。但是,它也是有一个缺点的,这也会导致增加我们枚举的时间成本。

0x01 概述

OneDrive 是 SharePoint 的一部分。它专为个人文件存储而设计,并直接链接到 Azure/M365 帐户。每当用户登录到各种 Microsoft 服务(如 Excel 或 Word)时,都会激活 OneDrive,并创建包含用户电子邮件地址的个人 URL。更准确地说,个人 URL 实际上是帐户的 UPN 或用户主体名称。如下所示:

image.png

由于个人 URL 直接绑定到用户帐户,因此只需查找特定格式的 Web 目录即可枚举用户,类似于使用 DirBuster/dirb。

下面的图表显示了各种服务以及每个服务是否激活 OneDrive。

image.png

实际上,由于 OneDrive URL 创建的触发器数量众多,几乎任何实际使用 Azure/M365 帐户的人都将拥有 OneDrive URL。激活 OneDrive 后,将创建一个与该用户关联的唯一 URL。URL 采用以下格式:

https://<tenant>-my.sharepoint.com/personal/<UserPrincipalName>/_layouts/15/onedrive.aspx

如下图所示,可以在图中看到 tenant 的名称为“36vqny”,用户主体名称为“rowteam@36vqny.onmicrosoft.com“的变体,点号(".")会替换为下划线(“_”) 。

image.png

因此,可以通过这种方式,对该 URL 发出一个 HEAD 请求,就可以确定用户是否有效,判断依据也很简单:

  • • 状态码为 302,说明用户存在

当然,要确保该用户至少登录过一次才可以。没登陆过的用户是不可以通过这种方式进行判断的。

0x02 标识 AZURE 租户名称

但,想要使用 OneDrive 枚举,还需要知道 Azure 租户名称。Azure 租户名称是与 Azure 租户关联的短名称。

很多时候,组织的租户名称将与域名匹配。例如,"microsoft.com" 具有关联的租户 "Microsoft"。但实际上往往并非如此,有时它只是个替代名称,或组织法定全名的缩写。因此从域名直接截取的名称,不一定是对的,因此还需要识别 Azure 租户名称的方法。

但是,从 https://github.com/blacklanternsecurity/TREVORspray 这里的代码可以得到一个方法:向 https://autodiscover-s.outlook.com/autodiscover/autodiscover.svc发送请求。 具体如下

然后从 Domains标签的域名列表中,找出以 .onmicrosoft.com结尾的域名。这样就可以获取到一个租户列表。下图中,显示租户只有一个 36vqny

image.png

对 OneDrive Hosts 简单发起一个请求,如果返回 404,那么表示域名存在。

0x03 使用 OneDrive 枚举用户

上个章节,已经成功获取到租户名称,那么来尝试对用户进行枚举。它的原理很简单,在我们的例子中,需要以下条件:

    1. 域名:36vqny.onmicrosoft.com
    1. 租户名称:36vqny
    1. 用户名:rowteam

需要向以下链接中发起 Get 请求

https://36vqny-my.sharepoint.com/personal/rowteam_36vqny_onmicrosoft_com/_layouts/15/onedrive.aspx

如果返回 302 状态码,代表用户存在。

那么按照 RowTeam 的编写习惯,输入的格式应该是 36vqny\rowteam。 效果如下所示:

image.png

0x04 其他情况

在 OneDrive 枚举中,租户名称和域的确切组合很重要。正常情况下,大多数组织只会定义 1 个租户名称,也就是一个域仅有一个租户名称,那么该工具在识别它时不会有任何问题。但是,对于是多租户设置,那么我们必须做选择(选择租户/域的一个或所有组合)。

打个比方吗,如果“rowteam.me”有 3 个租户名称:“acmeRowTeam”、“acmeEurope”和“acmeAPC”,则用户可以存在于这些租户名称中的任何一个中。因此在枚举的时候,可能出现的组合为:

租户名称 邮箱用户 OneDrive Host
acmeRowTeam rowteam@rowteam.me acmeRowTeam-my.sharepoint.com
acmeEurope rowteam@rowteam.me acmeEurope-my.sharepoint.com
acmeAPC rowteam@rowteam.me acmeAPC-my.sharepoint.com

以上这些情况,你需要对 rowteam 用户使用不同的 OneDrive Host 进行测试,哪个成功就是哪个。很简单,拿 Microsoft 来举个例子

成功找到 4 个 OneDrive Host,那么你在枚举用户的时候,就需要枚举 4 次,如果运气好,第一个就出来结果了,但当前工具的编写并非那么智能,需要自己手动输入租户名称。

当然还有其他情况:如果该组织对特定国家或地区使用的是特定的域,那么这可能会变得更加复杂。当然,只是更加复杂,但这也不是个大问题。因此,使用 OneDrive 枚举用户,它有利有弊,如果遇到这些额外的情况,就会增加我们的枚举时间。

最后,透露一条有关 OneDrive 枚举的附加信息。当尝试连接到 OneDrive 或 SharePoint 主机(例如“36vqny- my.sharepoint.com”)时,如果收到“403”或“401”错误响应。 当用户名返回“401”时,表示 SharePoint 已配置为需要新式身份验证。 (这专门针对 SharePoint,而不是整个组织。

  • • 不需要新式身份验证的租户示例

image.png

  • • 需要新式身份验证的租户示例

image.png

可在此处找到 SharePoint 中新式身份验证的相关设置:

image.png

当然,这对于我们的枚举并没有任何的影响。

0x05 参考

    1. https://www.trustedsec.com/blog/onedrive-to-enum-them-all/
    1. https://github.com/nyxgeek/onedrive_user_enum
    1. https://github.com/blacklanternsecurity/TREVORspray

预览时标签不可点

微信扫一扫
关注该公众号

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许

: , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看