利用MailSniper攻击Exchange
作者:Beau Bullock
外部/内部红队
我为MailSniper添加了多个模块,用于协助对托管外部Exchange服务器(OWA或EWS)的组织进行远程攻击。具体模块包括:Get-GlobalAddressList、Invoke-PasswordSprayOWA和Invoke-PasswordSprayEWS。
Get-GlobalAddressList
在外部渗透测试中,我们经常执行侦察阶段,可能会获取组织的某些电子邮件地址或用户名。如果我们能成功找到任一有效凭据,且组织拥有Outlook Web Access或Exchange Web Services门户,则可以从Exchange服务器下载整个全球地址列表(GAL)。因此,仅凭一个有效凭据,我们即可访问组织中所有员工的电子邮件地址。
为了改进Carrie Roberts在其博客文章中关于手动从OWA收集GAL的方法,我将此任务自动化并集成到MailSniper中。Brian Fehrman在OWA中发现了一个非常有趣的功能:FindPeople函数,允许通过单个请求拉取整个GAL。不幸的是,此功能仅在Exchange 2013版本中实现。测试中,利用FindPeople函数的Get-GlobalAddressList能够在10秒内从远程OWA门户拉取4282个电子邮件地址。
OWA“FindPeople”方法要求使用PowerShell版本3或更高版本。
对于Exchange版本低于2013的情况,Get-GlobalAddressList会回退到从Exchange Web Services枚举GAL。由于EWS每次只允许搜索100条结果,此方法可能耗时稍长。为绕过此限制,我基本搜索AA到ZZ,然后对结果进行排序和去重。
使用方法:将模块导入PowerShell版本3会话,然后运行类似以下命令:
|
|
如果Exchange版本为2013,输出应类似如下:
获取完整电子邮件列表后,可将其反馈到密码喷洒攻击中,很可能获得更多有效凭据。
说到密码喷洒…
Invoke-PasswordSprayOWA & Invoke-PasswordSprayEWS
我为MailSniper编写了两个模块,用于对Outlook Web Access和Exchange Web Services进行密码喷洒。密码喷洒是一种攻击方式,即不对单个用户账户尝试多次密码暴力破解,而是对多个用户账户尝试一个密码。这有助于避免账户锁定,且仍能获得有效凭据,因为用户仍会选择如“Fall2016”之类的密码。两个函数均支持多线程。只需传递-Threads选项并指定线程数(15似乎是不错的起始点)。
两个函数结构相似,但需注意:Invoke-PasswordSprayOWA要求PowerShell版本3或更高。
使用Invoke-PasswordSprayOWA:将模块导入PowerShell版本3会话,然后运行类似以下命令:
|
|
使用Invoke-PasswordSprayEWS:将模块导入PowerShell会话,然后运行类似以下命令:
|
|
当MailSniper找到有效凭据时,终端中应开始显示凭据:
测试中,我注意到EWS密码喷洒方法明显更快。Invoke-PasswordSprayOWA和使用Burp Intruder(15线程)喷洒10,000用户均耗时约1小时45分钟,而对EWS喷洒相同用户列表仅耗时9分钟28秒。
有关MailSniper的更多信息,请查看此博客文章。