欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

jackson反序列化详细分析

来源:本站整理 作者:佚名 时间:2017-07-19 TAG: 我要投稿

这是今年四月份被公开的jackson反序列化漏洞,不过目前看来利用比较鸡肋,本篇只以技术学习的角度来分析这个漏洞,如有问题,还望大牛批评指出。
漏洞情况
Jackson是一套开源的java序列化与反序列化工具框架,可将java对象序列化为xml和json格式的字符串及提供对应的反序列化过程。该漏洞的触发条件是ObjectMapper反序列化前调用了enableDefaultTyping方法。该方法允许json字符串中指定反序列化java对象的类名,而在使用Object、Map、List等对象时,可诱发反序列化漏洞,导致可执行任意命令。
影响版本
Jackson 2.7(
Jackson 2.8(
环境
Jackson-2.8.8.jar
Jdk1.7.0_45(这里分析使用jdk1.7, 不能使用jdk1.8之上的版本,后面会解释说明)。
我们先看下漏洞的poc。
User.java:

Exp.java:

Main.java:

首先jackson会解析要转化json数据中的类,提取出类的变量和相应方法。我们在
BeamnPropertyMap.class->init(Collection props)最后
_hashArea = hash处下上断点可以看出User.class的信息。

然后BeanDeserializer.class->vanillaDeserialize()函数,该函数会遍历json数据的key-value,
并将类中key变量设置为value值。

根据构造的json数据,jackson会首先设置User类object的值。
由于object的值是com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl。
Jackson会首先设置TemplatesImpl相关变量。
程序再次进入BeamnPropertyMap.class->init(Collection props),在_hashArea中我们可以看到TemplatesImpl类的相关信息。

其中有三个是我们通过json传入得参数,其对应的函数分别为
transletBytecodes :  private synchronized void com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.setTransletBytecodes(byte[][]),
outputProperties:  public synchronized java.util.Properties com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getOutputProperties(),
transletName:  protected synchronized void com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.setTransletName(java.lang.String),
然后程序进入vanillaDeserialize函数,按照我们构造json数据 的key的顺序开始设置value值。

然后进入deserializeAndSet()函数,先调用setTransletBytecodes()函数设置

transletBytecodes的值。此时value值就是我们的exp数据。
然后调用setTransletName()函数设置transletName的值,此时的value就是我们传入得”p”.

最后一次循环处理key为outputProperties的情况。程序执行了getOutputProperties()方法。弹出计算器。

为什么执行getOutputProperties()函数后就算执行我们的exp呢(这里弹出计算器),这里其实就是反序列化payload的构造问题了。这里是通过TemplatesImpl类来实现的反序列化利用的。其实就是TemplatesImpl中有个_bytecodes变量,用来存放类的字节的,当我们调用getOutputProperties()函数,就会加载bytecodes中的类,执行了我们的代码。相关内容具体可参考:http://drops.xmd5.com/static/drops/papers-14317.html这篇文章。
新版本的2.8.9就对反序列化所用的一些类进行了过滤:

添加了一个函数判断,来检测是否加载的类为反序列化漏洞常用类,如果是则报错。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载