从weblogic开始

weblogic是什么

中间件(Middleware),Oracle定义中间件的组成包括Web服务器、应用程序服务器、内容管理系统及支持应用程序开发和交付的类似工具,它通常基于可扩展标记语言(XML)、简单对象访问协议(SOAP)、Web服务、SOA、Web 2.0和轻量级目录访问协议(LDAP)等技术。

Oracle WebLogic Server(WebLogic):是一个可扩展的企业级Java平台(Java EE)应用服务器。其完整实现了Java EE 5.0规范,并且支持部署多种类型的分布式应用程序。在前面Oracle融合中间件的介绍中,我们已经发现了其中贯穿着WebLogic的字眼,且Oracle融合中间件和WebLogic也是我在漏洞分析时经常混淆的。实际上WebLogic是组成Oracle融合中间件的核心。几乎所有的Oracle融合中间件产品都需要运行WebLogic Server。因此,本质上,WebLogic Server不是Oracle融合中间件,而是构建或运行Oracle融合中间件的基础,Oracle融合中间件和WebLogic密不可分却在概念上不相等。

WebLogic Server群集由多个同时运行的WebLogic Server服务器实例组成,它们协同工作以提供更高的可伸缩性和可靠性。因为WebLogic本身就是为分布式设计的中间件,所以集群功能也是WebLogic的重要功能之一。也就有了集群间通讯和同步,WebLogic的众多安全漏洞也是基于这个特性。

weblogic版本

10.x的主要版本:

Oracle WebLogic Server 10.3.6

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

序列化与反序列化

ac ed 00 05 73 72 00 11 53 65 72 69 61 6c 69 7a ....sr.. Serializ

61 74 69 6f 6e 44 65 6d 6f d9 35 3c f7 d6 0a c6 ationDem o.5<....>

d5 02 00 02 49 00 08 69 6e 74 46 69 65 6c 64 4c ....I..i ntFieldL

00 0b 73 74 72 69 6e 67 46 69 65 6c 64 74 00 12 ..string Fieldt..

4c 6a 61 76 61 2f 6c 61 6e 67 2f 53 74 72 69 6e Ljava/la ng/Strin

67 3b 78 70 00 01 7d f1 74 00 05 67 79 79 79 79 g;xp..}. t..gyyyy

仔细观察二进制串中的部分可读数据,我们也可以差不多分辨出该对象的一些基本内容。但同样为了手写的目的 (为什么有这个目的?原因很简单,为了不被语言环境束缚) ,以及为接下来的序列化执行流程分析做准备,我们先依次来解读一下这个二进制串中的各个元素。

0xaced,魔术头

0x0005,版本号 (JDK主流版本一致,下文如无特殊标注,都以JDK8u为例)

0x73,对象类型标识 (0x7n基本上都定义了类型标识符常量,但也要看出现的位置,毕竟它们都在可见字符的范围,详见java.io.ObjectStreamConstants)

0x72,类描述符标识

0x0011...,类名字符串长度和值 (Java序列化中的UTF8格式标准)

0xd9353cf7d60ac6d5,序列版本唯一标识 (serialVersionUID,简称SUID)

0x02,对象的序列化属性标志位,如是否是Block Data模式、自定义writeObject(),Serializable、Externalizable或Enum类型等

0x0002,类的字段个数

0x49,整数类型签名的第一个字节,同理,之后的0x4c为字符串类型签名的第一个字节 (类型签名表示与JVM规范中的定义相同)

0x0008...,字段名字符串长度和值,非原始数据类型的字段还会在后面加上数据类型标识、完整类型签名长度和值,如之后的0x740012...

0x78 Block Data结束标识

0x70 父类描述符标识,此处为null

0x00017df1 整数字段intField的值 (Java序列化中的整数格式标准) ,非原始数据类型的字段则会按对象的方式处理,如之后的字符串字段stringField被识别为字符串类型,输出字符串类型标识、字符串长度和值

java反序列化weblogic_[Todo]Java反序列化-weblogic相关推荐

  1. 用 XStream 序列化/反序列化 XML 为 Java 对象(实例)

    用 XStream 序列化/反序列化 XML 为 Java 对象(实例) Posted on 2007-06-05 19:06 Stephen Wong 阅读(1224) 评论(0)  编辑 收藏 网 ...

  2. fileinputstream自定义类序列化和反序列化_Rest Assured篇:Java中的序列化和反序列化...

    点击上方蓝字设为星标 每天傍晚伴你一起成长! Java 中的序列化和反序列化是一个重要的编程概念.它适用于所有主要的编程语言.在本章中,我们将尝试在Java语言的上下文中理解此概念.在本章的最后,我们 ...

  3. java序列化 反序列化_Java序列化– Java序列化

    java序列化 反序列化 Serialization in Java was introduced in JDK 1.1 and it is one of the important feature ...

  4. K:java中的序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?以下内容将围绕这些问题进行展开讨论. Java序列化与反序列化 简单来说Java序列化是指把Java对象转 ...

  5. java list反序列化_java序列化与反序列化操作实例分析

    本文实例分析了java序列化与反序列化操作.分享给大家供大家参考,具体如下: 概述: Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程. ...

  6. java Serializable和Externalizable序列化反序列化详解--转

    一.什么是序列化?   "对象序列化"(Object Serialization)是 Java1.1就开始有的特性. 简单地说,就是可以将一个对象(标志对象的类型)及其状态转换为字 ...

  7. Java对象的序列化与反序列化

    序列化与反序列化 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程.一般将一个对象存储至一个储存媒介,例如文件或是内存缓冲区等.在网络传输过程中,可以是字节或是 ...

  8. Java 对象的序列化和反序列化

    当两个进程在进行远程通信时,彼此可以发送各种类型的数据.无论是何种类型的数据,都会以二进制序列的形式在网络上传送.发送方需要把这个Java对象转换为字节序列,才能在网络上传送:接收方则需要把字节序列再 ...

  9. java序列化_夯实Java基础系列22:一文读懂Java序列化和反序列化

    本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 https://github.com/h2pl/Java-Tutorial 喜欢的话麻烦点下 ...

最新文章

  1. RiboFR-Seq:将16S rRNA与宏基因组连接的方法
  2. pytorch模型加载测试_使用Pytorch实现物体检测(Faster R-CNN)
  3. NSURLSession使用说明及后台工作流程分析
  4. [总结篇3]Provider_network的含义
  5. C 语言 结构作为参数
  6. 总结系列_9(Linux下常见使用总结,续...)
  7. python 存储图片 alpha_保存时Matplotlib图形面颜色alpha(背景色、透明度)
  8. (王道408考研操作系统)第二章进程管理-第三节7:经典同步问题之多生产者与多消费者问题
  9. python多线程控制暂停_python中的多线程编程与暂停、播放音频的结合
  10. NodeJS开源项目
  11. java传参方式_Java里方法的参数传递方式
  12. alpha-beta 极大极小值剪枝算法
  13. 隐藏和isa :进化返祖以及白马非马(c++)
  14. C#开发浏览器谷歌内核
  15. 学习布局(21)HTML5新标签
  16. 《用于自动越野导航的实时语义映射》论文笔记
  17. SQL server 2008 定义数据类型
  18. 农行网上在线支付平台接口
  19. 【js特效】图片循环滚动代码
  20. 数据建模(E-R图)

热门文章

  1. NLP文本生成模型数据准备及实战
  2. 分类家族:二分类、多分类、多标签分类、多输出分类
  3. 计算机无法搜索程序,电脑搜索功能不能用的解决方法
  4. 为什么RStudio Server这么慢?
  5. Android中 TextView的使用
  6. ggplot2画图教程
  7. linux su切换用户提示 Authentication failure的解决方法
  8. PacBio sequence error correction amd assemble via pacBioToCA
  9. 黯然微信小程序杂记(二):小程序最新版登录并进行缓存模块的实现 附源码
  10. 搭建 Hadoop 伪分布式环境