发布于2022年11月8日3年前 0x00 前言 Exchange Center (EAC)是Exchange Server中基于Web的管理控制台。在渗透测试和利用中,EAC通常需要通过代码来操作。这张纸将打开一个副本。 操作EAC实现代码eacManage,记录开发细节,方便后续二次开发。 0x01 简介 本文将介绍以下内容: 程序实现原理 开源代码eacManage eacManage函数简介 0x02 EAC的基本操作 关于EAC的信息: https://docs . Microsoft . com/en-us/Exchange/architecture/client-access/Exchange-admin-center?view=exchserver-2019 1.添加邮箱用户和设置邮箱用户的权限 添加邮箱用户需要在收件人-邮箱页面下完成,如下图所示。 邮箱用户的权限设置需要在权限-管理员角色页面下完成,默认在管理员角色页面下建立多个管理员角色组,如下图所示。 每个管理员角色组可以通过设置角色属性来设置具体的权限,如下图所示。 将邮箱用户添加到指定的管理员角色组以获得相应的权限,并通过创建新的管理员角色组或设置现有管理员角色组的角色属性来修改权限。 2.导出所有邮箱用户列表 您需要在收件人-邮箱页面下操作,如下图所示 0x03 程序实现原理 目前交换服务器没有开放程序实现的接口,但是我们可以通过构造特定格式的POST包来实现。 您可以选择以下两种方式来抓取包: Chrome浏览器自带的数据包捕获工具可以直接捕获明文数据,只需在Chrome界面按F12选择网络即可。具体可参考之前的文章《渗透基础——通过Outlook Web Access(OWA)读取Exchange邮件的命令行实现》。 Wireshark,您需要配置一个证书来捕获明文数据。方法请参考之前的文章《渗透技巧——Pass the Hash with Exchange Web Service》。 具体的POST包格式如下: 1.查看所有管理员角色组 请求URL:/ECP/users groups/adminloregroups . SVC/getlist 参数: msExchEcpCanary 数据格式:应用程序/json 发送内容: {'filter':{'SearchText':''},' sort':{'Direction':0,' PropertyName':'Name'}} 2.新建管理员角色组 创建管理员角色组时,需要设置角色属性,即设置管理员角色组的权限。 它分为以下几个步骤: (1)获得每个角色的RawIdentity 请求URL:/ECP/用户组/管理角色. SVC/获取列表 参数: msExchEcpCanary 数据格式:应用程序/json 发送内容: {'filter':{},' sort':{'Direction':0,' PropertyName':'DisplayName'}} (2)创建管理员角色组 请求URL:/ECP/users groups/adminloregroups . SVC/new object 参数: msExchEcpCanary 数据格式:应用程序/json 发送内容: { 属性': { 姓名': 描述“:”, 聚合范围': { ' isoorganizationalunit ':false, ID ':' 00000000-0000-0000-0000-0000000000 ' }, 角色': [ { __type ':'身份:ECP ', 显示名称': “原始身份”: } ], } } 3.编辑管理员角色组: 将指定的用户添加到指定的管理员角色组,以便该用户可以获得相应的权限。 它分为以下几个步骤: (1)获得指定邮箱用户的RawIdentity 请求URL:/ECP/ddi/ddi service . SVC/getlist 参数: (计划或理论的)纲要 msExchEcpCanary 数据格式:应用程序/json 发送内容: { 过滤器': { 参数': { _ _ type ':' JsonDictionaryOfanyType:# Microsoft。' exchange . management . control panel ', SearchText':'[['anr ',' startsWith ',['' '']]' } }, 排序':{} } (2)获得指定管理员角色组的RawIdentity 请参见“1。查看所有管理员角色组”了解格式。 (3)编辑管理员角色组 请求URL:/ECP/users groups/adminloregroups . SVC/set object 参数: msExchEcpCanary 数据格式:应用程序/json 发送内容: { “身份”: { __type ':'身份:ECP ', 显示名称': “原始身份”: }, 属性': { 成员': [ { __type ':'身份:ECP ', 显示名称': “原始身份”: } ], “return object type”:1 } } 4.删除管理员角色组 请求URL:/ECP/用户组/管理员角色组。SVC/删除对象 参数: msExchEcpCanary 数据格式:应用程序/json 发送内容: { "身份": [ { _ _类型“:”身份:ECP ', 显示名称: "原始身份": } ], 参数':{} } 5.新建邮箱用户 请求URL:/ECP/DDI/DDI服务。SVC/新对象 参数: msExchEcpCanary (计划或理论的)纲要 数据格式:应用程序/json 发送内容: { 属性':{ 参数: { _ _ type ':' JsonDictionaryOfanyType:# Microsoft .交换。管理。'控制面板', “远程存档”:假, UserPrincipalName ': IsNewMailbox':'true ', 显示名称: 姓名: 明文密码: 6.删除指定邮箱用户 (1)获得指定用户的RawIdentity 格式见"3.编辑管理员角色组-(1)获得指定邮箱用户的原始身份" (2)删除指定邮箱用户 请求URL:/ECP/DDI/DDI服务。SVC/多对象执行 参数: msExchEcpCanary (计划或理论的)纲要 工作流程 数据格式:应用程序/json 发送内容: { "身份": [ { _ _类型“:”身份:ECP ', 显示名称: "原始身份": } ], 参数':{} } 7.导出所有邮箱信息 请求网址:/ECP/用户组/下载。aspx 参数: msExchEcpCanary (计划或理论的)纲要 手柄类 数据格式:application/x-www-form-urlencoded 发送内容: 工作流输出=显示名称,邮箱类型,PrimarySmtpAddresstitlesCSV=显示名称,邮箱类型,电子邮件地址PropertyList=DisplayName,RecipientTypeDetails,PrimarySmtpAddress 0x04 开源代码 完整实现代码已上传至github,地址如下: https://github。com/3g学生Python作业/blob/master/EAC管理器。巴拉圭 代码支持以下功能: ListAdminRoles 新的最小角色 编辑管理员角色 删除管理员角色 添加邮箱 删除邮箱 ExportAllMailbox 在程序实现上,首先需要登录操作获得参数msExchEcpCanary的内容,具体细节如下: (1)访问/owa/auth.owa 细节可参考之前的文章《渗透基础——通过Outlook Web Access(OWA)读取Exchange邮件的命令行实现》 这里新加了一个自动识别用户是否初次登录的功能,如果是初次登录的邮箱用户,需要选择时区和语言才能生效 (2)访问/ecp 在返回的饼干中获得参数msExchEcpCanary的内容 0x05 小结 本文开源了操作一个抓取光碟音轨的转换工具(精确的音频副本的缩写)的实现代码eacManage,记录开发细节,便于后续的二次开发,可应用到多个漏洞(如CVE 2020-16875,CVE 2021-24085,CVE 2021-26855,CVE 2021-27065) 留下回复
创建帐户或登录后发表意见