利用MailSniper滥用Exchange邮箱权限
Beau Bullock //
概述
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后,发现了两个公共文件夹。此外,“maximillian.veers@galacticempireinc.com”的收件箱对“jeclipse”可访问。Invoke-OpenInboxFinder将打印每个项目的权限级别。在输出中可以看到,“默认”项设置为“审阅者”。
使用MailSniper搜索其他用户的邮箱
发现邮箱具有允许用户访问的广泛权限后,MailSniper可用于读取和搜索目标邮箱中的消息。MailSniper的Invoke-SelfSearch函数以前主要用于搜索运行它的用户的邮箱。我稍作修改,以允许检查其他用户的电子邮件。需要指定一个名为“OtherUserMailbox”的新标志来访问其他邮箱。示例命令如下:
|
|
在下面的屏幕截图中,我使用“jeclipse”账户搜索maximillian.veers@galactiempireinc.com的邮箱。找到了三个结果,其中他的电子邮件的主题或正文包含术语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-Suite类型)意外地与公司共享他们的邮箱,公司员工窥探其他员工,甚至通过这些途径修改邮箱的合法性。
您可以从Github下载MailSniper:https://github.com/dafthack/mailsniper 特别感谢“doomguy”在Github上的MailSniper存储库中提出问题,询问此功能是否可能!