0x00 前言
当我们获得了某个用户的口令或者hash,就能够读取这个用户的邮件。 如果用户修改了密码,我们在不知道新密码的情况下,能否继续读取这个用户的邮件呢? 站在防御的角度,当某个邮件用户的口令被泄露,在我们更换口令后,还需要做哪些操作来确保邮件数据的安全?
0x01简介
本文将要介绍以下内容:
· 添加转发规则持续获得Exchange用户收件箱邮件的方法
· 添加访问权限持续获得Exchange用户收件箱邮件的方法
· 添加邮件功能持续获得Exchange用户收件箱邮件的方法
· 开源代码
· 防御检测
0x02 添加转发规则持续获得Exchange用户收件箱邮件的方法
1.通过ecp添加转发规则
需要能够访问Exchange Control Panel(ECP)。
登录用户test1,选择organize email->inbox rules,如下图:
选择Create a new rule for arriving messages...
Name为规则名称,这里设置为Forwardtest。
依次设置为[Apply to all messages],Forward the message to...,选择目标用户test2,如下图:
至此,规则添加成功。
每当用户test1收到邮件,邮件会同时发送至用户test2的收件箱。
注:如果test1删除收件箱的邮件,test2不受影响。
2.通过SOAP XML message实现
SOAP格式参考:
创建规则和删除规则使用UpdateInboxRules。
创建转发邮件至用户test2的规则格式如下:
读取规则使用GetInboxRules。
读取用户test1规则信息的格式如下:
从返回结果中能够获得规则对应的RuleID。
删除指定规则的格式如下:
其中AQAAAAAADPg为RuleId,可通过GetInboxRules获得。
注:本文后半部分会介绍完整的实现代码。
0x03 添加访问权限持续获得Exchange用户收件箱邮件的方法
注:支持收件箱,不支持发件箱
1.通过owa添加收件箱的访问权限
需要能够访问Outlook Web Access(OWA)
登录用户test1,选择Inbox->permissions...,如下图:
添加用户test2,编辑权限
· Read: Full details
· Write: Edit all
· Delete access:None
· Other: Folder visible
也可以直接将Permission level设置为Editor,如下图:
至此,权限设置完成。
登录用户test2,选择add shared folder...,输入用户名test1,获得用户test1的收件箱访问权限。
注:如果test1删除收件箱的邮件,test2无法读取删除的邮件。
2.通过SOAP XML message实现
添加访问权限,使用AddDelegate或UpdateFolder
1.AddDelegate
SOAP格式参考:
注:
AddDelegate支持以下文件夹:
· CalendarFolderPermissionLevel
· TasksFolderPermissionLevel
· InboxFolderPermissionLevel
· ContactsFolderPermissionLevel
· NotesFolderPermissionLevel
· JournalFolderPermissionLevel
查看用户test1收件箱的访问权限,格式如下:
添加用户test2对用户test1收件箱的完全访问权限,格式如下:
修改访问权限,使用UpdateDelegate。
SOAP格式参考:
设置用户test2对用户test1收件箱的完全访问权限,格式如下:
删除访问权限,使用RemoveDelegate。
SOAP格式参考:
移除用户test2对用户test1收件箱的访问权限,格式如下:
2.UpdateFolder
参考资料:
查看用户test1收件箱的访问权限,格式如下:
添加用户test2对用户test1收件箱的完全访问权限,格式如下:
这里需要注意,UpdateFolder操作会覆盖原有的设置,所以删除操作等价于将权限配置信息还原
移除用户test2对用户test1收件箱的访问权限,格式如下:
注:本文后半部分会介绍完整的实现代码。
0x04 添加邮件功能持续获得Exchange用户收件箱邮件的方法
1.通过eac添加转发功能
参考资料:
需要能够访问Exchange admin center(EAC),即需要获得Exchange管理员权限并且能够访问Exchange Control Panel(ECP)
使用Exchange管理员登录ECP。
找到用户test1并编辑,如下图:
选择Mailbox Features->Mail Flow->select View details。
选择Enable forwarding,添加用户,选择Deliver message to both forwarding address and mailbox,如下图:
至此,转发功能设置完成。
每当用户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。
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
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
0x07 小结
本文介绍了三种持续获得Exchange用户收件箱邮件的方法,开源通过SOAP XML message的实现代码,支持在只有hash的条件下使用,结合利用思路给出防御建议。
本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址