本文作者:light(Ms08067实验室 SRSP TEAM小组成员)
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。
无回显区分 Fastjson 和 Jackson
Fastjson要求不是很严格,所以当添加key时时不会报错的, Jackson 因为强制 key 与 javabean 属性对齐,只能少不能多 key,所以会报错,服务器的响应包中多少会有异常回显。
CVE-2017-7525
Jackson-databind在设置 Target class 成员变量参数值时,若没有对应的 getter 方法,则会使用 SetterlessProperty 调用 getter 方法,获取变量,然后设置变量值。当调用 getOutputProperties() 方法时,会初始化transletBytecodes 包含字节码的类,导致命令执行。使用JDK7u21的com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作为Gadget,发送如下请求,将会执行touch/tmp/prove1.txt
数据包
POST /exploit HTTP/1.1
由于此漏洞为JDK7u21及以下版本环境中存在,故升级jdk版本及可防御。
扫描下方二维码加入星球学习
加入后会邀请你进入内部微信群,内部微信群永久有效!
目前25000+人已关注加入我们
本文分享自微信公众号 - Ms08067安全实验室(Ms08067_com)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。