java反序列化
🎼个人主页:金灰
😎作者简介:一名简单的大一学生;易编橙·终身成长社群的嘉宾.✨
专注网络空间安全服务,期待与您的交流分享~
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
🍊易编橙·终身成长社群🍊 : http://t.csdnimg.cn/iSLaP 期待您的加入~
免责声明:本文仅做分享~
目录
JAVA
java的反序列化
类要能序列化满足的条件:
反序列化漏洞利用条件:
例:
java反序列化总结:
JAVA
java基础
java是一门编程语言
纯粹的 面向对象类和类的方法
都存放在包,package中java的web基于servlet --定义路由 ,...
java的反序列化
序列化 类实例->字节流
反序列化 字节流->类实例序列化 writeObject
反序列化 readObject
--自动调用
类要能序列化满足的条件:
1 实现java.io.Serializeble 接口
2 该类的所有属性必须都是可序列化,如果有一个属性是不可序列化的,那么这个属性必须注明是短暂的.
反序列化漏洞利用条件:
1 有反序列化接口,能够提交序列化的数据,会自动调用对应类的readObject方法.
2 有可以利用的类, readObject通过跳板,最终可以实现文件读取、写入或者执行.
例:
# 类
package com.ctf.entity;public class User implements Serializable {private static final long serialVersionUID = -3254536114659397781L;private String username;public User(String username) {this.username = username;}public String getName(){return this.username;}private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {in.defaultReadObject();Runtime.getRuntime().exec(this.username);}
}//user = (User) objectInputStream.readUnshared();
---------------------------------------------------------------------------+public class BaseUser implements Serializable {private static final long serialVersionUID = -9058183616471264199L;public String secret=null;private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {in.defaultReadObject();Runtime.getRuntime().exec(this.secret);}}user = (User) objectInputStream.readUnshared();当不允许反序列化漏洞的类,可以反序列化子类,也可以反序列化父类.User BaseUser readObject
//反序列化父类
user = (User) safeObjectInputStream.readUnshared();
//强转
java反序列化总结:
1 需要有1个提交反序列化字节流的地方.
2 有可以被利用的类,存在 readObject 方法.
3 类反序列化后,类实例已不再关注,我们重点是执行了readObject方法.