Java反序列化高危漏洞重现

Java反序列化漏洞存在着极大危害,今天我来为大家重现一下:
1.新建一个 Write 类,来进行序列化操作,

package cn.serializable;
​
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
​
public class Write {
​
    public static void main(String[] args) throws IOException{
        //将e转化为字节序列存储于/tmp/2.ser
        Employ e = new Employ("zhangyida");
​
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("/temp/2.ser"));
        oos.writeObject(e);
        oos.close();
        System.out.println("Serialized data is saved in /temp/2.ser");
​
    }
}


2.新建一个 Read 类,来实现反序列化,

package cn.serializable;
​
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
​
​
public class Read {
    public static void main(String[] args) throws IOException, ClassNotFoundException{
            ObjectInputStream obis = new ObjectInputStream(new jFileInputStream("/temp/2.ser"));
            Employ e = (Employ) obis.readObject();
            obis.close();
            System.out.println(e);
    }
​
}


3.下面就是漏洞实现的重要之处了,新建员工类 Employ.java,定义一个name 属性​。

package cn.serializable;
​
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.io.IOException;
​
public class Employ implements Serializable {
    public String name;
​
    public Employ() {
    }
​
    public Employ(String name){
        this.name = name;
    }
​
    private void  readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{
        ois.readObject();
        Runtime.getRuntime().exec("calc");
    }
}


通过观察你可以发现,在员工类 Employ.java 中,我们重写了 readObject()方法,并将可执行语句写入该方法内部,这样在进行反序列化的时候就会调用该方法,从而执行我们想要进行的操作​。


4.执行步骤​:

运行 Write.java ,进行序列化操作;
运行 Read.java  ,进行反序列化​操作;
下面是成功实现打开电脑计算器的截图,你也可以试着体验一下​。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值