微软EXCHANGE远程代码执行漏洞复现(CVE-2020-0688)

本周二,微软发布了一个Important级别的补丁,解决了Microsoft Exchange Server中的远程代码执行错误。此漏洞是由一位匿名研究人员报告给我们的,它影响了Microsoft Exchange Server的所有版本,直到周二的补丁才被修复。下面是这个漏洞的一个快速演示视频:

https://youtu.be/7d_HoQ0LVy8

最初,微软表示这个漏洞是由于内存损坏而造成的,攻击者向存在缺陷的Exchange服务器发送经过特殊处理的电子邮件即可触发漏洞。而目前他们已经修改了原始库,指出这个漏洞是由于Exchange服务器在安装时没有正确地创建唯一的加密密钥所造成的。

具体来说,漏洞是在Exchange Control Panel (ECP)组件中发现的。这个漏洞的性质非常简单。与每次软件安装都会产生随机密钥不同,所有Microsoft Exchange Server在安装后的web.config文件中都拥有相同的validationKeydecryptionKey。这些密钥用于保证ViewState的安全性。而ViewState是ASP.NET Web应用以序列化格式存储在客户机上的服务端数据。客户端通过__VIEWSTATE请求参数将这些数据返回给服务器。

验证秘钥截图

为了利用这个漏洞,我们需要从经过身份验证的session中收集ViewStateUserKey和__VIEWSTATEGENERATOR值。ViewStateUserKey可以从ASP.NET的_SessionIDcookie中获取,而ViewStateUserKey可以在一个隐藏字段中找到。所有这些都可以通过浏览器中的工具轻松找到。

首先,进入/ecp/default.aspx页面并登录。所使用的帐户不需要任何高权限。在以下例子中,我们使用了一个名为user的帐户:

登录获取一般权限下的登录凭证
接着,我们需要收集一些信息。最重要的数据我们已经知道:

validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
validationalg = SHA1