发布于2022年11月8日3年前 0x00 前言 Exchange ActiveSync是一种Microsoft Exchange同步协议,用于在邮件服务器和移动设备之间同步邮件资源。 亚当卢瑟福和大卫奇斯蒙在他们的文章中介绍了通过Exchange ActiveSync访问内部文件共享的方法 文章地址: https://实验室。f-安全。com/archive/access-内部文件共享-通过exchange-ActiveSync/ 本文将要基于他们的研究,介绍通过Exchange ActiveSync访问内部文件共享的细节,记录研究心得。 0x01 简介 本文将要介绍以下内容: 通过Exchange ActiveSync验证用户邮箱口令 Exchange ActiveSync开源代码测试 通过Exchange ActiveSync访问内部文件共享的细节 防御检测 0x02 基础知识 Exchange ActiveSync是一种Microsoft Exchange同步协议,该协议经过优化,以适用于高延迟和低宽带网络。 该协议基于超文本传送协议和XML,使移动设备可以访问其电子邮件、日历、联系人和任务,并且在脱机工作时仍可以继续访问这些信息。 简单理解,计算机用户通过owa(Outlook Web Access)访问邮件资源,手机用户通过eas(交易所动态同步)访问邮件资源 0x03 通过Exchange ActiveSync验证用户邮箱口令 默认对应的URL:/Microsoft-Server-ActiveSync 可以直接通过浏览器进行访问,提示输入用户名和口令 输入正确的用户名和口令后,返回内容如下图 如果没有凭据,可直接通过wget命令获得服务器信息,命令实例: wget https://192。168 .1 .1/Microsoft-Server-ActiveSync-无检查-证书-调试 返回结果如下图 为了能够通过脚本实现口令验证,这里需要使用选择方法,如果凭据有效,返回状态码200 页眉部分加入超文本传送协议基本认证(基本认证),格式为授权:基本 为用户名:密码用base64编码后的字符串 计算机编程语言实现的完整代码已上传至github,地址如下: https://github。com/3g学生Python作业/blob/master/eas检查。巴拉圭 0x04 Exchange ActiveSync开源代码测试 1.https://github.com/solbirn/pyActiveSync 需要使用Python2 为了能够正常测试,还需要如下设置: (1)同级目录下新建文件proto_creds.py 内容如下: as_server='192.168.1.1 ' as_user='user1 ' as_pass='password1 ' (2)取消对加密套接字协议层证书的验证 修改pyActiveSync \ objects \ msashttp。巴拉圭 添加引用导入安全套接层 将httplib .https连接(自助服务器,自助端口) 替换为httplib .HTTPSConnection(self.server,self.port,context=ssl ._create_unverified_context()) (3)修改pyActiveSync/dev_playground.py 去掉"建议的联系人"相关代码 分别运行dev_playground.py和杂项测试,对应不同的功能 2.https://github.com/FSecureLABS/peas 需要使用Python2 基于pyActiveSync,添加了导出邮件和访问共享文件的功能 常用功能如下: (1)验证凭据 代码示例: 进口豌豆 #创建一个豌豆客户端的实例。 客户=豌豆。豌豆() #禁用证书验证,以便自签名证书不会导致错误。 client.disable _证书_验证() #设置要连接的凭据和服务器。 client.set_creds({ 服务器':' 192.168.1.1 ', 用户':'测试1 ', 密码':' 123456789 ', }) #检查凭证是否被接受。 打印('验证结果:',client.check_auth()) (2)读取邮件 读取收件箱邮件的代码示例: 进口豌豆 进口关于 #创建一个豌豆客户端的实例。 客户=豌豆。豌豆() #禁用证书验证,以便自签名证书不会导致错误。 client.disable _证书_验证() #设置要连接的凭据和服务器。 client.set_creds({ 服务器':' 192.168.1.1 ', 用户':'测试1 ', 密码':' 123456789 ', }) #检索电子邮件。 emails=client.extract_emails() 对于电子邮件中的电子邮件: 打印(' \r\n ') pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 打印('收件人:'数据[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 打印(' From:' data[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 打印('主题:'数据[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 打印('接收日期:'数据[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) print('DisplayTo:' data[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) print('ThreadTopic:' data[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 打印('重要性:'数据[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) print('Read:' data[0]) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 对于数据中的名称: 打印("附件:"名称) pattern _ data=re . compile(r '(r .*?)') data=pattern_data.findall(电子邮件) 打印('对话索引:'数据[0]) index1=email.find(' ') index2=email.find(' ') filename=data[0]' . 1 '' html ' 打印('[ ]将正文保存到% s“%(文件名)) 用打开(文件名,' w ')作为文件对象: 文件_对象.写入(电子邮件[索引1:索引2 7]) 这里需要注意返回的邮件内容中,邮件正文部分的格式为html,我的代码实现了将正文部分提取并保存成超文本标记语言格式,以唯一的会话索引作为文件名 如果想要获得发件箱的邮件信息,需要修改py_activesync_helper.py,修改的细节可参考https://github。com/sol birn/pyActiveSync/blob/master/pyActiveSync/dev _ playground。py # L150 (3)访问文件共享 列出共享文件的代码示例: 进口豌豆 #创建一个豌豆客户端的实例。 客户=豌豆。豌豆() #禁用证书验证,以便自签名证书不会导致错误。 client.disable _证书_验证() #设置要连接的凭据和服务器。 client.set_creds({ 服务器':' 192.168.1.1 ', 用户':'测试1 ', 密码':' 123456789 ', }) #检索文件共享目录列表。 列表=客户端。get _ unc _ listing(r ' \ \ dc1 \ SYSVOL ') 对于列表中的数据: 打印(' \r\n ') 对于键,data.items()中的值: 打印(“{key}:{value}”.格式(键=键,值=值)) 读取指定共享文件内容的代码示例: 进口豌豆 #创建一个豌豆客户端的实例。 客户=豌豆。豌豆() #禁用证书验证,以便自签名证书不会导致错误。 client.disable _证书_验证() #设置要连接的凭据和服务器。 client.set_creds({ 服务器':' 192.168.1.1 ', 用户':'测试1 ', 密码':' 123456789 ', }) 数据=客户端。get _ unc _ file(r ' \ \ dc1 \ SYSVOL \ test。D2 945 f-00 c 04 FB 984 f 9 } \ GPT .INI’) 打印(数据) 0x05 通过Exchange ActiveSync访问内部文件共享的细节 1.列出共享文件 访问的统一资源定位器示例: https://192 .168 .1 .1/微软-服务器-动态同步?cmd=search user=test1设备id=123456设备类型=Python " 参数说明如下: Cmd=搜索,表示命令类型为搜索 用户=测试1,表示用户名为测试一 设备Id=123456,表示设备ID,会被Exchange ActiveSync记录 DeviceType=Python,表示设备类型,会被Exchange ActiveSync记录 方法为邮政请求 页眉内容示例: 内容类型“:”应用程序/vnd。女士同步。wbxml ', 用户代理: MS-ASProtocolVersion' : '14.1 ', 接受语言':'美国, 授权:Basic dxnlcgelm 0 fwyxnzd 29 yzde=' 身体内容示例: 需要将可扩展标记语言格式转换为无线应用协议二进制XML(WBXML) 可扩展标记语言格式示例: ?可扩展标记语言版本='1.0 '编码='utf-8 '? 文档库\\myserver\myshare0-999 可扩展标记语言格式参考: https://份文件。微软。com/en-us/open specs/exchange _ server _ protocols/ms-asdoc/f8a 23578-0ca 4-4b 36-aa07-3d CAC 5b 83881 无线应用协议二进制XML(WBXML)算法可参考: https://份文件。微软。com/en-us/open specs/exchange _ server _ protocols/ms-aswbxml/39973 eb1-1e 40-4e b5-ac74-42781 C5 a33 BC 2.读取指定共享文件内容 访问的统一资源定位器示例:https://192 .168 .1 .1/Microsoft-Server-ActiveSync?cmd=ItemOperationsUser=test1设备id=123456设备类型=Python " 参数说明如下: Cmd=项目操作,表示命令类型为项目操作 用户=测试1,表示用户名为测试一 设备Id=123456,表示设备ID,会被Exchange ActiveSync记录 DeviceType=Python,表示设备类型,会被Exchange ActiveSync记录 方法为邮政请求 页眉内容示例: 内容类型“:”应用程序/vnd。女士同步。wbxml ', 用户代理: MS-ASProtocolVersion' : '14.1 ', 接受语言':'美国, 授权:Basic dxnlcgelm 0 fwyxnzd 29 yzde=' 身体内容示例: 需要将可扩展标记语言格式转换为无线应用协议二进制XML (WBXML) 可扩展标记语言格式示例: ?可扩展标记语言版本='1.0 '编码='utf-8 '? 文档库\ \ EXCH-D-810 \文档共享\ Word文档。docx 可扩展标记语言格式参考: https://份文件。微软。com/en-us/open specs/exchange _ server _ protocols/ms-asdoc/e7a 91040-42 f1-475 c-ba C3-d 83 D7 DD 9652 f 我基于豌豆的代码,提取出访问共享文件的功能,生成了一个免安装的版本,地址如下: https://github.com/3gstudent/easBrowseSharefile 代码支持两个功能: 列出共享文件 读取指定共享文件内容 注: 访问域内共享目录SYSVOL时,路径要加上域控制器的计算机名,而不是域名 正确的写法: \ \ dc1 \ SYSVOL \ test。D2 945 f-00 c 04 FB 984 f 9 } \ GPT .初始化设置文件的后缀名 错误的写法: \ \测试。com \ SYSVOL \ test。D2 945 f-00 c 04 FB 984 f 9 } \ GPT .初始化设置文件的后缀名 如果掌握了域控制器的计算机名,可以通过Exchange ActiveSync从外网访问域内共享目录SYSVOL中的文件 0x06 防御检测 通过Exchange ActiveSync读取邮件和访问共享目录会留下设备信息,设备信息对应的代码位置: https://github。com/FSecureLABS/peas/blob/master/peas/pyActiveSync/objects/msashttp。py # L25 查看设备信息的两个方法 1.登录交换管理中心 选择邮箱用户-移动设备下的查看详细信息,如下图 2.使用交换命令行管理程序 命令如下: Get-ActiveSyncDevice|fl用户显示名称,设备Id,设备类型,设备用户代理 通过Exchange ActiveSync访问共享文件的日志位置: % exchange installpath % Logging \ http proxy \ Eas 关闭通过Exchange ActiveSync访问共享文件的方法: 使用交换命令行管理程序,命令如下: set-MobileDeviceMailboxPolicy-Identity:Default-UNCAccessEnabled:$ false-wssaccesenabled:$ false 参考资料: https://份文件。微软。com/en-us/powershell/module/exchange/set-mobiledevicemailboxpolicy?view=exchange-ps 查看配置的命令:Get-MobileDeviceMailboxPolicy | fl 0x07 小结 本文介绍了通过Exchange ActiveSync访问内部文件共享的细节,基于豌豆的代码,提取出访问共享文件的功能,生成了一个免安装的版本,结合利用思路给出防御建议。 留下回复
创建帐户或登录后发表意见