Oracle WebLogic Two RCE Deserialization Vulnerabilities

栏目: Java · 发布时间: 5年前

内容简介:Oracle 官方在7月份发布当我在阅读可以看到,

Oracle 官方在7月份发布 关键补丁更新 之后,我在当月随后陆续提交了一些weblogic的不同类型漏洞,由于官方并 没有全部修复完成,本次的补丁修复了我报送的6个漏洞,其中有3个漏洞由于某些原因合并成1个CVE,本文针对10 月份这次补丁修复的其他两个漏洞进行简单分析。其中CVE-2018-3245是补来补去一直没有修好的 Weblogic JRMP 反 序列化漏洞,另一个漏洞CVE-2018-3252是 DeploymentService 组件的反序列化漏洞。

CVE-2018-3252 (DeploymentService Deserialization via HTTP)

当我在阅读 DeploymentService 这个 servlet 的时候,在 doPost 函数中看到用于对通过HTTP方式提交的POST数据处理的核心函数 internalDoPost

Oracle WebLogic Two RCE Deserialization Vulnerabilities

可以看到, var4 是通过HTTPHeader中的 wl_request_type 获取。然后进入不同的处理逻辑中。这里先跟进 handleDataTransferRequest 函数。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

在上图箭头所指向的地方,程序对 var9 进行了反序列化,而 var9 是通过 DeploymentObjectInputStream 的构造函数生成,其中函数中的参数都是我们可控制的。

再来看 handleDeploymentServiceMessage 函数,基本逻辑大致相同,也是对 DeploymentObjectInputStream 对象的反序列化。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

看到这里,心里隐隐觉得这个洞应该很好用,还是通过HTTP的方式。细心的同学可能发现,这里我们分析的每个函数都有一个参数是AuthenticatedSubject对象。这就是这个漏洞鸡肋的地方,需要 用户认证 。有兴趣的同学可以深入分析一下weblogic的用户认证机制,试试bypass 。具体函数请参考 authenticateRequest ,下图关于该函数有做删减,方便大家看到weblogic提供的两种认证方式。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

这里我们使用 username/password 的用户认证方式验证PoC。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

CVE-2018-3245(JRMP Deserialization via T3)

在拿到7月份补丁后迅速去diff了一下,果然不出所料,针对JRMP反序列化修复的方式依旧是增加黑名单。黑名单package(DEFAULT_BLACKLIST_PACKAGES)新增 java.rmi.activation sun.rmi.server ;黑名单class(DEFAULT_BLACKLIST_CLASSES)新增 java.rmi.server.UnicastRemoteObject java.rmi.server.RemoteObjectInvocationHandler

 private static final String[] DEFAULT_BLACKLIST_PACKAGES = {
"org.apache.commons.collections.functors", "com.sun.org.apache.xalan.internal.xsltc.trax",
"javassist", "java.rmi.activation", "sun.rmi.server" };

  private static final String[] DEFAULT_BLACKLIST_CLASSES = {
"org.codehaus.groovy.runtime.ConvertedClosure",
"org.codehaus.groovy.runtime.ConversionHandler", "org.codehaus.groovy.runtime.MethodClosure",
"org.springframework.transaction.support.AbstractPlatformTransactionManager",
"java.rmi.server.UnicastRemoteObject", "java.rmi.server.RemoteObjectInvocationHandler" };

其实如果认真分析过之前相关漏洞和补丁的同学,都能够很容易找到绕过的方式。

正如之前和 lpwd 讨论的所谈到,只要满足继承 java.rmi.server.RemoteObject ,且不在黑名单之中的类对象。 这里我通过 ReferenceWrapper_Stub 这个类对象绕过。

Oracle WebLogic Two RCE Deserialization Vulnerabilities

验证:

Oracle WebLogic Two RCE Deserialization Vulnerabilities

WebLogic Console Log:

 java.lang.ClassCastException: com.sun.jndi.rmi.registry.ReferenceWrapper_Stub cannot be cast to
weblogic.rjvm.ClassTableEntry.
java.lang.ClassCastException: com.sun.jndi.rmi.registry.ReferenceWrapper_Stub cannot be cast to
weblogic.rjvm.ClassTableEntry
    at weblogic.rjvm.MsgAbbrevInputStream.readClassDescriptor(MsgAbbrevInputStream.java:410)
    at
weblogic.utils.io.ChunkedObjectInputStream$NestedObjectInputStream.readClassDescriptor(ChunkedO
bjectInputStream.java:284)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1564)
    at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1495)
    at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1582)
    Truncated. see log file for complete stacktrace

总结

可能目前谈到weblogic漏洞的挖掘,马上想到的是反序列化漏洞。依照之前多次补丁更新的迹象,虽然可能还是会 有新的绕过,但是能够使用的gadget越来越少,会让漏洞的利用难度提高很多。其实,我在阅读weblogic代码的过 程中发现,很多在 java 中常见的漏洞:文件下载、上传、SSRF、XXE、DoS…这些漏洞也都存在,并且利用简单方便。 或许,试着找些其他类型的漏洞配合使用,也是可以达到远程代码执行的效果。


以上所述就是小编给大家介绍的《Oracle WebLogic Two RCE Deserialization Vulnerabilities》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective C# 中文版

Effective C# 中文版

Bill Wagner / 李建忠 / 人民邮电出版社 / 2007-5 / 49.00元

本书围绕一些关于C#和.NET的重要主题,包括C#语言元素、.NET资源管理、使用C#表达设计、创建二进制组件和使用框架等,讲述了最常见的50个问题的解决方案,为程序员提供了改善C#和.NET程序的方法。本书通过将每个条款构建在之前的条款之上,并合理地利用之前的条款,来让读者最大限度地学习书中的内容,为其在不同情况下使用最佳构造提供指导。 本书适合各层次的C#程序员阅读,同时可以推荐给高校教......一起来看看 《Effective C# 中文版》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

SHA 加密
SHA 加密

SHA 加密工具