最近这两年反序列化漏洞特别的”火“,反序列化漏洞的主要成因是在JAVA中,ObjectOutputStream中的writeObject()方法可以将对象序列化来存入硬盘/网络中等,ObjectInputStream中的readObject()方法可以从序列化文件中读出内容来反序列化,然而在反序列化中没有对序列化文件进行检测,导致漏洞。
先写一个普通的Student类,就一个setName()和getName()方法:
package com.sdyp;
import java.io.Serializable;
public class Student implements Serializable{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
}
进行序列化和反序列化的主方法:
package com.sdyp;
import java.io.File;
import java.io.IOException;
import javax.imageio.stream.FileImageInputStream;
import java.io.*;
public class Serandunser {
public static void main(String[] args) throws IOException, ClassNotFoundException{
//打开要存储的文件名
File ser=new File("ser.ser");
//序列化流
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(ser));
Student stu=new attack();
stu.setName("hasaki");
//将序列化对象写入文件
oos.writeObject(stu);
//文件的反序列化流
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(ser));
//从文件中读取反序列化流
Student read=(Student)ois.readObject();
System.out.println(read.getName());
}
}
程序在正常行为下运行的正常结果:
image.png
我们重写一个继承Student类的attack类来模拟攻击,将getName()重写为执行命令调用计算器:
package com.sdyp;
import java.io.IOException;
public class attack extends Student {
public String getName(){
Process pr=null;
try{
pr=Runtime.getRuntime().exec("calc");
}
catch(Exception e){
e.printStackTrace();
}
return null;
}
}
那么修改主函数为序列化和反序列化attack类:
package com.sdyp;
import java.io.File;
import java.io.IOException;
import javax.imageio.stream.FileImageInputStream;
import java.io.*;
public class Serandunser {
public static void main(String[] args) throws IOException, ClassNotFoundException{
//打开要存储的文件名
File ser=new File("ser.ser");
//序列化流
ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(ser));
Student stu=new attack();
stu.setName("hasaki");
//将序列化对象写入文件
oos.writeObject(stu);
//文件的反序列化流
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(ser));
//从文件中读取反序列化流
Student read=(Student)ois.readObject();
System.out.println(read.getName());
}
}
成功执行命令弹出计算器:
image.png
网友评论