`
shuai1234
  • 浏览: 972105 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

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

    博客分类:
  • java
 
阅读更多

近日,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反序列化漏洞利用工具.zip

    Java反序列化漏洞是软件安全领域的一个重要话题,它涉及到Java应用程序在处理序列化和反序列化过程中的安全问题。序列化是将对象状态转换为可存储或传输的数据格式的过程,而反序列化则是将这些数据恢复为原来的对象...

    Java反序列化漏洞检查工具V1.2_Weblogic XML反序列化漏洞检查工具CVE-2017-10271

    Java反序列化漏洞是软件安全领域的一个重要话题,特别是在企业级应用服务器如Weblogic中,这类漏洞可能导致远程代码执行、系统权限提升等严重后果。工具"Java反序列化漏洞检查工具V1.2_Weblogic XML反序列化漏洞检查...

    Java反序列化漏洞利用工具V1.7.jar

    Java反序列化漏洞利用工具

    java反序列化漏洞-验证.rar

    压缩包内的“attackRMI.jar”可能是用来模拟远程方法调用(RMI)场景的,因为RMI是Java反序列化漏洞的常见利用场景之一。RMI允许远程对象像本地对象一样被调用,但如果没有正确处理反序列化的对象,就可能成为攻击的...

    Java反序列化漏洞探析及其修复方法研究.pdf

    Java反序列化漏洞是一种在信息安全领域引起广泛关注的新型高危漏洞,其最早在2015年被曝出,存在于Apache Commons Collections等公共库中。Java反序列化漏洞主要影响基于Java编写的各类应用程序,由于其能够远程执行...

    java反序列化漏洞工具

    Java反序列化漏洞是一种安全问题,它出现在程序在接收到网络传输的数据时,不恰当地将这些数据反序列化为对象,导致恶意代码被执行。在WebLogic服务器等Java应用程序中,这种漏洞可能导致权限提升、系统控制甚至数据...

    Java反序列化漏洞利用集成工具

    Java反序列化漏洞是软件安全领域的一个重要话题,尤其对于Java开发者和安全研究人员而言。这个“Java反序列化漏洞利用集成工具”很可能是一个用于测试和分析Java应用中反序列化漏洞的工具集。下面,我们将深入探讨...

    基于字节码搜索的Java反序列化漏洞调用链挖掘方法.pdf

    Java反序列化漏洞是一种在Java应用程序中常见的安全漏洞,它发生在应用程序反序列化不可信的数据时,而这些数据可能被篡改,导致恶意代码执行。由于Java类库功能的不断更新与扩展,反序列化漏洞的潜在范围越来越广。...

    Java反序列化漏洞利用工具(全)

    java反序列化漏洞利用工具包含jboss|weblogic,网上其实有很多,但是用别人的工具收30分是不是有点不厚道,所以我用自己的分下载下来,然后以最低分贡献给大家,上次没有审核通过,希望这次可以……

    Java反序列化漏洞利用工具(WebLogic&Jboss)

    使用注意: 1. WebLogic反弹需要等5秒左右 2. 该工具为对外测试版,请尽量按照正常思路来用,...5. 体积更小,不再依赖java环境,但程序采用.net编写,需要.net 4.0环境 待完成: weblogic回显结果测试中,稍后加入

    weblogic的JAVA反序列化漏洞修改方法

    windows版weblogic的JAVA反序列化漏洞修改方法,亲测

    6、java反序列化漏洞.pdf

    Java 反序列化漏洞 Java 反序列化漏洞是指在 Java 中,对象的序列化和反序列化过程中存在的安全漏洞。序列化是将对象的状态信息转换为可以存储或传输形式的过程,而反序列化是将对象数据从按照某一种标准,解析成...

    Oracle+Weblogic+Server+Java反序列化漏洞 解决方案

    Oracle+Weblogic+Server+Java反序列化漏洞 解决方案 Oracle+Weblogic+Server+Java反序列化漏洞 解决方案

    Java反序列化漏洞1

    Java反序列化漏洞1 Java反序列化漏洞是一种常见的安全漏洞,发生在Java语言中。当攻击者能够控制序列化的输入时,Java的反序列化机制可能会将恶意对象反序列化,导致安全问题。本文将详细介绍Java反序列化漏洞的...

    Java反序列化终极测试工具.zip

    在Java应用服务器如JBOSS、WebLogic和Websphere等环境中,反序列化漏洞经常被利用,因此测试和防范这些漏洞至关重要。 本压缩包“Java反序列化终极测试工具.zip”提供了两款专门用于测试Java反序列化漏洞的工具,这...

    javaRMI反序列化漏洞验证工具

    **Java RMI反序列化漏洞概述** Java RMI的反序列化漏洞主要源于不正确的类型检查和信任机制。当接收到未经验证的远程调用时,如果服务器没有正确地校验或限制输入数据,攻击者可以通过构造恶意序列化数据来操控远程...

    weblogic10.3.6补丁(java反序列化漏洞更新步骤).docx

    近日,Apache Commons Collections 等公共库被发现存在 Java 反序列化漏洞,WebLogic、WebSphere、JBoss、Jenkins、OpenNMS 等主流中间件和框架均受到影响,攻击者利用该漏洞可以远程执行操作系统命令,入侵应用系统...

Global site tag (gtag.js) - Google Analytics