weblogic简介及补丁分析方法(转)


前言

最近在对Weblogic进行研究,研究过程中需要对weblogic的基础知识有所了解,苦于自己懒又不愿意去查找官方文档以及各类参考文章去总结,为此在查阅了各类资料后,找到了几篇写的比较全的文章,可能是你能找到的最详细的WebLogic安全相关中文文档,由于文章介绍很详细,部分内容其实对自己的研究没什么影响,因此仅从中摘录了对于漏洞复现有关的内容,具体如下,如果有想查看原文的同学可以通过下方链接直达。不过介绍之前还是有必要声明该文章的来源及出处,防止侵权,在此也感谢各位前辈们在研究过程中付出的点点滴滴和共享的成果,让大家能够在研究的道路上摸清方向!

  • WebLogic安全研究报告引用文章说明

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://nosec.org/home/detail/2859.html

来源:奇安信

本文版权归原作者所有,如有侵权请联系我及时删除

  • weblogic cve漏洞捡漏指南引用文章说明

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:weblogic cve漏洞捡漏指南

来源:宽字节安全公众号

本文版权归原作者所有,如有侵权请联系我及时删除

Oracle WebLogic Server

Oracle WebLogic Server(以下简称WebLogic)是一个可扩展的企业级Java平台(Java EE)应用服务器。其完整实现了Java EE 5.0规范,并且支持部署多种类型的分布式应用程序。

实际上WebLogic是组成Oracle融合中间件的核心。几乎所有的Oracle融合中间件产品都需要运行WebLogic Server。因此,本质上,WebLogic Server不是Oracle融合中间件,而是构建或运行Oracle融合中间件的基础,Oracle融合中间件和WebLogic密不可分,却在概念上不相等。

WebLogic的版本

WebLogic版本众多,但是现在我们经常见到的只有两个类别:10.x和12.x,这两个大版本也叫WebLogic Server 11g和WebLogic Server 12c。根据Oracle官方下载页面https://www.oracle.com/technetwork/middleware/weblogic/downloads/wls-for-dev-1703574.html(从下向上看):

10.x的版本为Oracle WebLogic Server 10.3.6,这个版本也是大家用来做漏洞分析的时候最喜欢拿来用的版本。P牛的vulhub(https://github.com/vulhub/vulhub)中所有WebLogic漏洞靶场都是根据这个版本搭建的。

12.x的主要版本有:

  • Oracle WebLogic Server 12.1.3
  • Oracle WebLogic Server 12.2.1
  • Oracle WebLogic Server 12.2.1.1
  • Oracle WebLogic Server 12.2.1.2
  • Oracle WebLogic Server 12.2.1.3
  • Oracle WebLogic Server 12.2.1.4

值得注意的是,Oracle WebLogic Server 10.3.6支持的最低JDK版本为JDK1.6, Oracle WebLogic Server 12.1.3支持的最低JDK版本为JDK1.7,Oracle WebLogic Server 12.2.1及以上支持的最低JDK版本为JDK1.8。因此由于JDK的版本不同,尤其是反序列化漏洞的利用方式会略有不同。同时,不同的Oracle WebLogic Server版本依赖的组件(jar包)也不尽相同,因此不同的WebLogic版本在反序列化漏洞的利用上可能需要使用不同的Gadget链(反序列化漏洞的利用链条)。但这些技巧性的东西不是本文的重点,请参考其他文章。如果出现一些PoC在某些时候可以利用,某些时候利用不成功的情况,应考虑到这两点。

WebLogic的安装

对于weblogic的安装,因为直接打包为了jar包文件,因此支持跨平台安装,既支持在windows上安装,也支持在linux下安装,windows的安装过程直接图形化界面安装即可,网上也有很多的参考资料,自行查阅相关资料即可安装;对于Linux操作系统,推荐使用WebLogic环境搭建工具,工具地址:https://github.com/QAX-A-Team/WeblogicEnvironment,也可参考我的博文 weblogic环境部署与远程调试 快速搭建和开启远程调试。

WebLogic漏洞分类

WebLogic爆出的漏洞以反序列化为主,通常反序列化漏洞也最为严重,官方漏洞评分通常达到9.8。WebLogic反序列化漏洞又可以分为xmlDecoder反序列化漏洞和T3反序列化漏洞。其他漏洞诸如任意文件上传、XXE等等也时有出现。

只有实现了Serializable接口的类的对象才可以被序列化,而Externalizable则extends Serializable接口,并增加了两个方法writeExternal()和readExternal()。这两个方法会在序列化和反序列化还原的过程中被自动调用,以便执行一些特殊的操作。而且针对于类中不需要被序列化的属性,可以加上 transient关键字,该字段代表生命周期仅在内存中而不会持久化。

WebLogic安全补丁

WebLogic安全补丁通常发布在Oracle关键补丁程序更新、安全警报和公告 (https://www.oracle.com/technetwork/topics/security/alerts-086861.html) 页面中。其中分为关键补丁程序更新(CPU)和安全警报(Oracle Security Alert Advisory)。

关键补丁程序更新为Oracle每个季度初定期发布的更新,通常发布时间为每年1月、4月、7月和10月。安全警报通常为漏洞爆出但距离关键补丁程序更新发布时间较长,临时通过安全警报的方式发布补丁。

所有补丁的下载均需要Oracle客户支持识别码,也就是只有真正购买了Oracle的产品才能下载。

image-20210622100143458

weblogic 补丁分析指南
1.1 Opatch

在你挖到漏洞后,最好安装weblogic的最新补丁来校验一下你的exp是否在最新补丁下生效。weblogic使用Opatch来管理补丁。在某些补丁中,补丁包对于Opatch最小版本是有要求,这时候我们需要升级Opatch补丁号为 [28186730: OPATCH 13.9.4.2.4 FOR FMW/WLS 12.2.1.3.0, 12.2.1.4.0 AND 14.1.1.0.0]来解决这个问题

image-20210622094713089

https://support.oracle.com/epmos/faces/PatchHome?_adf.ctrl-state=1cdjuh74ay_4&_afrLoop=92240149765348#

下载后,解压至任意文件夹 Windows 执行下面的命令

1
java -jar opatch_generic.jar -J-Doracle.installer.oh_admin_acl=true -silent oracle_home=<ORACLE_HOME_LOCATION>

其它系统执行下面的命令

1
java -jar <PATCH_HOME>/6880880/opatch_generic.jar -silent oracle_home=<ORACLE_HOME_LOCATION>

有不懂的,看压缩包里的Readme

1.2 Opatch 打补丁

下载补丁后,解压至任意文件夹即可

在Oracle_home 安装目录中,找到Opatch文件夹,执行升级操作即可 Opatch apply 补丁解压的文件夹(注意是最内层文件夹)

image-20210622094757336

1.3 下载补丁(需要CSI)

我们只关心安全补丁,下面说下怎么下载补丁

登录Oracle support网站,找到Patchs&Updates 栏目,点击进去

image-20210622094917345

查询条件,自己根据需要构造即可

image-20210622100858004

REC的补丁,并且被标记为security,且Generic Platform平台,即是补丁

注意,oracle每年发布四次安全补丁,安全补丁可以跨版本打,也就是说,老补丁同时也集成在新补丁中,这点一定注意。

weblogic 补丁分析方法

weblogic中的补丁,其实是一个个编译好的class文件,我们直接使用idea打开补丁文件夹,就可以利用idea的反编译功能区分析补丁。

补丁中,每个class文件,都对应weblogic 实际目录中的一个class文件,打补丁你可以认为强行替换weblogic 中相关jar包中的class文件。

下面讲一下分析要点。对于这种安全补丁中,只有关于weblogic自身的安全问题,才会在这里体现,一般第三方包的安全漏洞,不会在该补丁中。

1.1 weblogic 黑名单

直接看files\oracle.wls.jrf.tenancy.common.sharedlib\12.2.1.4.0\wls.common.symbol\modules\com.bea.core.utils.jar\weblogic\utils\io 文件夹下的WeblogicFilterConfig.class 文件

因为weblogic 的漏洞,绝大多数都是T3协议、IIOP协议的java反序列化漏洞。而weblogic为了修复该漏洞,最简单的办法是设置反序列化黑名单并添加黑名单列表。如果反序列化时遇到的类存在于黑名单中,则中止反序列化过程。

我们只需要diff黑名单列表,自己研究构造poc即可。有的时候不一定是rce,也有可能是其他问题。

1.2 其他反序列化类

如果触发反序列化的类在正常业务中可能需要,或者因为其他原因不能屏蔽,weblogic的修复方法为直接修改相关的类。

如果一个类在readObject方法中,自己私自调用ObjectInputStream去执行反序列化操作而不是用weblogic提供的FilterInputStream执行反序列化操作,这样的话会导致weblogic的黑名单失效。这也就是反序列化中的反序列化漏洞,这种漏洞在weblogic中挺常见的。(不限于T3协议)
我们diff中,可以明显发现weblogic的补丁将ObjectInputStream更改为FilterInputStream。在weblogic中,只有FilterInputStream才会在反序列化的流程中检查黑名单类。
然后,我们根据这个类中的参数,自己构造一个类即可。
在idea中,覆盖一个类最简单的办法是,在自己的项目中创建一个与被覆盖的类包名相同类名相同的类,然后修改你想要修改的代码即可。例如在这个反序列化中,我要修改writeExternal方法。直接强行替换成cve-2020-2555的gadget。

1.3 T3反序列化 XXE

一般情况下该类漏洞都是在继承自Exterinalizable的类 中,在自定义序列过程时,将类的某些字段,作为XML去存储在反序列化的信息中。反序列化时候,读取序列化信息中相关的字符串作为XML去解析。解析的过程中没有考虑到XXE攻击。这次我捡漏的cve就是该类型的漏洞。

Java序列化、反序列化和反序列化漏洞的概念

关于Java序列化、反序列化和反序列化漏洞的概念,可参考@gyyyy写的一遍非常详细的文章:《浅析Java序列化和反序列化》(https://github.com/gyyyy/footprint/blob/master/articles/2019/about-java-serialization-and-deserialization.md)。这篇文章对这些概念做了详细的阐述和分析。我这里只引用一段话来简要说明Java反序列化漏洞的成因:

当服务端允许接收远端数据进行反序列化时,客户端可以提供任意一个服务端存在的目标类的对象 (包括依赖包中的类的对象) 的序列化二进制串,由服务端反序列化成相应对象。如果该对象是由攻击者『精心构造』的恶意对象,而它自定义的readobject()中存在着一些『不安全』的逻辑,那么在对它反序列化时就有可能出现安全问题。

参考文章

-------- 本文结束 感谢阅读 --------

本文标题:weblogic简介及补丁分析方法(转)

文章作者:FunctFan

发布时间:2021年06月21日 - 22:31:07

最后更新:2021年07月02日 - 06:50:43

原始链接:https://functfan.github.io/posts/4114466392/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。