渗透基础——持续获得Exchange用户收件箱邮件的方法

  • A+
所属分类:安全文章

渗透基础——持续获得Exchange用户收件箱邮件的方法

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x00 前言

当我们获得了某个用户的口令或者hash,就能够读取这个用户的邮件。如果用户修改了密码,我们在不知道新密码的情况下,能否继续读取这个用户的邮件呢?站在防御的角度,当某个邮件用户的口令被泄露,在我们更换口令后,还需要做哪些操作来确保邮件数据的安全?

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x01简介

本文将要介绍以下内容:

· 添加转发规则持续获得Exchange用户收件箱邮件的方法

· 添加访问权限持续获得Exchange用户收件箱邮件的方法

· 添加邮件功能持续获得Exchange用户收件箱邮件的方法

· 开源代码

· 防御检测

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x02 添加转发规则持续获得Exchange用户收件箱邮件的方法

1.通过ecp添加转发规则

需要能够访问Exchange Control Panel(ECP)。

登录用户test1,选择organize email->inbox rules,如下图:

渗透基础——持续获得Exchange用户收件箱邮件的方法

选择Create a new rule for arriving messages...

Name为规则名称,这里设置为Forwardtest。

依次设置为[Apply to all messages],Forward the message to...,选择目标用户test2,如下图:

渗透基础——持续获得Exchange用户收件箱邮件的方法

至此,规则添加成功。

每当用户test1收到邮件,邮件会同时发送至用户test2的收件箱。

注:如果test1删除收件箱的邮件,test2不受影响。

2.通过SOAP XML message实现

SOAP格式参考:

https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/updateinboxrules-operation

创建规则和删除规则使用UpdateInboxRules。

创建转发邮件至用户test2的规则格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

读取规则使用GetInboxRules。

读取用户test1规则信息的格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

从返回结果中能够获得规则对应的RuleID。

删除指定规则的格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

其中AQAAAAAADPg为RuleId,可通过GetInboxRules获得。

注:本文后半部分会介绍完整的实现代码。

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x03 添加访问权限持续获得Exchange用户收件箱邮件的方法

注:支持收件箱,不支持发件箱

1.通过owa添加收件箱的访问权限

需要能够访问Outlook Web Access(OWA)

登录用户test1,选择Inbox->permissions...,如下图:

渗透基础——持续获得Exchange用户收件箱邮件的方法

添加用户test2,编辑权限

· Read: Full details

· Write: Edit all

· Delete access:None

· Other: Folder visible

也可以直接将Permission level设置为Editor,如下图:

渗透基础——持续获得Exchange用户收件箱邮件的方法

至此,权限设置完成。

登录用户test2,选择add shared folder...,输入用户名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/adddelegate-operation

注:

AddDelegate支持以下文件夹:

· CalendarFolderPermissionLevel

· TasksFolderPermissionLevel

· InboxFolderPermissionLevel

· ContactsFolderPermissionLevel

· NotesFolderPermissionLevel

· JournalFolderPermissionLevel

查看用户test1收件箱的访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

添加用户test2对用户test1收件箱的完全访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

修改访问权限,使用UpdateDelegate。

SOAP格式参考:

https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/updatedelegate-operation

设置用户test2对用户test1收件箱的完全访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

删除访问权限,使用RemoveDelegate。

SOAP格式参考:

https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/removedelegate-operation

移除用户test2对用户test1收件箱的访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

2.UpdateFolder

参考资料:

https://docs.microsoft.com/en-us/exchange/client-developer/exchange-web-services/how-to-set-folder-permissions-for-another-user-by-using-ews-in-exchange

查看用户test1收件箱的访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

添加用户test2对用户test1收件箱的完全访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

这里需要注意,UpdateFolder操作会覆盖原有的设置,所以删除操作等价于将权限配置信息还原

移除用户test2对用户test1收件箱的访问权限,格式如下:

渗透基础——持续获得Exchange用户收件箱邮件的方法

注:本文后半部分会介绍完整的实现代码。

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x04 添加邮件功能持续获得Exchange用户收件箱邮件的方法

1.通过eac添加转发功能

参考资料:

https://docs.microsoft.com/en-us/exchange/recipients/user-mailboxes/email-forwarding?view=exchserver-2016

需要能够访问Exchange admin center(EAC),即需要获得Exchange管理员权限并且能够访问Exchange Control Panel(ECP)

使用Exchange管理员登录ECP。

找到用户test1并编辑,如下图:

渗透基础——持续获得Exchange用户收件箱邮件的方法

选择Mailbox Features->Mail Flow->select View details。

选择Enable forwarding,添加用户,选择Deliver message to both forwarding address and mailbox,如下图:

渗透基础——持续获得Exchange用户收件箱邮件的方法

至此,转发功能设置完成。

每当用户test1收到邮件,邮件会同时发送至用户test2的收件箱。

注:如果test1删除收件箱的邮件,test2不受影响。

2.通过Exchange Management Shell实现

可通过以下三种方式启动Exchange Management Shell:

(1)在Exchange Server上直接运行Exchange Management Shell

(2)在Exchange Server上启动powershell,输入命令Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn;

(3)使用PSSession连接Exchange服务器

详细方法可以参考之前的文章《渗透基础——从Exchange服务器上搜索和导出邮件》

添加将用户test1收件箱的邮件转发至用户test2的powershell命令如下:

Set-Mailbox -Identity "test1" -ForwardingAddress "test2" -DeliverToMailboxAndForward $true

注:如果是将邮件转发至未经验证的外部电子邮件地址,需要将ForwardingAddress替换为ForwardingSmtpAddress。

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x05 开源代码

在实际使用过程中,如果只有邮件用户的hash,无法通过owa和ecp添加邮件转发规则。

但是我们可以先使用hash登录ews,再通过程序发送soap消息实现。

这里以之前开源的程序ewsManage.py为模板,添加了以下功能:

· getdelegateofinbox

· adddelegateofinbox

· updatedelegateofinbox

· removedelegateofinbox

· getdelegateofsentitems

· updatedelegateofsentitems

· restoredelegateofsentitems

· getinboxrules

· updateinboxrules

· removeinboxrules

github代码已更新,地址如下:

https://github.com/3gstudent/Homework-of-Python/blob/master/ewsManage.py

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x06 防御检测

1.查看单个邮件用户的转发规则

访问Exchange Control Panel(ECP)

登录,查看organize email->inbox rules

2.查看单个邮件用户的访问权限

访问Outlook Web Access(OWA)

登录,查看Inbox->permissions...

3.查看所有邮件用户的收件箱转发功能

运行Exchange Management Shell,查看命令如下:

Get-Mailbox|Select-Object UserPrincipalName,ForwardingAddress,ForwardingSmtpAddress

渗透基础——持续获得Exchange用户收件箱邮件的方法
0x07 小结

本文介绍了三种持续获得Exchange用户收件箱邮件的方法,开源通过SOAP XML message的实现代码,支持在只有hash的条件下使用,结合利用思路给出防御建议。

渗透基础——持续获得Exchange用户收件箱邮件的方法

渗透基础——持续获得Exchange用户收件箱邮件的方法

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: