有关Kryo的高低版本的漏洞原理
2023-9-18 11:15:50 Author: www.freebuf.com(查看原文) 阅读量:3 收藏

freeBuf

主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

前言

接着前面详细的分析了在hessian中该API的运用原理,这里接着对下面几个进行分析

Kryo

原理

简单的对Kryo协议的介绍

Kryo 是一个快速高效的 Java 二进制对象图序列化框架。该项目的目标是高速、小尺寸和易于使用的 API。任何时候需要持久保存对象时,无论是保存到文件、数据库还是通过网络,该项目都很有用。 Kryo 还可以执行自动深浅复制/克隆。这是从对象到对象的直接复制,而不是对象到字节到对象的复制。

对于该协议的反序列化漏洞可以简单的将其分为5.0.0前的版本和之后的版本

对于5.0.0之前的版本来讲,他是可以在反序列化的的过程中调用目标类的无参构造方法的,也就是可以利用前面提到的UnixPrintServiceLookup的构造方法的调用,进而最终能够调用到他的execCmd方法执行命令(如果能够修改属性值)

我们简单的研究一下为什么能够调用构造方法

一个pojo类

public class User {
    private String name;
    private int age;

    public User() {
        System.out.println("User...");
        this.name = "test";
        this.age = 18;
    }

    public String getName() {
        System.out.println("getName...");
        return name;
    }

    public void setName(String name) {
        System.out.println("getName...");
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

一个测试类

import com.esotericsoftware.kryo.Kryo;
import com.esotericsoftware.kryo.io.Input;
import com.esotericsoftware.kryo.io.Output;

import java.io.ByteArrayOutputStream;

public class kryoTest {
    public static void main(String[] args) {
        Kryo kryo = new Kryo();
//        kryo.register(User.class);
        User user = new User();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        Output output = new Output(byteArrayOutputStream);
        kryo.writeClassAndObject(output, user);
        output.close();

        Input input = new Input(byteArrayOutputStream.toByteArray());
        User object = (User) kryo.readClassAndObject(input);

        System.out.println(object.getName());

    }
}

运行结果如下

image-20230909214949459.png

在反序列化的过程中是调用了构造方法的

反序列的入口是在readClassAndObject方法中


文章来源: https://www.freebuf.com/articles/web/378403.html
如有侵权请联系:admin#unsafe.sh