Microsoft Exchange Server CVE-2021–26855 漏洞利用

阅读量    177687 |

分享到: QQ空间 新浪微博 微信 QQ facebook twitter

 

作者:维阵漏洞研究员—ztop

Windows Exchange Server是国内外应用都非常广泛的邮件服务器,2021年03月3日,微软官方发布了Microsoft Exchange安全更新,并被黑客组织进行未授权RCE远程入侵利用。

而CVE-2021-26855可以创建Exchange服务器端请求伪造(SSRF)漏洞,利用此攻击的攻击者能够发送任意HTTP请求并通过Exchange Server进行身份验证。

受影响版本有:

Exchange Server 2019
Exchange Server 2016
Exchange Server 2013
Exchange Server 2010

 

01. 实验环境

软件 版本
调试机 cn_windows_server_2016_x64_dvd_9718765.iso
Exchange ExchangeServer2016-x64-cu14.iso
dnSpy v6.1.8
ProcessExplorer v16.26
burpSuite v1.7.32

 

02. exchange 环境搭建

2.1 使用 Administrator 登录,并修改密码

如果不切换到 Administrator 用户进行安装Exchange的话,到了安装 Exchange 时会报一些错误。

修改 Administrator 密码:

A.按住Windows+R键,输入 Control,打开控制面
B.找到用户账户
C.配置高级用户配置文件属性
D.打开用户账户
E.点击用户,选中Administrators单机右键并设置密码: root.123456

使用 Administrator 登录

注销 — 选择 “Administrator” 进行登录。

2. 2 Windows Server 2016 AD服务器搭建

打开服务器管理器,添加角色和功能

2.3 安装 Exchange Server 2016

安装扩展 Active Directory 架构

# 1. 以管理员身份运行Windows Powershell
Install-WindowsFeature RSAT-ADDS

Install-WindowsFeature NET-Framework-45-Features, Server-Media-Foundation, RPC-over-HTTP-proxy, RSAT-Clustering, RSAT-Clustering-CmdInterface, RSAT-Clustering-Mgmt, RSAT-Clustering-PowerShell, WAS-Process-Model, Web-Asp-Net45, Web-Basic-Auth, Web-Client-Auth, Web-Digest-Auth, Web-Dir-Browsing, Web-Dyn-Compression, Web-Http-Errors, Web-Http-Logging, Web-Http-Redirect, Web-Http-Tracing, Web-ISAPI-Ext, Web-ISAPI-Filter, Web-Lgcy-Mgmt-Console, Web-Metabase, Web-Mgmt-Console, Web-Mgmt-Service, Web-Net-Ext45, Web-Request-Monitor, Web-Server, Web-Stat-Compression, Web-Static-Content, Web-Windows-Auth, Web-WMI, Windows-Identity-Foundation, RSAT-ADDS

把 ExchangeServer2016-x64-cu14.iso 拷贝到 windows_server_2016:

# 1. 双击 ExchangeServer2016-x64-cu14.iso 进行挂载

# 2. 管理员打开cmd
E:
Setup.exe /IAcceptExchangeServerLicenseTerms /PrepareSchema 
Setup.exe /IAcceptExchangeServerLicenseTerms /PrepareAD /OrganizationName:"First Organization"

# 根据错误提示, 一共下载安装了下列4个程序或补丁
1. NDP472-KB4054530-x86-x64-AllOS-ENU.exe
2. UcmaRuntimeSetup.exe
3. vcredist_x64.exe
4. windows10.0-kb3206632-x64_b2e20b7e1aa65288007de21e88cd21c3ffb05110.msu

直接运行 Setup.exe。

安装完成exchange后,重启系统,访问”https://192.168.2.88/”即可,也可以访问新建林时起的名字https://test.com/”。 下面列举的是三个登录接口。


1、 https://192.168.2.88/rpc/ 401 认证
2、 https://192.168.2.88/ecp/ 管理中心
3、 https://192.168.2.88/owa/ 邮件用户登录页面


到此为止成功漏洞模拟环境基本搭建完成。

 

03. 漏洞分析 CVE-2021-26855

根据国外文章的分析可知,整个攻击链接可能经过以下步骤:
1、 通过SSRF漏洞攻击,访问autodiscover.xml泄露LegacyDN信息
2、 在通过LegacyDN, 获取SID
3.、然后通过合法的SID,获取exchange的有效cookie
4.、最后通过有效的cookie,对OABVirtualDirectory对象进行恶意操作,写入一句话木马,达到控制目标的效果.

3.1漏洞点定位

根据文章提示”https://www.praetorian.com/blog/reproducing-proxylogon-exploit/”,并且跳过繁杂的补丁对比过程,发现由于exchange在处理用户发送过来的请求包中对”X-BEResource”字段处理不当,会造成SSRF漏洞攻击。

我们直接定位漏洞点。漏洞点位于”C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\bin” 目录下的”Microsoft.Exchange.FrontEndHttpProxy.dll”。

把”Microsoft.Exchange.FrontEndHttpProxy.dll”拖入到dnSpy工具,可以看到在BEResourceRequestHandler类里, GetBEResouceCookie函数的会获取Cookies[“X-BEResource”]里的内容。最后”X-BEResource”内容会经由BackEndServer.FromString函数进行处理。

3.2漏洞调试

通过外网的文章,可以知道漏洞包:

以下是我准备的漏洞包,为什么要访问 autodiscover.xml(自动配置文件)呢? 是因为Autodiscover(自动发现)是自Exchange Server 2007开始推出的一项自动服务,用于自动配置用户在Outlook中邮箱的相关设置,简化用户登陆使用邮箱的流程。如果用户账户是域账户且当前位于域环境中,通过自动发现功能用户无需输入任何凭证信息即可登陆邮箱。

在BEResourceRequestHandler中下三处断点。

打开工具ProcessExplorer,查找调用BEResourceRequestHandler的进程”MSExchangeECPAppPool”,进程号为:”10944”。

dnSpy工具附加MSExchangeECPAppPool进程后,burpSuite直接发包后,dnSpy将会断下,函数的调用堆栈如下:

BackEndServer.FromString()函数在处理beresouceCookie时,以”~”符号作为分隔符,进行提取字符串,然后分别赋值给fqdn和verison变量。

fqdn和verison变量将在ProxyRequestHandler.BeginProxyRequest类里的GetTargetBackEndServerUrl进行调用。由于我们能控制BackEndServer.Fqdn参数,所以我们就控制了clientUrlForProxy.Host. 最后重构url发送给后端服务器。

在进入函数CreateServerRequest时,会调用PrepareServerRequest进行uri代理请求的身份认证判断。

ShouldBlockCurrentOAuthRequest函数里的ProxyToDownLevel是用来检查用户是否已通过身份验证;而当有请求调用BEResourceRequestHandler时,ShouldBackendRequestBeAnonymous()就会被调用。然后走else最后一个分支,绕过认证,然后把数据包组成后发送给后端。后端响应请求,把数据返回给客户端。最后达到一个SSRF漏洞攻击的过程。

 

04. 漏洞利用

最后还有一步就是通过/ecp/DDI/DDIService.svc/SetObject来操作OABVirtualDirectory进行文件的写入操作,这里就不在详细分析了,老外的文章已经很详细了。

 

05. 视频演示

https://www.bilibili.com/video/BV1h54y1879v/

分享到: QQ空间 新浪微博 微信 QQ facebook twitter
|推荐阅读
|发表评论
|评论列表
加载更多