利用MailSniper滥用Exchange邮箱权限
作者:Beau Bullock
分类:外部/内部,红队
关键词:邮件攻击, MailSniper, Microsoft, Microsoft Exchange, MS, Office365, OWA, 渗透测试, 工具
概述
Microsoft Exchange用户有权授予其他用户对其邮箱文件夹的不同级别访问权限。例如,用户可以允许其他用户读取其收件箱中的邮件。如果用户(或Exchange管理员)不小心错误设置了权限,可能会将邮箱访问权授予组织中的所有人。这导致任何用户都可以读取权限过宽的邮箱中的邮件。
使用MailSniper,可以快速枚举此类可由任何用户访问的邮箱。本文将描述此问题如何发生,如何定位权限有问题的邮箱,以及最终如何无需邮箱所有者凭据即可读取这些邮箱中的邮件。
使用Outlook设置邮箱权限
用户使用Microsoft Outlook客户端可以相对容易地自行更改邮箱权限。如果用户右键单击文件夹(如“收件箱”),然后点击“属性…”,将打开文件夹属性菜单。
点击“权限”选项卡,可以看到文件夹的当前设置。这里有点意思:通过点击“添加…”按钮,用户可以指定特定账户并授予各种权限。这很理想,因为用户可以限制访问特定人员。然而,您会注意到权限中已经包含了“默认”和“匿名”项。“默认”项实质上包括组织中所有有权访问邮件的用户。
如果用户错误地将“默认”项的权限级别设置为除“无”(除了“贡献者”)之外的任何级别,他们可能允许组织中的每个员工访问该邮箱文件夹。
邮箱文件夹的权限也可以由Exchange管理员设置。直接在Exchange服务器上使用Set-MailboxFolderPermission cmdlet,可以修改这些邮箱权限设置。
Invoke-OpenInboxFinder
作为渗透测试员,找到本质上全球可读的邮箱可能非常有价值。它们可能允许许多有趣的攻击向量。一方面,我们可以在没有凭据的情况下搜索其他用户的邮件,查找密码或敏感数据。另一个攻击向量是,如果用户的电子邮件地址与密码重置系统绑定,攻击者可以触发密码重置,然后访问包含密码重置链接的用户邮件。
我在MailSniper中添加了一个名为Invoke-OpenInboxFinder的函数,以帮助查找权限设置为允许其他用户访问的邮箱。但使用它之前,我们首先需要从目标环境收集电子邮件地址列表。MailSniper有一个名为Get-GlobalAddressList的模块,可用于从Exchange服务器检索全局地址列表。它将尝试Outlook Web Access(OWA)和Exchange Web Services(EWS)的方法。此命令可用于从Exchange收集电子邮件列表:
|
|
如果您在可以与目标组织内部Active Directory域通信的系统上,也可以使用Harmj0y的PowerView收集电子邮件列表。将PowerView脚本导入PowerShell会话,并运行以下命令获取电子邮件列表:
|
|
收集电子邮件列表后,Invoke-OpenInboxFinder函数可以逐个检查每个邮箱,确定当前用户是否有访问权。它还会检查Exchange中是否有任何可以访问的公共文件夹。
要使用Invoke-OpenInboxFinder,将MailSniper PowerShell脚本导入PowerShell会话:
|
|
接下来,运行Invoke-OpenInboxFinder函数:
|
|
Invoke-OpenInboxFinder将尝试基于电子邮件地址列表中的第一个条目自动发现邮件服务器。如果失败,您可以使用-ExchHostname标志手动设置Exchange服务器位置。
在以下示例中,命令终端以名为“jeclipse”的域用户身份运行。对域中的电子邮件地址列表运行Invoke-OpenInboxFinder后,发现了两个公共文件夹。此外,“[email protected]”的收件箱对“jeclipse”可访问。Invoke-OpenInboxFinder将打印每个项目的权限级别。在输出中可以看到“默认”项设置为“审阅者”。
使用MailSniper搜索其他用户的邮箱
发现邮箱具有允许用户访问的广泛权限后,可以使用MailSniper读取和搜索目标邮箱中的消息。MailSniper的Invoke-SelfSearch函数以前主要用于搜索运行它的用户的邮箱。我稍作修改,允许检查其他用户的邮件。需要指定一个名为“OtherUserMailbox”的新标志来访问其他邮箱。示例命令如下:
|
|
在下面的屏幕截图中,我使用“jeclipse”账户搜索[email protected]的邮箱。找到了三个结果,其中他的邮件主题或正文包含术语password、creds或credentials。
Office365和外部面向的Exchange服务器
如果Exchange Web Services(EWS)可访问,Invoke-OpenInboxFinder也可以通过Internet针对Office365和外部面向的Exchange服务器工作。除非外部设置了自动发现,否则您可能需要使用-ExchHostname手动指定目标主机名。对于连接到Office365,主机名将是“outlook.office365.com”。指定-Remote标志,让Invoke-OpenInboxFinder提示输入可用于远程EWS服务身份验证的凭据。
检查托管在Office365上的邮箱是否有广泛权限的示例命令如下:
|
|
以下是一个实际评估的屏幕截图,客户使用了Office365。我们有权访问组织中的单个用户凭据。通过使用从全局地址列表收集的电子邮件列表运行Invoke-OpenInboxFinder,我们能够确定组织中的三个独立账户允许我们的用户读取他们的邮件。
建议
显然,防止攻击者获得有效用户账户的访问权是防御此问题的第一步。但问题是,它不能阻止您当前的员工使用此技术查看他们有权访问的其他用户的邮箱。另请注意,您似乎必须拥有一个有效的域账户,并且在Exchange中有关联的邮箱,才能检查其他用户邮箱的权限。
如果可能,限制在Outlook客户端上进行此类更改会有所帮助。我发现一些较旧(2010年)的帖子声称权限选项卡可以通过GPO锁定。我个人没有尝试过这些页面提供的任何解决方案,但可能值得查看。您可以在这里和这里找到它们。
使用MailSniper中的Invoke-OpenInboxFinder函数,或Exchange上的Get-MailboxFolderPermission cmdlet,审核组织中所有账户的这些设置。
结论
邮箱权限是蓝队和红队都应该关注的事情。由于Outlook在文件夹属性中包含“默认”权限项,用户错误地授予组织中每个人访问其邮箱的可能性更大。在红队方面,这可能提供机会在邮件中找到密码或其他敏感数据,从而进一步访问网络。蓝队应该担心这一点,但他们还有其他事情要担心。蓝队应该担心的其他事情包括高调账户(C级类型)意外与公司共享其邮箱,公司员工窥探其他员工,甚至通过这些途径修改邮箱的合法性。
您可以从Github下载MailSniper:https://github.com/dafthack/mailsniper
特别感谢“doomguy”在MailSniper存储库中打开一个问题,询问此功能是否可能!