HACK7YD 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 当我们得到一个用户的密码或散列时,我们可以读取这个用户的电子邮件。 如果用户更改了密码,我们可以在不知道新密码的情况下继续阅读该用户的邮件吗? 从防御的角度来说,当某个邮箱用户的密码被泄露后,我们需要做哪些动作来保证修改密码后的邮箱数据安全? 0x01简介 本文将介绍以下内容: 添加转发规则:一种持续获取Exchange用户收件箱邮件的方法 添加访问权限。如何持续获取Exchange用户的收件箱邮件 添加邮件功能从Exchange用户的收件箱中连续获取邮件的方法 添加用户权限。如何持续获取Exchange用户的邮件 开放源代码 防御探测 0x02 添加转发规则持续获得Exchange用户收件箱邮件的方法 1.通过ecp添加转发规则 需要Exchange控制面板(ECP)访问权限。 用户test1登录并选择组织电子邮件-收件箱规则,如下图所示。 选择为收到的邮件创建新规则。 Name是规则名称,这里设置为Forwardtest。 将其设置为[应用于所有邮件],将邮件转发给.并选择目标用户test2,如下图所示。 至此,规则添加成功。 每当用户test1收到电子邮件时,该电子邮件将同时发送到用户test2的收件箱。 注: 如果test1从收件箱中删除消息,test2不会受到影响。 2.通过SOAP XML message实现 SOAP格式参考: https://docs . Microsoft . com/en-us/exchange/client-developer/we b-service-reference/updateinbox rules-operation 使用UpdateInboxRules创建和删除规则 为用户test2创建转发邮件的规则格式如下: ?xml版本='1.0 '编码='utf-8 '? [email protected] 读取规则使用GetInboxRules。 读取用户test1规则信息的格式如下: ?xml版本='1.0 '编码='utf-8 '? [email protected] 可以从返回的结果中获得对应于该规则的RuleID。 指定删除规则的格式如下: ?xml版本='1.0 '编码='utf-8 '? trueAQAAAAAADPg AQAAAAAADPg是RuleId,可以通过GetInboxRules获得。 注: 本文的后半部分将介绍完整的实现代码。 0x03 添加访问权限持续获得Exchange用户收件箱邮件的方法 注: 支持收件箱,但不支持发件箱。 1.通过owa添加收件箱的访问权限 需要Outlook Web Access(OWA)。 登录到用户test1并选择收件箱-权限.如下图所示 添加用户test2,编辑权限 阅读:全部细节 写:编辑全部 删除访问权限:无 其他:文件夹可见 也可以直接设置权限级别为编辑,如下图所示。 至此,权限设置完成。 登录到用户test2,选择添加共享文件夹.输入用户名test1,并访问用户test1的收件箱。 注: 如果test1删除了收件箱中的消息,test2就不能读取被删除的消息。 2.通过SOAP XML message实现 添加访问权限,请使用AddDelegate或UpdateFolder。 1.AddDelegate SOAP格式参考: https://docs . Microsoft . com/en-us/exchange/client-developer/web-service-reference/add delegate-operation 注: AddDelegate支持以下文件夹: calendarfolderperpermissionlevel TasksFolderPermissionLevel inbox folderperpermissionlevel ContactsFolderPermissionLevel NotesFolderPermissionLevel journalfolderperpermissionlevel 按照以下格式检查用户test1收件箱的访问权限: ?xml版本='1.0 '编码='utf-8 '? [email protected] 按照以下格式将用户test2的完全访问权限添加到用户test1的收件箱中: ?xml版本='1.0 '编码='utf-8 '? test1 @ test . com test2 @ test . comeditorfalsaldelegatesandme 修改访问权限并使用UpdateDelegate。 SOAP格式参考: https://docs . Microsoft . com/en-us/exchange/client-developer/web-service-reference/update delegate-operation 按照以下格式设置用户test2对用户test1的收件箱的完全访问权限: ?xml版本='1.0 '编码='utf-8 '? test1 @ test . com test2 @ test . comeditorfalstruedelegatesandme 删除访问权限并使用RemoveDelegate。 SOAP格式参考: https://docs . Microsoft . com/en-us/exchange/client-developer/web-service-reference/remove delegate-operation 按照以下格式删除用户test2对用户test1收件箱的访问权限: ?可扩展标记语言版本='1.0 '编码='utf-8 '? [email protected]@test.com 2.UpdateFolder 参考资料: https://份文件。微软。com/en-us/exchange/client-developer/exchange-web-services/how-to-set-folder-permissions-for-other-user-by-using-EWS-in-exchange 查看用户测试一收件箱的访问权限,格式如下: ?可扩展标记语言版本='1.0 '编码='utf-8 '? IdOnly 添加用户测试2对用户测试一收件箱的完全访问权限,格式如下: ?可扩展标记语言版本='1.0 '编码='utf-8 '? defaultfalsefalsefalsenonenonenonenoneonnomous falsefalsefalsenonenonetest 2 @ test。喜剧演员 这里需要注意,更新文件夹操作会覆盖原有的设置,所以删除操作等价于将权限配置信息还原 移除用户测试2对用户测试一收件箱的访问权限,格式如下: ?可扩展标记语言版本='1.0 '编码='utf-8 '? 默认错误错误错误错误错误错误诺诺诺诺诺诺诺诺诺诺默斯错误错误错误错误错误壬烯酮 注: 本文后半部分会介绍完整的实现代码 3.通过Powershell实现 需要在交换服务器上执行管理邮件的命令 首先需要添加依赖包: 添加-PSSnapin Microsoft .交换。管理。powershell。抢购中; 注: 不同交换版本对应的管理单元名称不同: exchange 2007:Microsoft的附加PS管理单元.交换。管理。powershell。admin exchange 2010:Microsoft插件PS管理单元.交换。管理。powershell。e 2010 Exchange 2013 2016:添加-微软的PSSnapin .交换。管理。powershell。抢购中; 查看用户测试2收件箱的访问权限: get-mailbox folder permission-Identity test2 @ test。com:\ Inbox | fl 添加用户测试2对用户测试一收件箱的读取权限: add-mailbox folder permission-Identity test1 @ test。com:\收件箱-用户[email protected]访问权限所有者 移除用户测试2对用户测试一收件箱的读取权限: remove-mailbox folder permission-Identity test1 @ test。com:\收件箱-用户[email protected]确认:$false 0x04 添加邮件功能持续获得Exchange用户收件箱邮件的方法 1.通过eac添加转发功能 参考资料: https://份文件。微软。com/en-us/exchange/recipients/user-mail-forwarding?view=exchserver-2016 需要能够访问交换管理中心(选管会),即需要获得交换管理员权限并且能够访问外汇控制面板(ECP) 使用交换管理员登录工程更改程序 找到用户测试一并编辑,如下图 选择邮箱功能-邮件流-选择查看详细信息 选择启用转发,添加用户,选择将邮件发送到转发地址和邮箱,如下图 至此,转发功能设置完成 每当用户测试一收到邮件,邮件会同时发送至用户测试2的收件箱 注: 如果测试一删除收件箱的邮件,测试2不受影响 2.通过Exchange Management Shell实现 可通过以下三种方式启动交换命令行管理程序: (1)在交换服务器上直接运行交换命令行管理程序 (2)在交换服务器上启动powershell,输入命令添加-PSSnapin Microsoft .交换。管理。powershell。抢购中; (3)使用压力连接交换服务器 详细方法可以参考之前的文章《渗透基础——从Exchange服务器上搜索和导出邮件》 添加将用户测试一收件箱的邮件转发至用户测试2的powershell命令如下: set-Mailbox-Identity ' test1 '-转发地址' test2 '-DeliverToMailboxAndForward $ true 注: 如果是将邮件转发至未经验证的外部电子邮件地址,需要将转发地址替换为ForwardingSmtpAddress 0x05 添加用户权限持续获得Exchange用户邮件的方法 参考资料: https://份文件。微软。com/en-us/powershell/module/exchange/add-mail box权限?view=exchange-ps 添加将用户测试一对用户测试2邮箱完全访问权限的powershell命令如下: add-邮箱权限-身份“test2”-用户“test1”-访问权限完全访问-继承类型全部 查看用户测试2邮箱访问权限的powershell命令如下: get-mailbox权限-身份测试2 移除将用户测试一对用户测试2邮箱完全访问权限的powershell命令如下: remove-mailbox permission-Identity ' test2 '-User ' test1 '-access rights full access-Confirm:$ false 注: 添加-收件人权限只能在基于云的服务中使用,参考资料: https://docs . Microsoft . com/en-us/powershell/module/exchange/add-recipient permission?view=exchange-ps 0x06 开源代码 在实际使用中,如果只有邮件用户的hash,是无法通过owa和ecp添加邮件转发规则的。 但是我们可以先用hash登录ews,然后通过程序发送soap消息。 这里,使用以前开放的源代码程序ewsManage.py作为模板,添加了以下函数: getdelegateofinbox adddelegateofinbox updatedelegateofinbox removedelegateofinbox getdelegateofsentitems updatedelegateofsentitems restoredelegateofsentitems getinboxrules updateinboxrules removeinboxrules Github代码已更新,地址如下: https://github . com/3g student/Homework-of-Python/blob/master/EWS manager . py 0x07 防御检测 1.查看单个邮件用户的转发规则。 访问Exchange控制面板(ECP) 登录并查看整理电子邮件收件箱规则。 2.检查单个邮件用户的访问权限。 访问Outlook Web Access(OWA) 登录并查看收件箱-权限。 3.检查所有邮件用户的收件箱转发功能。 运行Exchange命令行管理程序并查看命令,如下所示: get-Mailbox | Select-Object UserPrincipalName,ForwardingAddress,ForwardingSmtpAddress 0x08 小结 介绍了连续获取Exchange用户收件箱邮件的四种方法。SOAP XML消息的开源代码支持只使用hash,并基于利用的思想给出防御建议。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子