Weblogic安全漫谈(二)

前言

继本系列上篇从CVE-2015-4852入手了解T3协议的构造后,本篇继续分析开启T3反序列化魔盒后的修复与绕过。

Weblogic对于10.3.6推出了p20780171和p22248372用于修复CVE-2015-4852,在补丁详情中又提示了p21984589是它的超集,所以可以直接装这个合集。跟着压缩包里自带的README.txt走就行,注意一点是要改一下bsu.sh中的内存限制,不然会遇到Java heap space OutOfMemoryError

unzip p21984589_1036_Generic.zip -d /u01/app/oracle/middleware/utils/bsu/cache_dir/cd /u01/app/oracle/middleware/utils/bsu/sed -i 's/512/1024/' bsu.sh./bsu.sh -install -patch_download_dir=/u01/app/oracle/middleware/utils/bsu/cache_dir -patchlist=S8C2 -prod_dir=/u01/app/oracle/middleware/wlserver. /u01/app/oracle/middleware/wlserver/server/bin/setWLSEnv.sh
/java/bin/java weblogic.version

 补丁在重写的ServerChannelInputStream#resolveClass中新增了类名黑名单,加入了CC链比较关键的包。

图片

图片

梳理一下:

  1. 原生反序列化依然存在,流程中的各个关键方法可用。

  2. CC链在黑名单以外的部分,仍然可以用作调用链。

  3. 黑名单类不在ServerChannelInputStream做反序列化就不受限制。

根据第三点先获取所有用到readObject的地方,用Serializable.class.isAssignableFrom(clazz)筛出可被序列化的类,筛出数据可控的二次反序列化。找到的两个可用类刚好对应两个CVE。

CVE-2016-0638

看到weblogic.jms.common.StreamMessageImpl#readExternal,完成父类readExternal后读到的字节是十进制1时会进入存在readObject的分支。

图片

跟进中间会经过的createPayload方法,读到的整数大于CHUNK_LINK_THRESHOLD会做一些处理。中间这块的处理看不太懂,我们假设它不满足判断继续往后走,一直跟到Chunk.createOneSharedChunk

图片

虽然中间一些Chunk的判断和操作由于笔者太菜了看不懂,但到了这里就能看出,这个先前读到的被一路传过来的整数是后段数据长度。后面这段数据被完整读出并封装赋值给this.payload,随后进行第二次反序列化。

图片

按照同样的数据顺序重写StreamMessageImplwriteExternal,写入相应格式的CC链序列化payload,再经过一次正常新建类对象并经过第二次序列化,最后用上一篇的EXP打出去就行。

图片

 

readExternal:1433, StreamMessageImpl (weblogic.jms.common)
readExternalData:1814, ObjectInputStream (java.io)
readOrdinaryObject:1773, ObjectInputStream (java.io)resolveClass:110, InboundMsgAbbrev$ServerChannelInputStream (weblogic.rjvm)
readNonProxyDesc:1589, ObjectInputStream (java.io)
readClassDesc:1494, ObjectInputStream (java.io)
readOrdinaryObject:1748, ObjectInputStream (java.io)
readObject0:1327, ObjectInputStream (java.io)

CVE-2016-3510

看到weblogic.corba.utils.MarshalledObject#readResolve,是比上一个品相更好的二次反序列化类。this.objBytes属性来自构造函数传入的对象,直接将payload对象作为参数给进去就行。

图片

 

readResolve:58, MarshalledObject (weblogic.corba.utils)
invoke0:-1, NativeMethodAccessorImpl (sun.reflect)
invoke:39, NativeMethodAccessorImpl (sun.reflect)
invoke:25, DelegatingMethodAccessorImpl (sun.reflect)
invoke:597, Method (java.lang.reflect)
invokeReadResolve:1056, ObjectStreamClass (java.io)
readOrdinaryObject:1784, ObjectInputStream (java.io)
readObject0:1327, ObjectInputStream (java.io)

补丁在上述两个类反序列化前单独添加了检查,随后进入下一个对RMI的利用阶段。

CVE-2017-3248

与此前《攻击JavaRMI概述》中唯一不同的一点是,第一步触发反序列化时的通讯协议,从Java原生的JRMP协议变为了Weblogic的T3协议。生成一个JRMPClient的payload用于在目标反序列化时发起JRMP请求,其它攻击流程一致。

CVE-2018-2628

ysoserialRMIRegistryExploit设计用于攻击Java原生RMI注册端,用了给JRMPClient的payload套上Registry动态代理的方式,来兼容Java原生registry.bind方法的参数要求。

图片

而这大概就是Weblogic企图靠InboundMsgAbbrev重写resolveProxyClass作为CVE-2017-3248的修复方式原因之一。我们是用自己的EXP作为T3客户端,不存在参数类型兼容的问题,直接去掉动态代理类的包装即可绕过检查(或者使用不同的接口代理)。

不过与此同时补丁也给CC包加上了手动开关,基本断了这条链的生路。所以这一阶段的Sink链大多基于7u21/8u20。

图片

CVE-2018-2893

据参考文章,在cpuapr2018补丁中黑名单新增了sun.rmi.server.UnicastRef。看到java.rmi.server.RemoteObjectInvocationHandler会使用父类的RemoteObject,读到refClassName时就会做一次神奇的第二次反序列化,自带绕过特效。

图片

图片

要素察觉!CVE-2016-0638和CVE-2016-3510也是二次反序列化绕过黑名单,不过MarshalledObject被去掉了Serializable接口,StreamMessageImpl则仍然可用于绕过。

CVE-2018-3245

cpujul2018补丁中黑名单继续增加了:

java.rmi.activation
sun.rmi.server
java.rmi.server.UnicastRemoteObject
java.rmi.server.RemoteObjectInvocationHandler

RemoteObject不在黑名单的子类们仍然可用,直到cpuoct2018将基类纳入黑名单。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/592870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通过软盘拷贝文件 - 华为OD统一考试

OD统一考试(B卷) 分值: 200分 题解: Java / Python / C 题目描述 有一名科学家想要从一台古董电脑中拷贝文件到自己的电脑中加以研究但此电脑除了有一个3.5寸软盘驱动器以外,没有任何手段可以将文件持贝出来,而且只有一张软盘可以…

MySQL将多条数据合并成一条的完整示例

数据库中存的是多条数据,展示的时候需要合并成一条 数据表存储形式如下图 以type分组,type相同的算一条,且保留image和link的所有数据,用groupBy只保留一条数据 解决方案:用GROUP_CONCAT 完整语法如下 group_concat…

从有向带权图判断最短路径里各目标顶点顺序

对如下有向带权图,若采用迪杰斯特拉(Dijkstra)算法求从源点a到其他各顶点的最短路径,则得到的第一路径的目标顶点是b,第二条最短路径的目标顶点是c,后续得到的其余各最短路径的目标顶点依次是() A.d,e,f B.e,d,f C.f,d,e D.f,…

linux-6.0 内核存储栈全景图

linux 存储栈原图地址:https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram

自动驾驶TPM技术杂谈 ———— ODDODC

文章目录 介绍研究现状主流相关定义国标定义SAE定义WP29定义 ODD主流构建框架NHTSA ODD构建框架SAE AVSC ODD构建框架PEGASUS 6层模型BSI ODD构建框架 设计运行条件的原则ODC 的设计原则ODC 元素的制定原则ODC 的使用原则 设计运行条件元素ODD 元素驾乘人员状态4车辆状态 ODC 描…

3分钟Alibaba Cloud Linux镜像操作系统详解

Alibaba Cloud Linux是基于龙蜥社区OpenAnolis龙蜥操作系统Anolis OS的阿里云发行版,针对阿里云服务器ECS做了大量深度优化,Alibaba Cloud Linux由阿里云官方免费提供长期支持和维护LTS,Alibaba Cloud Linux完全兼容CentOS/RHEL生态和操作方式…

深入了解隧道代理HTTP的协议与技术细节

隧道代理HTTP,作为一种网络通信的桥梁技术,其背后的协议与技术细节承载着网络世界的无尽奥秘。对于技术人员而言,深入了解这些细节,不仅有助于优化网络性能,还能为网络安全提供坚实的保障。 一、隧道代理HTTP的协议基…

2024阿里云服务器租赁优惠价格表_ECS和轻量应用服务器配置报价

阿里云服务器租用价格表大全,云服务器一年费用、一个月价格以及1小时收费明细,阿里云2核2G3M带宽轻量服务器一年61元、2核4G4M带宽轻量服务器一年165元12个月,ECS云服务器e系列2核2G配置99元一年、2核4G服务器30元3个月、2核4G配置365元一年、…

二维码、条形码识别

一. 场景介绍 二维码和条形码包含很多信息,对二维码和条形码识别对信息抽取具有重要意义。下面介绍两种二维码识别的方法,并用python实现。 二. 代码实现 import os import cv2 from cv2.wechat_qrcode import WeChatQRCode from pyzbar import pyzba…

深度生成模型之GAN基础 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN基础生成对抗网络1. 生成对抗网络如何生成数据2. 生成对抗原理3. GAN的核心优化目标4. D的优化5. GAN的理想状态6. GAN的训练7. 梯度不稳定与模式崩塌(collapse mode)问题8. 梯度消失问题 深度生成模型之GAN基础 生成对抗网络 1. 生成对抗网络如何…

三、HTML元素

一、HTML元素 HTML 文档由 HTML 元素定义。 *开始标签常被称为起始标签(opening tag),结束标签常称为闭合标签(closing tag)。 二、HTML 元素语法 HTML 元素以开始标签起始。HTML 元素以结束标签终止。元素的内容是…

python算法问题,求两个字符串的最长公共子序列长度

对于问题,两个字符串的最长公共子序列长度进行求解,首先要知道子序列的定义,如果说给定一个字符串,对这个字符串中的原有字符进行不改变字符相对位置的删除,这里的相对位置就是处于前还是后的相对关系,进行…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-7Lead Compensator超前补偿器(调节根轨迹)

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-7Lead Compensator超前补偿器(调节根轨迹) 1. Plot Rootlocus 绘制根轨迹2. System Performance 系统表现3. 改善/加快收敛速度4. 超前补偿器 Lead Compe…

Vue3 结合typescript 组合式函数

在App.vue文件中 实现鼠标点击文件,显示坐标值 第一种方法 第二种方法:组合式函数 结果: 官网推荐组合函数:https://vueuse.org

MySQL之四大引擎、账号管理以及建库

目录 一.数据库存储引擎 ① MEMORY ②MyISAM ③InnoDB ④ARCHIVE 二.数据库管理 2.1.三大数据库 2.1.1.information_schema 2.1.2.mysql 2.1.3.performance_schema 2.2.相关操作 2.3.权限相关的表 三. 数据库的表管理 3.1.三大范式 3.2.基本数据类型 四.账号管理…

Arbitrum之后,估值18亿美元Scroll又火了

文章目录 Scroll的核心竞争力EVM等效全面的去中心化如何领取Scroll空投?结语参考 Scroll是用于以太坊的原生zkEVM Layer 2解决方案,帮助解决以太坊的拥堵问题并进行扩容。 Scroll创立于2021年,致力于创建一个 EVM(以太坊虚拟机&a…

论文阅读: Semantics-guided Triplet Loss

ICCV 2021 Abstract 一个度量学习方法,通过浏览语义引导的局部集合去优化内在深度表示。一个新颖的特征融合模块能有效利用跨模态特异质特征。 Senantics-guided Triplet Loss 基本假设: 在场景语义分割图像中,目标内部相邻像素拥有同样…

声明式管理方法

声明式管理方法(yaml)文件: 1,适合对资源的修改操作 2,声明式管理依赖于yaml文件,所有的内容都在yamI文件当中 3,编辑好的yaml文件,还是要依靠陈述式命令发布到k8s集群当中 发布的…

数据损毁!250 亿美金的 Pinterest,在数据库选型上的翻车经历

原文链接 Pinterest 是一个以图片为主的社交网络,用户可以将图片保存或 "钉 / pin" 在自己的图板上。Pinterest 在 2019 年上市,目前市值 250 亿美金。本文内容主要根据 2012 年 Scaling Pinterest 的分享。 2012 年 1 月,Pinteres…

HTML----JavaScript操作对象BOM对象

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 本章要求 了解BOM模型掌握BOM模型实际应用 一.BOM模型概述 BOM(浏览器对象模型)是JavaScript中的一个重要概念,它提供了一组用于控制浏览器窗口和页面内容的…