近日,2015年最为被低估的,具有巨大破坏力的漏洞浮出水面。在FoxGlove Security安全团队的@breenmachine 发布一篇博客中介绍了该漏洞在最新版的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS中的应用,实现远程代码执行。更为严重的是,在漏洞被发现的9个月后依然没有有效的java库补丁来针对受到影响的产品进行加固。现在,让我们探讨下该漏洞的原理以及应用。

背景:

  1. java反序列化漏洞

  java反序列化漏洞是一类被广泛应用的漏洞,绝大多数的编程语言都会提供内建方法使用户可以将自身应用所产生的数据存入硬盘或通过网络传输出去。这种将应用数据转化为其他格式的过程称之为序列化,而将读取序列化数据的过程称之为反序列化。

  当应用代码从用户接受序列化数据并试图反序列化改数据进行下一步处理时会产生反序列化漏洞。该漏洞在不同的语言环境下会导致多种结果,但最有危害性的,也是之后我们即将讨论的是远程代码注入。

  2.java反序列化漏洞发现历程

  在最近几年间,不断的有java反序列化漏洞被曝光。最近的几次分别产生于spring框架以及Groovy还有文件上传的java库中,这些漏洞均得到了修复。

  但在最近的研究中,安全人员发现java反序列漏洞远远不止上述几处,该漏洞广泛的存在于java库中。

  Java反序列化漏洞:

  1. 漏洞产生原因:

  在java编写的web应用与web服务器间java通常会发送大量的序列化对象例如以下场景:

  HTTP请求中的参数,cookies以及Parameters。

  RMI协议,被广泛使用的RMI协议完全基于序列化

  JMX 同样用于处理序列化对象

  自定义协议 用来接收与发送原始的java对象

  在序列化过程中会使用ObjectOutputStream类的writeObject()方法,在接收数据后一般又会采用ObjectInputStream类的readObject()方法进行反序列化读取数据。其代码示例如下:

  结果如图:

  上述代码中的java类ObjectInputStream在执行反序列化时并不会对自身的输入进行检查,意味着一种可能性,即恶意攻击者构建特定的输入,在ObjectInputStream类反序列化之后会产生非正常结果。而根据最新的研究,利用这一方法可以实现远程执行任意代码。

  为了进一步说明,可以针对对上述代码进行了一点修改:

  结果:

  主要修改为自定义了一个被序列化的对象myobject,通过定义myobject实现了java序列化的接口并且定义了一种名为“readObject”的方法。通过对比上面例子的输出,可以发现反序列化的相关数值被修改了,即执行的用户自身的代码。造成结果不同的关键在于readObject方法,java在读取序列化对象的时候会先查找用户自定义的readObject是否存在,如果存在则执行用户自定义的方法。

  2 漏洞触发点寻找:

  在之前的论述中可以发现利用该漏洞首先应找出readObject方法调用,在找到之后进行下一步的注入操作。一般可以通过以下方法进行查找:

  (1)针对特定的java应用,对此漏洞的应用应首先寻找可以利用的“靶点”,即确定调用反序列化函数的地点。这可以通过对java应用进行源码审计,例如找寻反序列化函数readObject调用情况。

  (2)对于该应用的网络行为进行抓包,寻找序列化数据(在包数据中,序列化数据一般会以ac ed 00 05开头)来进行判断。

  3.漏洞利用

  在发现序列化数据之后,需要产生一个用于测试的pyload。这里可以在github上下载一个工具“ysoserial”并执行下列指令:

  当/ tmp / pwned文件被创建时说明测试已经开始,而后续的步骤将结合实例一起分析。

  漏洞利用实例:

  这里以Jboss为例,Jboss利用的是HTTP协议,可以在任何端口上运行,默认安装在8080端口中。而且Jboss与“JMXInvokerServlet”的通信过程中存在一个公开漏洞。JMX是一个java的管理协议,在Jboss中的JMXInvokerServlet可以使用HTTP协议与其进行通话。这一通信功能依赖于java的序列化类。

  在默认安装的Jboss中,JMXInvokerServlet的路径恰好为http://localhost:8080/invoker/JMXInvokerServlet。如果用户访问一个web浏览器,实际上会返回一个原始的java对象,这中行为显然存在一个漏洞。

  这个漏洞可以很经常的通过互联网被利用,由于jmxinvokerservlet与主要的Web应用程序在同一个端口上运行,因此它很少被防火墙所拦截。

  基于以上原理可以通过以下指令收集jar文件来测试该漏洞是否可用:

  由此可以以jmx作为Jboss接受外部输入的点,可以利用java HTTP client包构建POST请求,post请求包中数据为使用ysoserial处理之后的构建代码。

java反序列化漏洞:2015年被低估的“破坏之王”相关推荐

  1. Lib之过?Java反序列化漏洞通用利用分析

    1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来***最新版的WebLogic.We ...

  2. common-collections中Java反序列化漏洞导致的RCE原理分析

    2019独角兽企业重金招聘Python工程师标准>>> common-collections中Java反序列化漏洞导致的RCE原理分析 隐形人真忙 · 2015/11/11 22:4 ...

  3. 修而未复:说说WebLogic那修不完的Java反序列化漏洞

    编者说明:这篇文章初稿写在Oracle CPU补丁发布之后,考虑到文章内容的影响,并未在当时发布,WebLogic 的 Java 反序列化漏洞,已经修复了多次,最终的修复仍然未彻底解决问题. 背景 当 ...

  4. Java反序列化漏洞通用利用分析

    2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.WebSpher ...

  5. JAVA反序列化漏洞简单理解

    反序列化原理 关于反序列化的原理不在多说,和php类似,序列化的数据是方便存储的,而存储的状态信息想要再次调用就需要反序列化 Java反序列化的API实现 实现方法 Java.io.ObjectOut ...

  6. java反序列化漏洞POP查找_利用 Java 反序列化漏洞在受限环境下获取反向 Shell

    原标题:利用 Java 反序列化漏洞在受限环境下获取反向 Shell 原文链接: https://medium.com/abn-amro-red-team/java-deserialization-f ...

  7. java反序列化漏洞的一些gadget

    目录 0x00 URLDNS 0x01 Commons Collections 0x02 RMI的codebase任意代码执行 0x03 JNDI 0x04 LDAP 0x05 JDK7u21 首先说 ...

  8. java 反序列化漏洞 利用思路简介

    目录 序列化的过程 readObject方法 反射链 完成反序列漏洞实践 结论 之前听别人讲解反序列化的漏洞听的晕乎乎的,刚脆就趁着周末研究一下反序列化漏洞,并且搭建实战环境实际操作了一把,明白了之后 ...

  9. java 反序列化漏洞简介

    目录 一.Java的序列化与反序列化 二.对java序列化的理解 三.反序列化的漏洞原理概述 四.关于反射链 一.Java的序列化与反序列化 在这里我们直接自己定义一个类,然后对这个类的对象(一个实例 ...

最新文章

  1. ORCALE数据库分页查询
  2. 微服务架构 — 设计原则
  3. insert with special ID
  4. .NET环境下水晶报表使用总
  5. vue04-components
  6. 计算机英语讲课笔记02
  7. 目前阶段的任务及计划
  8. yyyy-mm-dd hh-mm--ss
  9. 微信小程序 自定义顶部导航栏标题 navigationStyle
  10. matlab中如何画柱状图,如何在用Matlab画柱状图
  11. 学计算机的用hd620,HD620核显相当于什么独立显卡 HD620核心显卡性能评测
  12. web前端压缩图片方法——加快页面加载速度
  13. Excel将两个图片合并为一张
  14. php ajax jquery瀑布流,jQuery瀑布流插件——jQuery.Waterfall
  15. 滚滚长江东逝水历史的天空
  16. 【论文汇总】CVPR2020语义分割医学图像分割paper汇总
  17. 设置VLC播放器进行RTSP推流桌面(共享桌面)
  18. 百度富文本编辑器umeditor,ueditor字体,字号修改无效的问题 umeditor1_2_3
  19. 计算机毕业设计之java+springboot基于vue的校园交友网站
  20. html设置一个正方形渐变,CSS3 渐变

热门文章

  1. 三款主流阅读软件可用性简评(熊猫看书1.55,jjreader,ireader)
  2. 盘点GRE词汇经常出现的误区
  3. 大学计算机考试基础理论试题,大学计算机基础理论知识前三章测试题
  4. 某项目的双代号网络图如下所示_某工程双代号网络图如下图所示,其绘图错误有( )。 - 赏学吧...
  5. 2023 压缩包密码暴破shell脚本源码
  6. Fedora 28龙芯版Live6发布派对 | 明星爱好者首登直播
  7. 计算机密码应用基础试题及答案,计算机应用基础试题及参考答案.doc
  8. Nokia查询手机固件版本(手机型号或类型标志符)及CODE
  9. 怎么压缩图片大小,图片压缩方法
  10. 电路方案分析(七)电源入口欠压保护(阈值设定电路)