0%

环境

  • JDK8u65
  • openJDK 8u65
  • Maven 3.6.3(其余版本可以先试试,不行再降版本)
  • Commons-Collections 4.0
    (除 4.0 的其他版本去掉了 InvokerTransformer 的 Serializable 继承,导致无法序列化。)
阅读全文 »

前言

原本的 CC1 链与 CC6 链是通过 Runtime.exec() 进行命令执行的。
而CC3 链这条链子,是使用 类加载机制 来执行恶意代码的。
可以理解为cc1 cc6是命令执行;而cc3是代码执行。

环境

  • jdk8u65
  • Commons-Collections 3.2.1

TemplatesImpl解析

前提知识:利用 ClassLoader#defineClass 直接加载字节码。
忘记的了同学,可以去看,java反序列化-基础中的 类加载流程(调试) 部分。

ClassLoader.loadClass() --> ClassLoader.findClass() --> ClassLoader.defineClass()

阅读全文 »

cc6的攻击链后面部分(尾部exec方法)也和之前cc1的一样。
特点: CC6 链,可以不受 jdk 版本制约。

LayzMap的get()–>this.factory.transformer()–>ChainedTransformer.transform()–>InvokerTransformer.transform()–>runtime.exec

阅读全文 »

上一篇我们分析的是TransformedMap的利用链,是此链条传入国内后,国内研究员的分析。
这次我们分析正版yso中的cc1 LazyMap 利用链。LazyMap相比之前的会更加麻烦一些,同时会用到动态代理

阅读全文 »

暂时两个部分

  • 一、IO流
  • 二、runtime解决弹shell

一、IO流

IO是指 Input/Output,即输入和输出。以内存为中心:
代码是在内存中运行的,数据也必须读到内存,最终的表示方式无非是 byte数 组,字符串等,都必须存放在内存里。

阅读全文 »

1、Apache Commons Collections包和简介

Apache Commons是Apache开源的Java通用类项目在Java中项目中被广泛的使用,Apache Commons当中有一个组件叫做Apache Commons Collections,主要封装了Java的Collection(集合)相关类对象。

以下是Collections的包结构和简单介绍,如果你想了解更多的各个包下的接口和实现,请参考Apache Commons Collections 3.2.2 API文档

  • org.apache.commons.collections – CommonsCollections自定义的一组公用的接口和工具类
  • org.apache.commons.collections.bag – 实现Bag接口的一组类
  • org.apache.commons.collections.bidimap – 实现BidiMap系列接口的一组类
  • org.apache.commons.collections.buffer – 实现Buffer接口的一组类
阅读全文 »

jdk的安装

由于我们测试时要用到多个jdk。
所以直接虚拟机安装多个jdk,将jdk目录拷贝到物理机中。在使用时进行切换。

  • jdk1.7.0_21
  • jdk1.7.0_51
  • jdk1.8.0_65
  • jdk1.8.0_66
  • jdk1.8.0_71
  • jdk1.8.0_73
  • jdk1.8.0_121
  • jdk1.8.0_141
  • jdk1.8.0_271
  • jdk11_28
阅读全文 »

一、反序列化的想法

readObject中的代码会自动执行,给予攻击者在服务器上运行代码的能力。

  • 1、直接通过入口类的readObject直接调用危险方法。

  • 2、入口类参数包含可控类,该类有危险方法。

  • 3、继续套娃,入口类包含可控类,该类有调用其他有危险方法的类,readObject时调用。

pojo类中添加代码:

1
2
3
4
private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException {
ois.defaultReadObject();
Runtime.getRuntime().exec("calc");
}

流程:正常进行序列化与反序列化,调用readObject,ObjectInputStream输入流,读取defaultReadObject对象。执行calc命令。

阅读全文 »

四个部分

一、java SE基础(这部分不写了,自己看菜鸟教程 或者 b站大学视频教程)
推荐:狂神说java
二、java反射
三、序列化与反序列化
四、jdk动态代理
五、类加载部分

二、java反射

java反射流程

阅读全文 »