长亭百川云 - 文章详情

ProxyLogon利用链复现

零鉴科技

56

2024-07-14

 ProxyLogon 

利用链复现

零鉴科技

简介

Proxylogon是CVE-2021-26855漏洞的别名,该漏洞允许攻击者绕过身份验证并冒充管理员,将此漏洞与另一个后身份验证的任意文件写漏洞 CVE-2021-27065 串在一起,可以完成exchange上的RCE。默认情况下,所有受影响的组件都容易受到攻击。

CVE-2021-26855 是一个SSRF 漏洞,问题出现在将客户端请求代理到服务端时,该漏洞可以获取用户的sid,实现了无交互攻击链中最重要的第一步。

CVE-2021-27065 是一个任意文件写漏洞。虽然不能完全控制要写入的内容,但是文件名与路径可以任意设置,当我们以 .aspx 为后缀创建文件,并在文件中插入一句话木⻢后,就可以实现远程控制。

受影响的Exchange版本:

  • Exchange Server 2019 < 15.02.0792.010

  • Exchange Server 2019 < 15.02.0721.013

  • Exchange Server 2016 < 15.01.2106.013

  • Exchange Server 2013 < 15.00.1497.012

原理浅析

 CVE-2021-26855

本质上是因为Exchange对BackEnd的请求缺乏来源性校验,导致可以通过构造特定结构的Cookies,直接对BackEnd发起请求,造成SSRF。

利用CVE-2021-26855漏洞时发出的post数据包:

其中要留意的关键点有两个,一是请求的url地址,二是Cookies。

下面的分析参考知道创宇

1、URL地址

首先,url中的/ecp/08gl.js不是一个存在的文件,而是一个虚拟路径,这么做的原因是为了能够调用BEResourceRequestHandler进行后端的请求。为了达到这个目的,我们所构造的数据包要满足ProtocolType为Ecp(也就是以 /ecp/xxx.xxx 进行请求),并且需要CanHandle返回true。

在CanHandle()中,使用GetBEResouceCookie()判断请求包中是否存在 X-BEResource字段的Cookies,使用IsResourceRequest()判断url地址。

在IsResourceRequest()中判断了传入的路径的后缀,只要是以下列举出来的后缀名都会返回true。

因此,/ecp/08gl.js实际上仅需要满足/ecp/xxx.合法后缀名即可。

2、Cookies

关键点在于BEResourceRequestHandler.ResolveAnchorMailbox函数,该函数直接提取出Cookie中的 X-BEResource 字段,并用其生成 BackEndServe实例,最终向BackEnd发出请求。

因此X-BEResource 用于代理请求,其格式为[fqdn]~BackEndServerVersion,BackEndServerVersion 应该大于1941962752。

后序BackEndServer.FromString会调用一系列拼接和解析函数,这里就略过了。最后指向BackEnd 的url类似这样:

`这其中name没有做检查和限制,‘#’ 用于在有url请求参数时分隔参数``https://[name@FQDN:444/autodiscover/autodiscover.xml?#]:443/ecp/target.js`

后续如果需要通过ssrf去访问的api,修改:444后的url地址即可。

 CVE-2021-27065

该漏洞具体位置在exchange管理中心(ecp)的虚拟目录配置窗口,需要administrator权限才可进行操作。

点击上方的修改按钮,在内部URL(InternalUrl)和外部URL(ExternUrl)中都可以填入payload,两者都限制了最大长度为255,并且会将url里的%全部编码为%25

这里首选修改外部URL,因为修改了内部URL可能会让某些内部服务失去作用,引起目标的警觉。

最后,选择重置按钮,这个操作将会把原先的对虚拟目录的设置进行保存,而后将当前服务的虚拟目录配置恢复为默认配置。因为exchange并没有对以下的路径和保存的文件名进行检测和限制,所以在此可以填入任意的路径和文件名,造成任意文件写漏洞。

写入的文件格式如下:

实际上,除了autodiscover以外,其他服务(ECP,EWS,Mapi,EAS,OAB,OWA,EAS)都可以设置内部URL和外部URL,同时也可以进行重置操作,因此利用RCE可以不仅限于OAB服务。

例如,ECP服务:

攻击链

因此,本次利用的exchange漏洞是一个攻击链,将CVE-2021-26855和CVE-2021-27065两个漏洞结合在一起。首先通过ssrf获取到administrator的权限,再利用此时的权限来完成任意文件写操作,最终完成RCE。

复现

前置条件

  • 需要获取到目标exchange中有效的邮箱名称(任意)

  • POC 向/owa/auth/xxx.js发出请求,若返回的数据包为NegotiateSecurityContext failed with for host 'xxx' with status 'TargetUnknown',则说明当前的exchange服务器存在ssrf漏洞,并且通过返回包的头部字段X-FEServer,可以获取exchange的FQDN

准备工作

获取用户SID

使用内置的autodiscover服务获取LegacyDN信息。

Autodiscover(自动发现)是自Exchange Server 2007开始推出的一项自动服务,用于自动配置用户在Outlook中邮箱的相关设置,简化用户登陆使用邮箱的流程。如果用户账户是域账户且当前位于域环境中,通过自动发现功能用户无需输入任何凭证信息即可登陆邮箱。

使用exchange的mapi over http特性,通过触发报错来获取用户的SID。

SID也就是安全标识符(Security Identifiers),是标识用户、组和计算机帐户的唯一的号码。在第一次创建该帐户时,将给网络上的每一个帐户发布一个唯一的 SID。在域中,对象的SID=域的SID + RID

即使在未知administrator邮箱名称的情况下,也可以通过普通用户的邮箱名称来获取域SID,接着再替换RID为500,即能得到当前域中Administrator的SID。

`- user1's SID:    S-1–5–21–3698125033–3xxxxxxxxx–xxxxxxxx2–3102` `- admin's SID:    S-1-5-21-3698125033-3xxxxxxxxx-xxxxxxxx2-500`

身份认证

使用SID向后端proxylogon.ecp发起认证请求,获取身份认证中所需的ASP.NET_SessionID和msExchEcpCanary值,注意此时获取到的身份信息权限已为Administrator。

CVE-2021-27065

通过上述的准备工作,我们已经获取到了带有administrator权限的身份认证信息,因此后续只需要按照顺序发送重置虚拟目录的数据包即可。

第一步:获取RawIdentity

第二步:准备payload

替换第一步中获取到的RawIdentity,并在ExternalUrl中填入payload。

【注意事项】: ExternalUrl对应的值为最大长度为255的url地址,所以必须带上http://或者https://,同时%符号将会被编码为%25

第三步:写入webshell

在FilePathName中填入webshell的地址(任意)。

【注意事项】: webshell无法覆盖已存在的文件

攻击日志

CVE-2021-26855

攻击痕迹会残留在以下目录中:

%PROGRAMFILES%\Microsoft\Exchange Server\V15\Logging\HttpProxy

%PROGRAMFILES%\Microsoft\Exchange Server\V15\Logging directory

HttpProxy下的日志文件会详细记录下所有通过httpproxy来访问后端的记录,包括访问时间,uri地址,来源ip,user-agent,返回状态码等。

官方给出的检测脚本:

Import-Csv -Path (Get-ChildItem -Recurse -Path "$env:PROGRAMFILES\Microsoft\Exchange Server\V15\Logging\HttpProxy" -Filter '*.log').FullName | Where-Object { $_.AnchorMailbox -like 'ServerInfo~*/*' -or $_.BackEndCookie -like 'Server~*/*~*'} | select DateTime, AnchorMailbox, UrlStem, RoutingHint, ErrorCode, TargetServerVersion, BackEndCookie, GenericInfo, GenericErrors, UrlHost, Protocol, Method, RoutingType, AuthenticationType, ServerHostName, HttpStatus, BackEndStatus, UserAgent

清理痕迹:

Get-ChildItem -Recurse -Path "$env:PROGRAMFILES\Microsoft\Exchange Server\V15\Logging\HttpProxy\Ecp" -Filter '*.log' | % {(Get-Content $_.FullName) | where {$_ -notmatch "yourIP"} | Set-Content $_.FullName}

【注意事项】:当天的日志因为会被W3wp.exe(IIS Application Pool Process)占用而无法修改

CVE-2021-27065

攻击痕迹会残留在以下目录中:

%PROGRAMFILES%\Microsoft\Exchange Server\V15\Logging\ECP\Server

官方给出的检测脚本:

Select-String -Path "$env:PROGRAMFILES\Microsoft\Exchange Server\V15\Logging\ECP\Server\*.log" -Pattern 'Set-.+VirtualDirectory'

此日志会详细记录ecp相关的所有请求(包括一部分http头信息和post body)。

清理痕迹:

Get-ChildItem -Recurse -Path "$env:PROGRAMFILES\Microsoft\Exchange Server\V15\Logging\ECP\Server" -Filter '*.log' | % {(Get-Content $_.FullName) | where {$_ -notmatch "Set-.+VirtualDirectory"} | Set-Content $_.FullName}

【注意事项】:当天的日志因为会被W3wp.exe(IIS Application Pool Process)占用而无法修改

杀软检测

WD已经能够准确识别出webshell以及CVE-2021-27065漏洞,并拒绝程序对webshell的访问

监控的目录如下:

C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\xxx.aspx

C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\ecp\auth\xxx.aspx

**【2021-04-16测试】:**写入webshell的内容仅包含</script>标签也会被windows defender查杀

不被wd查杀的路径:

C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\Current\themes\resources\xxx.aspx

C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\Current\scripts\premium\xxx.aspx

C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\15.1.2044\themes\resources\xxx.aspx

C:\Program Files\Microsoft\Exchange Server\V15\FrontEnd\HttpProxy\owa\auth\15.1.2044\scripts\premium\xxx.aspx

[IIS Install Path]\aspnet_client\

[IIS Install Path]\aspnet_client\system_web\

及其他iis web目录

RCE:

参考

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2