玄机网络安全靶场:Jackson-databind 反序列化漏洞(CVE-2017-7525)
解题报告Jackson-databind 反序列化漏洞CVE-2017-7525平台玄机xj.edisec.net题目 ID424难度简单类型渗透积分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实现任意代码执行。漏洞触发条件条件说明开启 DefaultTypingobjectMapper.enableDefaultTyping()或NON_FINAL模式目标类有无参构造器Gadget 类需要可被实例化字段类型为接口/抽象类/Object允许多态类型注入二、靶机信息项目值靶机 IP52.83.46.51服务端口8081应用框架Spring BootWhitelabel Error Page 特征漏洞响应特征错误响应包含[java.util.LinkedHashMap, {...}]DefaultTyping 开启标志三、漏洞利用过程3.1 服务探测访问靶机http://52.83.46.51:8081/返回 Spring Boot 的 Whitelabel Error PageHTTP 404Content-Type 为application/json;charsetUTF-8。向任意路径发送 POST 请求时错误响应体格式为[java.util.LinkedHashMap,{timestamp:[java.util.Date,1776588242414],status:404,error:Not Found,...}]这是 JacksonenableDefaultTyping()开启后序列化响应时的典型特征确认漏洞存在。3.2 利用方式CVE-2017-7525 利用com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl作为 Gadget通过在 JSON 中注入恶意字节码实现 RCE[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文件的恶意字节码成功获取 Flagflag{78792a67-6638-4410-a6d2-668734de7a8b}四、漏洞影响影响范围说明受影响版本Jackson-databind 2.6.7.1 / 2.7.9.1 / 2.8.9攻击向量网络无需认证危害等级严重RCE可完全控制服务器五、修复建议升级 Jackson-databind至 2.6.7.2、2.7.9.2、2.8.10 或 2.9.x 版本禁用 DefaultTyping避免使用objectMapper.enableDefaultTyping()改用JsonTypeInfo注解精确控制类型信息使用黑名单过滤在无法升级时配置PolymorphicTypeValidator限制可反序列化的类输入验证对 JSON 输入进行严格的类型和内容验证