自定义异常调用fastjson序列化问题

一、描述

程序中发现,空指针异常(java.lang.NullPointerException),调用fastjson反序列化,不会报错
自定义的异常(*.ServiceMethodNotFoundException),调用fastjson反序列化,会报错

二、Debug了一下代码发现:
1、调用了toJSONString(),在序列化后的字符串中加入了“@type”属性
"@type":"*.NullPointerException"
"@type":"*.ServiceMethodNotFoundException"
2、@type会给fastjson的安全漏洞。所以在1.2.25版本号后,fastjson增加了check方法。
Fastjson默认也为check方法增加了107个白名单。其中NullPointerException就在白名单中。白名单中,有常用的类。截图如下

所以,自定义异常被fastjson做为非安全信息,拦截了。

三、解决办法

可以把自定义异常,拆分成key:value格式,然后组装成map或JSONObject。然后再序列化

### 关于 FastJSON 序列化漏洞的复现靶场或测试环境 FastJSON 是阿里巴巴开源的一个高性能 JSON 解析库,在 Java 开发中广泛使用。然而,由于其设计上的缺陷,FastJSON 曾多次暴露出严重的反序列化漏洞,这些漏洞可能导致远程代码执行 (RCE) 或其他安全风险。 #### 使用 Docker 构建 FastJSON 漏洞靶场 可以通过 `Docker` 和 `VulHub` 提供的镜像快速搭建 FastJSON漏洞测试环境。以下是具体的实现方式: 1. **基于 VulHub 的 FastJSON 靶场** 参考引用提到 Kali 中通过 Docker 启动了 vulhub 的 fastjson 1.2.24 漏洞靶场环境[^2]。可以按照以下步骤操作: ```bash docker pull vulhub/fastjson:1.2.24 docker run --rm -d -p 8080:8080 --name fastjson-vuln vulhub/fastjson:1.2.24 ``` 上述命令会拉取并启动一个包含 FastJSON 1.2.24 版本漏洞的容器服务,默认监听端口为 `8080`。访问该服务即可进行漏洞验证。 2. **自定义构建靶场** 如果需要更灵活的控制或者特定版本的 FastJSON 测试环境,则可以选择手动创建项目文件夹,并编写简单的 Spring Boot 工程来集成指定版本的 FastJSON 库。例如: 创建 Maven 项目的 `pom.xml` 文件如下所示: ```xml <dependencies> <!-- 引入 FastJSON --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.24</version> </dependency> <!-- 引入 Web 支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> ``` 编写控制器类用于接收 POST 请求数据并通过 FastJSON 进行解析处理: ```java @RestController public class TestController { @PostMapping("/deserialize") public String deserialize(@RequestBody String jsonStr) throws Exception { Object obj = com.alibaba.fastjson.JSON.parseObject(jsonStr, Object.class); return "Deserialized object: " + obj.toString(); } } ``` 将此工程打包成可运行 JAR 并部署到服务器上完成本地化的漏洞研究平台建设工作。 #### PHP 反序列化学习经验分享 虽然问题是针对 FastJSON 的,但如果感兴趣了解另一种语言下的反序列化攻击机制的话,也可以参考 PHP 方面的知识点。比如有提到过重庆橙子科技提供的 php 反序列化练习场景说明文档指出当遇到私有属性命名冲突情况时需调整 URL 参数编码形式才能成功触发预期效果[^3]。 #### JAVA RMI 技术简介及其潜在威胁分析 另外还提到了有关 JAVA Remote Method Invocation 即远程过程调用相关内容介绍部分讲述了它的工作原理以及可能存在的安全隐患等问题所在之处[^4]。不过这与当前讨论主题关系不大所以不再展开细说。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值