0x00 前言
在今年3月份,微软公布了多个Microsoft Exchange的高危漏洞。ProxyLogon是Exchange历史上最具影响力的漏洞之一,有上千台Exchange服务器被植入了webshell后门。
0x01 漏洞描述
CVE-2021-26855是一个SSRF漏洞,利用该漏洞可以绕过Exchange的身份验证,CVE-2021-27065是一个文件写入漏洞。二者结合可以在未登录的状态下写入webshell。
0x02 影响范围
Exchange Server 2019 < 15.02.0792.010
Exchange Server 2019 < 15.02.0721.013
Exchange Server 2016 < 15.01.2106.013
Exchange Server 2013 < 15.00.1497.012
0x03 调试环境及工具
版本 | |
---|---|
操作系统 | Windows Server 2012 |
应用名称 | Microsoft Exchange Server 2016 |
.NET反编译调试器 | DnSpy |
.NET反编译对比器 | Telerik |
【一>所有资源获取<一】 1、200份很多已经买不到的绝版电子书 2、30G安全大厂内部的视频资料 3、100份src文档 4、常见安全面试题 5、ctf大赛经典题目解析 6、全套工具包 7、应急响应笔记
0x04 CVE-2021-26855 SSRF漏洞
1. 补丁查看
通过对比补丁内容,快速定位漏洞位置。
Exchange版本号查看:
打开 ExchangeManagement Shell,并执行命令:
Get-ExchangeServer | fl name,edition,admindisplayversion
![](https://img-blog.csdnimg.cn/img_convert/fba9f9a7dbb280e241dbae78b058c6e1.png)
版本对应关系可以在微软官网中查看:
![](https://img-blog.csdnimg.cn/img_convert/639660f75adb4bdf1ad56f728e867308.png)
搜索对应版本的补丁(Exchange 2016 RTM的补丁未找到,所以直接用 Exchange CU11 的补丁分析):
![](https://img-blog.csdnimg.cn/img_convert/222694c1d5a6681b40b273528d3637aa.png)
下载补丁KB5000871,使用winrar解压cab文件,解压后是一个msp文件,使用7-zip 对msp格式的文件内容进行提取。
![](https://img-blog.csdnimg.cn/img_convert/5168efcc7a06627e74130696cecfa192.png)
使用Telerik 对补丁内容做对比,内容有差异的dll文件如下,漏洞存在于Microsoft.Exchange.FrontEndHttpProxy.dll中:
![](https://img-blog.csdnimg.cn/img_convert/d26c0b83f4b3b350dc2aadfc18772bda.png)
使用Reflector对dll文件反编译并导出源码,方便对关键字进行搜索。
2. 漏洞调试
使用dnSpy对Microsoft.Exchange.FrontEndHttpProxy.dll 文件进行反编译,定位到class BEResourceRequestHandler,下断点。
![](https://img-blog.csdnimg.cn/img_convert/95ad92a93128b65c7a263540f218f567.png)
点击 【调试】–>【附加到进程】 MSExchangeECPAppPool,使用ProcessExplorer查看对应的进程ID。
![](https://img-blog.csdnimg.cn/img_convert/1f6f114224db20408958136bb0beafe3.png)
使用进程ID进行过滤(注:必须以管理员权限运行dnSpy,否则无法获取进程信息)。
![](https://img-blog.csdnimg.cn/img_convert/d26fa2a17c9215edb7c20b9cd1e30554.png)
在BackEndCookieEntryParse 的TryParse()函数下断点,bp发请求,触发断点。
![](https://img-blog.csdnimg.cn/img_convert/c80304a830595bedf8f21b31d26a8f07.png)
![](https://img-blog.csdnimg.cn/img_convert/bd7ad159869ee79c671c5fc150f60e6d.png)
首先会根据uri来判断请求的协议类型,如果请求协议为ecp,即请求uri为/ecp/。跟踪进入CanHandle()函数,验证cookie及uri的合法性。
![](https://img-blog.csdnimg.cn/img_convert/e8b0b43956178e83c3db742e8658851b.png)
获取cookie中X-BEResource的值
![](https://img-blog.csdnimg.cn/img_convert/37d9253ad8e2e5008bb0306254b717b6.png)
判断uri 是否合法
![](https://img-blog.csdnimg.cn/img_convert/633063ef9fb158257b6218067ef773f0.png)
uri以 js,css,html,flt,xap等后缀结尾的文件(没有验证文件是否存在)都是合法的。拼接后 /ecp/xx.(js|css) 等都是有效uri。
接着对X-BEResource的值进行处理
![](https://img-blog.csdnimg.cn/img_convert/ed09ca4bfe98918c72a2e78d835d5f06.png)
![](https://img-blog.csdnimg.cn/img_convert/95745658cbe74f7881b51f5cec621e66.png)
获取到X-BEResource的值
![](https://img-blog.csdnimg.cn/img_convert/768822c3fddd72eb779e92048a635dd3.png)
并使用‘~’分割得到数组array
![](https://img-blog.csdnimg.cn/img_convert/797ec74d69d01d57504901f8efe1d59f.png)
![](https://img-blog.csdnimg.cn/img_convert/1e51a43c38d205981a78ede714761ba2.png)
其中array[0] 为fqdn;array[1] 为version
接着进行版本比较
![](https://img-blog.csdnimg.cn/img_convert/4816508c9f71523722f962078c8d0c5b.png)
![](https://img-blog.csdnimg.cn/img_convert/f142acf8623e0a1d4f1861b51f3653d0.png)
如果版本的值小于 E15MinVersion,进入if判断语句,并将类成员变量ProxyToDownLevel赋值为True,之后会调用身份认证函数EcpProxyRequestHandler.AddDownLevelProxyHeaders进行身份认证,如果没有通过认证,则返回401错误。同理如果version大于E15MinVersion则跳过if判断从而绕过身份认证。
经过一系列的解析
![](https://img-blog.csdnimg.cn/img_convert/2ac2bd782c1c9d97be8589bd9250f324.png)
![](https://img-blog.csdnimg.cn/img_convert/8cda9c404e11831a892e538352261bc0.png)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-582TsK39-1638085393980)(upload-images.jianshu.io/upload_imag…)]
可以看到host的值是win2012,这个值我们可控,最后经过一系列的拼接得到AbsoluteUri的值:https://host/autodiscover/autodiscover.xml ,autodiscover.xml 文件中包含有LegacyDN 的值。
进入CreateServerRequest函数,访问uri,
![](https://img-blog.csdnimg.cn/img_convert/65bb54ac43779d620ab6105d3d661c27.png)
进入PrepareServerRequest函数,会进行授权认证判断,
![](https://img-blog.csdnimg.cn/img_convert/303499f73ad5c2c1120d242f7984a5e5.png)
接着进入AddProtocolSpecificHeadersToServerRequest,
![](https://img-blog.csdnimg.cn/img_convert/a5e6d6c8dbcf18221de597a87a5b6c81.png)
由于ProxyToDownLevel被置为false不会进入if语句,从而导致可以直接绕过认证,进而在未授权的状态下获取autodiscover.xml文件内容。
0x05 CVE-2021-27065 任意文件写入漏洞
在Exchange服务器上依次打开【管理中心】 à 【服务器】 à 【虚拟目录】 à 【OAB虚拟目录】。
![](https://img-blog.csdnimg.cn/img_convert/adb2573a26ea982fd4372e221afe263e.png)
由于外部URL的内容可控,所以可在URL写入一句话木马(其中URL必须以http开头,以保持外部URL参数的合法性)。
![](https://img-blog.csdnimg.cn/img_convert/297b0cb0aa00ce9838a03bbb37c5b042.png)
之后可以通过重置虚拟目录,来把配置内容写入指定的路径。
![](https://img-blog.csdnimg.cn/img_convert/f2f379245a31f9e6522c6e09addaf601.png)
注:路径必须是UNC路径格式:\host\ShareFolder\aaa.xml
修改路径为:\win2012.test.local\C$\test.aspx
![](https://img-blog.csdnimg.cn/img_convert/d9c7ee1ec098936c952932a3b25681db.png)
可以看到OAB VirtualDirectory的配置信息已经被写入 C:/test.aspx。
![](https://img-blog.csdnimg.cn/img_convert/92d3b277f4c4d828dad570b5af6aa09b.png)
上述操作请求内容如下:
写入配置
POST /ecp/DDI/DDIService.svc/SetObject?schema=OABVirtualDirectory&msExchEcpCanary=pM2NWg8xu0euTUqTjiLwzquHekjm6dgIw6lt6YfDyflndCz1iGsGnnhEivzKafJL9vhOxpqYuAU.
请求中有一个关键参数msExchEcpCanary,如果没有这个参数,服务端返回500错误。这个参数的值可以利用CVE-2021-26855 SSRF漏洞通过多次请求获取。
0x06 漏洞利用过程
整个过程都是在未登录的状态下,利用SSRF漏洞访问内部资源,Cookie中的 X-BEResource字段内容为要访问的资源链接。利用过程如图:
![](https://img-blog.csdnimg.cn/img_convert/de21980f267db056e463cd63762e6b8b.png)
1.获取server name,/ecp/xx.js,cookie中 mail.skyeye.com 为目标exchange的域名;
![](https://img-blog.csdnimg.cn/img_convert/587ae93336e5c4529eecd044fb8f1ab4.png)
2.通过SSRF漏洞读取autodiscover.xml文件,获取LegacyDN的值;
![](https://img-blog.csdnimg.cn/img_convert/eabd25a8f59691fa1effc82874e9d2a4.png)
3.利用Legacy DN获取SID;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dY4aGMjM-1638085394017)(upload-images.jianshu.io/upload_imag…)]
4.利用SID获取Session、msExchEcpCanary;
![](https://img-blog.csdnimg.cn/img_convert/fe9340837d6de56436dcb2dbe21612d7.png)
5.写入shell。
![](https://img-blog.csdnimg.cn/img_convert/6d9bb27f38d648f7ef9404faac2a7214.png)
cookie中的 X-BEResource字段内容为利用SSRF漏洞访问的内网资源。
![](https://img-blog.csdnimg.cn/img_convert/5079ae09762893f5c39fcfc76b635757.png)
指定保存路径
![](https://img-blog.csdnimg.cn/img_convert/4eec1f6455a6e69f489e0b6610e8580e.png)
webshell路径为:
https://[ip]/owa/auth/dkYAIm7ELFjJ3KVzXb1Q.aspx
0x07 检测修复方案
检测方案: 针对上述漏洞,微软发布了一款工具,用于帮助用户检测Exchange是否被黑客利用相关漏洞入侵。
脚本 | 描述 |
---|---|
EOMT.ps1 | 通过 URL 重写配置缓解 CVE-2021-26855 |
ExchangeMitigations.ps1 | 该脚本包含4个缓解措施,以帮助解决以下漏洞:cve-2021-26855、cve-2021-26857、cve-2021-27065、cve-2021-26858 |
http-vuln-cve2021-26855.nse | nmap扫描脚本,检测指定URL是否存在CVE-2021-26855漏洞 |
Test-ProxyLogon.ps1 | 该脚本检查CVE-2021-26855、26858、26857和27065漏洞是否存在被利用的迹象 |
修复方案:
安装微软提供的漏洞补丁,相关漏洞补丁如下:
msrc.microsoft.com/update-guid…
msrc.microsoft.com/update-guid…