Java 反序列化漏洞原理(一)Serializable

声明 本文章中所有内容仅供学习交流,严禁用于非法用途,否则由此产生的一切后果均与作者无关。 序列化的定义 序列化是指将数据结构或对象状态转换成可取用格式,以留待后续在相同或另一台计算机环境中,能恢复原先状态的过程。依照序列化格式重新获取字节的结果时,可以利用它来产生与原始对象相同语义的副本。 Java 中的序列化 Java 自身提供了序列化的功能,需要实现 java.io.Serializable 接口,标明该对象是可序列化的。 java.io.Serializable 是一个空接口,不需要对象实现方法。 以下面这段代码为例,展示了一个对象的序列化和反序列化的过程。 import java.io.*; import java.nio.charset.StandardCharsets; import java.util.Base64; public class Eval0 { public static class Command implements Serializable { private String cmd; public String getCmd() { return cmd; } public void setCmd(String cmd) { this.cmd = cmd; } } public static void main(String[] args) throws Exception { // 定义一个对象 Command command = new Command(); command.setCmd("calc"); System.out.println("序列化前: " + command....

October 14, 2021 · 7 分钟 · dushixiang

分享一款非常好用的kafka可视化web管理工具

使用过kafka的小伙伴应该都知道kafka本身是没有管理界面的,所有操作都需要手动执行命令来完成。但有些命令又多又长,如果没有做笔记,别说是新手,就连老手也不一定能记得住,每次想要使用的时候都要上网搜索一下。有些崇尚geek精神的人或许觉得命令行才是真爱,但使用一款好用的可视化管理工具真的可以极大的提升效率。 今天给大家介绍的这款工具叫做kafka-map,是我针对日常工作中高频使用的场景开发的,使用了这款工具之后就不必费心费力的去查资料某个命令要怎么写,就像是:“给编程插上翅膀,给kafka装上导航”。 kafka-map 介绍 kafka map是使用Java11和React开发的一款kafka可视化工具。 目前支持的功能有: 多集群管理 集群状态监控(分区数量、副本数量、存储大小、offset) 主题创建、删除、扩容(删除需配置delete.topic.enable = true) broker状态监控 消费者组查看、删除 重置offset 消息查询(支持String和json方式展示) 发送消息(支持向指定的topic和partition发送字符串消息) 功能截图 添加集群 集群管理 broker 主题管理 消费组 查看消费组已订阅主题 topic详情——分区 topic详情——broker topic详情——消费组 topic详情——消费组重置offset topic详情——配置信息 生产消息 消费消息 docker 方式安装 一行命令即可完成安装 docker run -d \ -p 8080:8080 \ -v /opt/kafka-map/data:/usr/local/kafka-map/data \ -e DEFAULT_USERNAME=admin -e DEFAULT_PASSWORD=admin --name kafka-map \ --restart always dushixiang/kafka-map:latest 更多安装方式以及相信信息可查看: https://github.com/dushixiang/kafka-map 欢迎star和分享给其他小伙伴。

June 13, 2021 · 1 分钟 · dushixiang

openstack victoria版安装

近期公司业务需求,需要安装一套Openstack环境学习,看了一下现在已经出了wallaby版了,我果断选择了上一个版本victoria。因为没有足够多的物理服务器了,只好找了一台64核256G内存6T硬盘的机器来创建几台虚拟机来搭环境了。 实验环境 此次实验使用到了三台虚拟机,都是使用centos8系统,一台机器当作控制和网络节点,另外两台当作计算节点,使用OVS+VLAN的网络模式,eth0作为管理网络,eth1互相连接到OVS网桥上模拟trunk网卡,controller多增加一个eth2用于访问外部网络。 节点 作用 eth0 eth1 eth2 controller 控制节点、网络节点 172.16.10.100 无IP 桥接,无IP compute-101 计算节点 172.16.10.101 无IP ❌ compute-102 计算节点 172.16.10.102 无IP ❌ 安装虚拟机 安装依赖 安装KVM和Linux网桥 yum install -y qemu-kvm libvirt virt-install bridge-utils virt-manager dejavu-lgc-sans-fonts dejavu-lgc-sans-fonts用于解决 virt-manaer 乱码 启动 systemctl enable libvirtd && systemctl start libvirtd 安装OVS yum install openvswitch 启动OVS systemctl enable openvswitch && systemctl start openvswitch 创建虚拟机 使用 virt-manager 创建三台虚拟机...

June 12, 2021 · 10 分钟 · dushixiang

KVM 虚拟机磁盘扩容

一、镜像扩容 注意:需要先关闭虚拟机才能操作,+号前面有空格,后面没有空格。 qemu-img resize test.qcow2 +80G 原镜像磁盘大小20GB,扩容完成后可使用以下命令查看 qemu-img info test.qcow2 输出 image: test.qcow2 file format: qcow2 virtual size: 100G (107374182400 bytes) disk size: 885M cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false 二、Windows磁盘扩容 Windows磁盘扩容比较方便,进入 计算机管理>磁盘管理 找到新增的分区把它添加到需要的分区即可。 三、Linux磁盘扩容 启动虚拟机后,进入虚拟机控制台,使用fdisk -l命令查看磁盘信息。 Disk /dev/vda: 100 GiB, 107374182400 bytes, 209715200 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xe11f7f01 Device Boot Start End Sectors Size Id Type /dev/vda1 * 2048 2099199 2097152 1G 83 Linux /dev/vda2 2099200 41943039 39843840 19G 8e Linux LVM Disk /dev/mapper/cl-root: 17 GiB, 18249416704 bytes, 35643392 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/cl-swap: 2 GiB, 2147483648 bytes, 4194304 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes 可以看到这台虚拟机的磁盘大小已经有100GB了,但分区大小还是没有变化,只有初始大小20GB。...

May 31, 2021 · 4 分钟 · dushixiang

Linux虚拟化技术KVM

在Windows平台上我们习惯于使用VmWare或者virtual box来实现虚拟化,虽然它们拥有Linux版本,但大多数企业都选择了使用KVM来做Linux平台的虚拟化,因此学习掌握KVM是一项必不可少的技能。 安装KVM 以centos为例,下面是安装KVM虚拟化的命令。 yum install -y qemu-kvm libvirt virt-install bridge-utils 这么多软件都是什么作用? 软件 作用 qemu-kvm 整合了QEMU 和 KVM 的一个软件。 libvirt 封装了QEMU的接口,可以更加方便的操作虚拟机,并且提供了很多种编程语言的SDK。 virt-install 用来创建虚拟机的命令行工具。 bridge-utils Linux网桥,用来配置虚拟机的桥接网络。 kvm、qemu、qemu-kvm和libvirt到底有什么关系? KVM(Kernel Virtual Machine)是Linux的一个内核驱动模块,它需要CPU的支持,采用硬件辅助虚拟化技术Intel-VT、AMD-V;内存相关如Intel的EPT和AMD的RVI技术,使得它能够让Linux主机成为一个Hypervisor(虚拟机监控器)。 QEMU是一个纯软件实现的虚拟机,它可以模拟CPU、内存、磁盘等其他硬件,让虚拟机认为自己底层就是硬件,其实这些都是QEMU模拟的,虚拟机的所有操作都要经过QEMU转译一层,也就导致了QEMU本身的性能较差。 qemu-kvm是QEMU整合了KVM,把CPU虚拟化和内存虚拟化交给了KVM来做,自己来模拟IO设备,例如网卡和磁盘。这一套组合拳打下来,性能损失大大降低,相较于直接使用硬件,带来的损耗大概在1%-2%之间。 libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。 启动libvirt systemctl start libvirtd systemctl enable libvirtd 如果你不想使用命令行工具来管理虚拟机,可以安装 virt-manager 。 yum install -y virt-manager 在支持x11转发的ssh客户端(例如:MobaXterm)上可以直接输入 virt-manager 来启动。 虚拟网络类型 和vmware类型,kvm也支持多种类型的网络,主要分为三种。 NAT模式 虚拟机需要把流量发送到宿主机,宿主机器转换网络信息后再发出,外部机器无法感知到虚拟机的存在。此种方式宿主机器相当于一个路由器,因此宿主机上会有一个和虚拟机同网段的IP,并且虚拟机的网关地址是宿主机的这个IP。...

May 29, 2021 · 2 分钟 · dushixiang