ProxyShell利用分析1——CVE-2021-34473 - 嘶吼 RoarTalk – 网络安全行业综合服务平台,4hou.com

ProxyShell利用分析1——CVE-2021-34473

3gstudent 新闻 2021-08-26 11:55:00
577189
收藏

导语:CVE-2021-34473作为ProxyShell攻击链的基础,验证简单,危害巨大。站在防御的角度,建议用户尽快更新补丁。

0x00 前言

Orange在今年的BlackHat演讲中介绍了在Pwn2Own 2021上使用的Microsoft Exchange攻击链,他分享的内容给了我很大的启发。

本文仅在技术研究的角度记录我在研究ProxyShell中的细节,分析利用思路。

0x01 简介

本文将要介绍以下内容:

◼调试环境搭建

◼漏洞分析

◼利用思路

0x02 调试环境搭建

1.禁用Visual Studio中的调试优化

设置环境变量COMPLUS_ZapDisable=1

重启系统

2.查看Exchange中对应的进程

执行命令:

1.png

可以获得Exchange的所有进程和对应的pid,如下图

2.png

3.使用dnSpy进行调试

打开相关的dll文件并在待调试的位置下断点,选择附加进程开始调试

如果不确定待调试的Exchange进程,可以选择所有w3wp.exe

0x03 漏洞调试

使用dnSpy打开文件C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\bin\Microsoft.Exchange.FrontEndHttpProxy.dll

依次定位到Microsoft.Exchange.Clients.Owa.Core -> Microsoft.Exchange.HttpProxy

关于SSRF漏洞(CVE-2021-34473)的漏洞原理可以参考如下文章:

https://peterjson.medium.com/reproducing-the-proxyshell-pwn2own-exploit-49743a4ea9a1

0x04 漏洞分析

1.判断漏洞是否存在

这里使用Orange原文给出的方法:

访问:https:///autodiscover/autodiscover.json?@foo.com/mapi/nspi/?&Email=autodiscover/autodiscover.json%3f@foo.com

如果漏洞存在,返回如下结果:

如下图

3.png

权限为System

url地址中的"/mapi/nspi"为Exchange服务器访问的最终地址

url地址中的"?&Email=autodiscover/autodiscover.json%3f@foo.com"作为参数,这是为了满足漏洞触发的条件。此处还可以通过设置Cookie的内容为"Email=Autodiscover/autodiscover.json%3f@foo.com"实现相同的效果,源码如下图

4.png

2.通过SSRF漏洞调用Exchange Web Service(EWS)

Exchange Web Service(EWS)对应邮箱用户的邮件内容,关于EWS的使用可以参考之前的文章《Exchange Web Service(EWS)开发指南2——SOAP XML message》,通过发送XML请求,能够获得对应用户的邮件内容。

由于SSRF默认的权限为System,所以我们需要找到能够模拟任意邮箱用户的方法,才能够读取对应用户的邮件内容。

经过一段时间的调试,我没有找到通过参数指定EWS认证用户的方法,但是这里我们可以使用Exchange提权漏洞(CVE-2018-8581)中的技巧,通过在Header中使用SerializedSecurityContext,指定SID可以实现身份伪装,从而以指定用户身份进行EWS调用操作

代码地址:

https://github.com/thezdi/PoC/blob/master/CVE-2018-8581/serverHTTP_relayNTLM.py#L48-L64

Header格式如下:

5.png

为了获得用户的SID,我们可以使用Exchange SSRF漏洞(CVE-2021-26855)中的技巧,通过访问/autodiscover/autodiscover.xml获得legacyDn,作为参数继续访问/mapi/emsmdb,就能够获得用户对应的sid

至此,整个利用链完成,流程如下:

1、访问/autodiscover/autodiscover.xml获得legacyDn

2、访问/mapi/emsmdb获得用户对应的sid 

3、在Header中使用SerializedSecurityContext,指定用户身份进行EWS调用操作

3.枚举邮箱用户列表

我在之前的文章《渗透技巧——获得Exchange GlobalAddressList的方法》提到过:“Exchange GlobalAddressList(全局地址列表)包含Exchange组织中所有邮箱用户的邮件地址,只要获得Exchange组织内任一邮箱用户的凭据,就能够通过GlobalAddressList导出其他邮箱用户的邮件地址。”

这里也是可以进行利用的,我们只需要使用FindPeople操作,做一个遍历并进行结果去重即可

实现细节可以参考之前开源的脚本:https://github.com/3gstudent/Homework-of-Python/blob/master/ewsManage.py

4.默认邮箱用户

为了读取Exchange GlobalAddressList(全局地址列表),我们需要获得Exchange组织内任一邮箱用户的凭据,对应到这个漏洞,我们仅仅需要邮箱用户名称

Exchange中默认存在以下四个用户可供使用:

◼SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}

◼SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}

◼SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}(Exchange 2016 CU8 and later)

◼SystemMailbox{2CE34405-31BE-455D-89D7-A7C7DA7A0DAA}(Exchange 2016 CU8 and later)

参考资料:

https://docs.microsoft.com/en-us/exchange/architecture/mailbox-servers/recreate-arbitration-mailboxes?view=exchserver-2019

0x05 小结

CVE-2021-34473作为ProxyShell攻击链的基础,验证简单,危害巨大。站在防御的角度,建议用户尽快更新补丁。

本文为 3gstudent 原创稿件,授权嘶吼独家发布,如若转载,请注明原文地址
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论

 
本站4hou.com,所使用的字体和图片文字等素材部分来源于原作者或互联网共享平台。如使用任何字体和图片文字有侵犯其版权所有方的,嘶吼将配合联系原作者核实,并做出删除处理。
©2022 北京嘶吼文化传媒有限公司 京ICP备16063439号-1 本站由 提供云计算服务