freeBuf
主站

分类

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

特色

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

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

有关Kryo的高低版本的漏洞原理
2023-09-18 11:15:50

前言

接着前面详细的分析了在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方法中

# web安全
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录