我想时至今日,这个漏洞依然存在,据说都已经有人写出了webshell,很恐怖呀。
接下来分析下这个漏洞。
Java序列化和反序列化
具体实现细节可参考: Java序列化机制和原理。
一个简易的漏洞程序
在Java反序列化中,会调用被反序列化的readObject方法,当readObject方法被重写不当时产生漏洞。
public class demon {public static void main(String args[]) throws Exception{//序列化//定义myObj对象MyObject myObj = new MyObject();myObj.name = "hi";//创建一个包含对象进行反序列化信息的”object”数据文件ObjectOutputStream os = new ObjectOutputStream(new FileOutputStream("object"));//writeObject()方法将myObj对象写入object文件os.writeObject(myObj);os.close();//反序列化//从文件中反序列化obj对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream("object"));//恢复对象MyObject objectFromDisk = (MyObject)ois.readObject();System.out.println(objectFromDisk.name);ois.close();}static class MyObject implements Serializable {public String name;//重写readObject()方法private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException{//执行默认的readObject()方法in.defaultReadObject();//执行打开计算器程序命令Runtime.getRuntime().exec("calc.exe");}}
}
参考
Dubbo反序列化漏洞(CVE-2023-23638)原理分析
Adobe ColdFusion 反序列化漏洞复现(CVE-2023-29300)
漏洞深度分析|CVE-2023-24162 hutool XML反序列化漏洞
Java反序列化漏洞的原理分析
公众号
更多内容,欢迎关注我的微信公众号: 半夏之夜的无情剑客。