分类: java

10 篇文章

hessian
Hessian 反序列化链 基础: 序列化和反序列化: package com.example; import com.caucho.hessian.io.HessianInput; import com.caucho.hessian.io.HessianOutput; import java.io.*; public class ObjectTe…
CB链
CB链 在CC4中我们知道PriorityQueue.readObject()->PriorityQueue.heapify()->PriorityQueue.siftDown()->PriorityQueue.siftDownUsingComparator()可以调用某个对象的compare()方法,之前我们用的是Transfo…
RMI
RMI: RMI是什么:Java的RMI远程调用是指,一个JVM中的代码可以通过网络实现远程调用另一个JVM的某个方法。RMI是Remote Method Invocation的缩写。 提供服务的一方我们称之为服务器,而实现远程调用的一方我们称之为客户端。 概念图: 客户端: 存根/桩(Stub):远程对象在客户端上的代理; 远程引用层(Remot…
CC7
CC7: 这个就是改了一下触发transform()的 版本要求: JDK < 8u121 Commons-Collections ≤ 3.2.1 LazyMap类: 还是从get()方法触发transform()方法入手: public Object get(Object key) { // create value for key if …
CC2
CC2: 就是个CC4的变种,只是用了CC3的字节码动态加载类,同时用InvokerTransformer直接触发newTransformer(),同时由于是字节码加载所以也不用考虑重复调用transform()。 POC: package org.example; import java.lang.reflect.Field; import ja…
CC5
CC5: 这个相比CC1只是出口变了一下。 LazyMap类: 我们知道这个类的get()方法可以触发transform()方法。 public Object get(Object key) { // create value for key if key is not currently in the map if (map.containsKe…
CC4
CC4: 影响版本: JDK 8 Commons-Collections:4 TransformingComparator类: 入口:compare()函数 public int compare(final I obj1, final I obj2) { final O value1 = this.transformer.transform(obj…
CC3
CC3: 这个链子主要是用于Runtime类用不了的时候,原理就是用类似类加载器的方法从字节中创立一个恶意对象出来。 环境: jdk8u71以前 Commons-Collections <= 3.2.1 TemplatesImpl类: 先看入口: 类加载器的defineClass()本来是protected类型,且知识加载类,不执行类。要额外…
CC6
CC6: 版本要求: JDK ≤ 8u76 CommonsCollections <= 3.2.1 在cc1中,我们已经知道了AnnotationInvocationHandler类的invoke方法可以触发LazyMap的get方法,但其实TiedMapEntry类的getvalue方法也可以触发。 LazyMap: 我们先来看LazyMa…
CC1
java反序列化CC1链路 版本要求: commons-collections 3.1–3.2.1 jdk < 8u71 链路概览: /* Gadget chain: ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entry…