- 前言
- 环境搭建
- 工具
- 分析
- 参考文章
这里只是简单分析漏洞产生的代码逻辑,因为不熟悉exchange的业务逻辑,所以分析不会很深入,争取以后慢慢补充
环境搭建| 主机 | 机器名 | ip | 用户 | 密码 | 版本 |
|---|---|---|---|---|---|
| 域控1 | ad1.test.com | 192.168.164.174 | administrator | Aa1234 | win2012r2 |
| exchange2016-cu11 | mail1.test.com | 192.168.164.173 | administrator | Aa1234 | win2012r2 |
| 域内机器 | user.test.com | 192.168.164.129 | user1 | Uu1234. | win2008r2 |
| kali | 192.168.152.45 | 192.168.164.128 | xxx | xxx | kali |
dnspy
https://github.com/0xd4d/dnSpy/releases分析
首先通过查看exp,找到漏洞的触发点位于/EWS/Exchange.asmx
定位到文件C:Program FilesMicrosoftExchange ServerV15ClientAccessexchwebewsExchange.asmx
对应代码
<%@ServiceHost Service="Microsoft.Exchange.Services.Wcf.EWSService" Factory="Microsoft.Exchange.Services.Wcf.EWSServiceHostFactory" %>
用到的dll文件存储在C:Program FilesMicrosoftExchange ServerV15ClientAccessexchwebewsbin
将dll拖入dnspy反编译
这里如果能够动态调试自然是最好,不过由于我的环境有问题,dnspy打不开,所以选择静态代码分析,
https://github.com/dotnet/wpf/issues/2009
可以看到调用Microsoft.Exchange.Services.Wcf.EWSService方法
这个方法在Microsoft.Exchange.Services.EwsHandler.dll下的Microsoft.Exchange.Services.Wcf.EWSService
dnspy调试参考https://www.cnblogs.com/Bruce_H21/p/12307182.html
附加进程
之后点击下面的模块,双击反编译
由于这里是初始化调用所以在这里下断点
xml解析部分soap格式参考https://docs.microsoft.com/en-us/exchange/client-developer/web-service-reference/ews-xml-elements-in-exchange
首先解析xml,调用GetXmlSerializer方法
解析版本信息进行对比
解析body
逐层解析methodName
在payload触发是在PushSubscriptionRequest模块
所以在Microsoft.Exchange.Services.Core.Types下PushSubscriptionRequest下断点
由于这个接口是Exchange允许任何用户为推送订阅指定所需的URL,这个url就是推送订阅的url,所以跟踪这个url,发现在如下位置调用,下断点
在这里把url赋值给clienturl,并且配置参数,跟踪一下clienturl,发现这个BeginSendNotification方法和实现功能很像,跟入
下断点
使用payload触发
解析xml之后会会调用set方法设置url,之后等待触发,
这里的身份认证使用的CredentialCache.DefaultCredentials是exchange的机器账户
通过抓包查看
所以使用exchange的机器账户可以用来中继到ldap,由于http默认不需要签名,所以也不需要结合CVE-2019-1040来使用,或者可以中继到ews,这里由于Exchange Server 默认
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsaDisableLoopbackCheck=1
这个注册表功能参考https://docs.microsoft.com/en-US/troubleshoot/windows-server/networking/accessing-server-locally-with-fqdn-cname-alias-denied
就可以中继回自身的ews服务进行攻击
https://www.freebuf.com/vuls/194083.html
https://daiker.gitbook.io/windows-protocol/ntlm-pian/7#4-cve-2018-8581



