利用MailSniper越权访问Exchange邮箱
0x01 概述
Microsoft Exchange用户可以授权给其他用户对其邮箱文件夹进行各种级别的访问。例如,用户可以授予其他用户读取访问其收件箱中里面的电子邮件,但是要是用户(或Exchange管理员)不小心设置了不正确的访问权限,那么这将导致所有的用户都能访问读取其的邮箱。
使用MailSniper,可以快速枚举任何用户可访问的邮箱。在这篇文章中,我将说明此问题是如何产生的,如何查找存在权限问题的邮箱,以及在无需获取邮箱管理员许可的情况下阅读邮箱中的邮件。
0x02 使用Outlook设置邮箱权限
更改邮箱权限是所有用户在Microsoft Outlook客户端中都能够轻松完成的事情。如果用户右键单击文件夹“收件箱”,然后单击“属性”,然后文件夹的属性菜单就会打开。
单击“权限”选项卡能看到文件夹当前的设置。这使得事情变得有趣了。单击“添加”按钮,用户可以指定某个账户来授予各种权限。这是非常理想的,因为用户能够限制特定人员的访问。但是你会注意到在“权限”中已经包含了“默认”和“匿名”选项。“默认”项目实质上已经包含了组织中的具有访问邮件权限的每个用户。
如果用户错误地将权限级别“默认”设置为“None”之外的其他选项(除Contributor之外),则这可能允许组织中的每个成员访问该邮件文件夹。
邮箱文件夹的权限也可以由Exchange管理员设置。直接在Exchange服务器上使用Set-MailboxFolderPermission cmdlet,可以修改这些邮箱权限的设置。
0x03 Invoke-OpenInboxFinder
作为渗透测试人员,找到全世界都能访问的邮箱对我们是非常有价值的。这允许进行一些其他有趣的攻击媒介。一方面,我们可以搜索其他用户的电子邮件,来获取某些内容,例如密码或敏感数据,而无需其凭据。另一个攻击方面是,如果该用户的电子邮件地址与密码重置系统相关联,攻击者可以触发密码重置,然后访问包含密码重置链接的用户电子邮件。
我已经在MailSniper中添加了一个名为Invoke-OpenInboxFinder的功能,以帮助查找具有设置允许其他用户访问的权限的邮箱。想使用它,我们首先要从目标环境中收集一个电子邮件地址列表。MailSniper有一个名为”Get-GlobalAddressList“的模块,可用于从Exchange服务器检索全局地址列表。它将尝试Outlook Web Access(OWA)和Exchange Web服务(EWS)的方法。此命令可用于从Exchange收集电子邮件列表:
Get-GlobalAddressList -ExchHostname mail.domain.com -UserName domain \ username -Password Spring2017 -OutFile global-address-list.txt
如果你处于可以与目标组织的内部Active Directory域进行通信的系统上,也可以使用Harmj0y的PowerView来收集电子邮件列表。将PowerView脚本导入PowerShell会话并运行该脚本以获取电子邮件列表:
Get-NetUser | Sort-Object mail | ForEach-Object {$_.mail} | Out-File -Encoding ascii emaillist.txt
收集邮件列表以后,使用Invoke-OpenInboxFinder功能可以一次检查一个邮箱,以确认当前用户是否可以访问。它还将检查Exchange中是否存在可能被访问的任何公共文件夹。
要使用Invoke-OpenInboxFinder,需要将MailSniper PowerShell脚本导入到PowerShell中:
Import-Module MailSniper.ps1
接下来,运行Invoke-OpenInboxFinder函数:
Invoke-OpenInboxFinder将尝试自动发现基于邮件服务器电子邮件列表中的第一个条目。如果失败,可以使用-ExchHostname标志手动设置Exchange服务器位置。
在下面的示例中,命令终端以名为”jeclipse“的域名用户名运行。再从域中的电子邮件列表中运行Invoke-OpenInboxFinder后,发现了两个公用文件夹。此外”jQuery“可以访问”maximillian.veers@galacticempireinc.com“的收件箱。Invoke-OpenInboxFinder将会打印出每个项目的权限级别。在输出中可以看到”Default“项设置为”Reviewer“。
0x04 使用MailSniper搜索其他用户的邮箱
发现邮箱具有允许用户访问的过多权限之后,MailSniper可用于读取并搜索目标邮箱中的邮件。MailSniper的Invoke-SelfSearch功能,以前主要用于搜索正在运行它的用户的邮箱。我稍作修改,以便能够检查另一个用户的电子邮件。这里需要指定一个名为”OtherUserMailbox“的新标志来访问其他邮箱。该示例命令如下:
Invoke-SelfSearch -Mailbox target-email-address@domain.com -OtherUserMailbox
在下面的截图中,我使用”jeclipse“账户搜索maximillian.veers@galactiempireinc.com的邮箱。发现三个结果,其电子邮件的主题或主题中包含了密码或凭证。
0x05 Office365和对外开放的Exchange服务器
如果Exchange Web服务(EWS)可访问,Invoke-OpenInboxFinder也可以在Internet上的Office365和对外开放的Exchange服务器使用。除非它对外设置了自动发现,否则可能需要使用-ExchHostname手动指定主机名。要连接到Office365,主机名将是”outlook.office365.com“,指定-Remote标志让Invoke-OpenInboxFinder提示可用于向远程EWS服务进行身份验证的凭据。
用于检查托管在Office365上的邮箱以获得广泛权限的示例命令如下:
Invoke-OpenInboxFinder -EmailList。\ emaillist.txt -ExchHostname outlook.office365.com -Remote
以下是客户使用Office365时的实际评估截图。我们可以在组织中访问单个用户的凭据。通过使用从全局地址列表收集的电子邮件列表运行Invoke-OpenInboxFinder,我们可以确定组织中的三个单独的账户允许我们的用户阅读他们的电子邮件。
0x06 建议
显然,防止攻击者访问有效的用户账户是防御的第一步。问题是,它不会阻止你当前的员工去使用这种技术来访问其他用户“UR”有权限访问的邮箱。另外要注意的是,你必须拥有一个有效的相关域账户,以检查是否可以访问他人的邮箱。
如果可能的话,限制这些类在Outlook客户端上的更改非常有帮助的。我已经找到了几篇旧的文章(2010)说明权限选项卡能够用GPO锁定。我没有尝试过这些文章上面说的任何解决方案,但这值得一试。你可以在这里和这里查看这些文章。
使用MailSniper中的Invoke-OpenInboxFinder功能,或使用Exchange上的 Get-MailboxFolderPermission cmdlet审核组织中所有帐户的设置。
0x07 结论
邮箱权限是红蓝和双方都应该注意的问题。通过Outlook在文件夹属性中包含“默认”权限项的方式,这使得用户更有可能错误地授予组织中的所有人对其邮箱进行访问。在红方角度来看,这可以提供在电子邮件中进一步查找访问网络密码或其他敏感数据的机会。蓝方角度则应该担心其一些高级账户(C-Suite类型)意外地与整个公司共享了邮箱,公司员工窥探其他员工,甚至通过这些渠道合法的进行修改邮箱等。
你可以从Github下载MailSniper: https://github.com/dafthack/mailsniper
exp利用工具:https://github.com/sensepost/ruler
参考文献:
https://sensepost.com/blog/2017/outlook-forms-and-shells/
利用MailSniper越权访问Exchange邮箱的更多相关文章
- 逻辑漏洞介绍 & 越权访问攻击 & 修复建议
介绍逻辑漏洞 逻辑漏洞就是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性.一般出现在密码修改.越权访问.密码找回.交易支付金额等功能处.其中越权访问又有水平越权和垂直越权两种,如下所示. ...
- (原创)AD账户误删导致Exchange邮箱被删 莫苦恼
由于人员变动,离职人员AD账户和邮箱经常要删除.但是在删除AD账户的时候难免会犯错,将在用的用户给删除了,这是个痛苦的事情, 然后你会发现Exchange邮箱也会跟着删除,抓狂了..,还好,幸亏这里进 ...
- sharepoint获取exchange邮箱报错:该帐户无权模拟所请求的用户
现象: sharepoint获取exchange邮箱报错:该帐户无权模拟所请求的用户 处理办法: 1.Open the Exchange Management Shell 2.输入: New-Mana ...
- [转]Thunderbird 使用 Exchange 邮箱
[转]Thunderbird 使用 Exchange 邮箱 http://my.oschina.net/MaTech/blog/295238#OSC_h3_1 公司最近邮箱只支持Exchange模式, ...
- Winform 利用 Oracle.ManagedDataAccess访问Oracle数据库
Winform 利用 Oracle.ManagedDataAccess访问Oracle数据库时出现以下错误: Message = "每个配置文件中只允许存在一个 <configSect ...
- 网络基础 利用vnc viewer访问在vmware虚拟机上的linux
利用vnc viewer访问在vmware虚拟机上的linux by:授客 QQ:1033553122 Linux服务器为架设在VMware之上的虚拟机,那么可以直接使用VMware自带的vnc,而不 ...
- 【转】Java利用反射机制访问私有化构造器
Java利用反射机制访问私有化构造器 博客分类: java 我们都知道,当一个类的构造方法被设为私有的时候(private),在其他类中是无法用new来实例化一个对象的. 但是有一种方法可以把带有 ...
- 通达OA 越权访问-2013/2015版本
漏洞参考 http://wiki.0-sec.org/0day/%E9%80%9A%E8%BE%BEoa/9.html 复现 根据⽹上的通达 OA的源码找这些敏感地址,如: /general/syst ...
- exchange邮箱的”单点登陆“
在跟exchange集成登陆时,通常有这样的需求,用户需要点击邮件链接的时候直接打开,不再需要输入用户名密码,实现所谓的单点登陆. 通常有两种方式 1.form认证 登陆原理:用js模拟表单登陆 代码 ...
随机推荐
- Maven学习(十五)-----Maven常用命令
一.Maven常用命令 1.1.Maven 参数 -D 传入属性参数 -P 使用pom中指定的配置 -e 显示maven运行出错的信息 -o 离线执行命令,即不去远程仓库更新包 -X 显示ma ...
- python基础数据类型3
python_day_5 今日大纲: 1. dict 用大括号{} 括起来. 内部使用key:value的形式来保存数据 {'jay':'周杰伦', "jj":'林俊杰'} 注意: ...
- mnist手写数字识别(Logistic回归)
import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.linear_model import ...
- nhibernate中执行SQL语句
在有些时候,可能需要直接执行SQL语句.存储过程等,但nhibernate并没有提供一种让我们执行SQL语句的方法,不过可以通过一些间接的方法来实现. 下面给出一个在nhibernate中执行SQL语 ...
- 构建树形结构数据(全部构建,查找构建)C#版
摘要: 最近在做任务管理,任务可以无限派生子任务且没有数量限制,前端采用Easyui的Treegrid树形展示控件. 一.遇到的问题 获取全部任务拼接树形速度过慢(数据量大约在900条左右)且查询速度 ...
- TCP半开连接与半闭连接
半打开(Half-Open)连接和半关闭(Half-Close)连接.TCP是一个全双工(Full-Duplex)协议,因此这里的半连接"半"字就是相对于全双工的"全&q ...
- PSP DAILY的NABCD分析
1) N (Need 需求) PSP Daily 解决了用户(软件工程课上学生)记录例行报告.写每周PSP表格和统计的需求.潜在用户还有未来该课堂的学生和需要用PSP方法记录任务完成时间和统计的学习者 ...
- ssd a
Alpha版本测试报告 (1)测试计划 测试人员 工作安排 瞿煌人 制定测试计划,撰写测试报告 周建峰 执行测试,撰写测试报告 注:测试结果Y表示通过测试,N表示未通过测试. 功能 描述 效果 测试结 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第八周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第八周学习总结 教材学习内容总结 本周内容主要为书第十二章内容: 堆(附加属性的二叉树) 完全二叉树 (最小堆)对于 ...
- multipart/form-data post 方法提交表单,后台获取不到数据
这个和servlet容器有关系,比如tomcat等. 1.get方式 get方式提交的话,表单项都保存在http header中,格式是 http://localhost:8080/hello.do? ...