POJONode#toString调用getter方法原理前言前面说到了在fastjson中的原生的一个反序列化调用任意类的getter方法的原理与细节 从最开始的fastjson < 1.2.48下的在JSONObject / JSONArray类反序列化过程没有安全检查的情况下通过BadAttributeValueExpException#readObject调用JSONObject#toString / JSONArray#toString方法也即是JSON#toString方法触发getter 再到fastjson >= 1.2.48下的存在有SecureObje
jdbc反序列化使用环境 12345<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.12</version> </dependency> 如下是简单使用,主要是利用DriverManager.getConnection进行连接 123456789101112131415161718192021package
TemplatesImpl 链子12345TemplatesImpl#getOutputProperties() -> TemplatesImpl#newTransformer() -> TemplatesImpl#getTransletInstance() -> TemplatesImpl#defineTransletClasses() -> TransletClassLoader#defineClass() defineClass一般我们不能使用,newTransformer就可以外调了,但是也可以getOutputProperties POC1234567891
JAVA文件系统JAVA SE内置了两类文件系统::java.io和java.nio,java.nio的实现是sun.nio JAVA IO 文件系统Java抽象出了一个文件系统的对象:java.io.FileSystem,不同的操作系统有不一样的文件系统,例如Windows和Unix就是两种不一样的文件系统: java.io.UnixFileSystem、java.io.WinNTFileSystemjava.io.FileSystem是一个抽象类,它抽象了对文件的操作,不同操作系统版本的JDK会实现其抽象的方法从而也就实现了跨平台的文件的访问操作。 需要注意的点有:\1. 并不是所有的文
什么是classAnnotations# 众所周知,在序列化Java类的时候用到了一个类,叫ObjectOutputStream。这个类内部有一个方法 annotateClass,ObjectOutputStream的子类有需要向序列化后的数据里放任何内容,都可以重写这个方法,写入你自己想要写入的数据。然后反序列化时,就可以读取到这个信息并使用。 classAnnotations表示和类相关的Annotation的描述信息,这里的数据值一般是由ObjectOutputStream的annotateClass()方法写入的,但由于annotateClass()方法默认为空,所以classAnn
RMI原文简介Java的RMI远程调用是指,一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法。RMI是Remote Method Invocation的缩写。提供服务的一方我们称之为服务器,而实现远程调用的一方我们称之为客户端。 远程调用的方法需要- 一个继承了java.rmi.Remote的接口 123456import java.rmi.Remote;import java.rmi.RemoteException;public interface RemoteHelloWorld extends Remote { public String hello()
ClassLoader类加载机制#Java程序在运行前需要先编译成class文件,Java类初始化的时候会调用java.lang.ClassLoader加载类字节码,ClassLoader会调用JVM的native方法(defineClass0/1/2)来定义一个java.lang.Class实例。 ClassLoader#包含以下几个ClassLoader:- Bootstrap ClassLoader (引导类加载器) 该类加载器实现于JVM层,采用C++编写- Extension ClassLoader (扩展类加载器)- App ClassLoader (系统类加载器) 默认的类加载器
Unsafesun.misc.Unsafe是Java底层API(仅限Java内部使用,反射可调用)提供的一个神奇的Java类,Unsafe提供了非常底层的内存、CAS、线程调度、类、对象等操作、Unsafe正如它的名字一样它提供的几乎所有的方法都是不安全的,本节只讲解如何使用Unsafe定义Java类、创建类实例。由于Unsafe是禁止外部调用的,我们可以先看看Unsafe的代码片段,看看如何通过反射获取Unsafe实例 123456789101112131415161718192021222324252627import sun.reflect.CallerSensitive;import
java反序列化实题目项目地址 lab1-basic:123456789101112131415161718import java.io.ObjectInputStream;import java.io.Serializable;public class Calc implements Serializable { private boolean canPopCalc = false; private String cmd = "ls -al"; public Calc() { } private void rea
内存马学习笔记(二)severlet内存马还是那两句话 Servlet、Listener、Filter 由 javax.servlet.ServletContext 去加载 Servlet 3.0 API 允许使 ServletContext 用动态进行注册 先分析流程createstandard context=StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tomcat_war] catalina 就是Tomcat服务器使用的 Apache实现的servlet容器的 名字。