java反序列化 cc链1 分析_java反序列化cc1链分析,网络安全进程保活黑科技实现原理解密及方法

commons-collections commons-collections 3.2.1

下面看过来,这里我们右键pom.xml -> maven然后按下面的来

然后我们就可以看到这里多了一个target目录,然后下面下载了依赖

链子分析

利用第一阶段

首先入门点在这里,org.apache.commons.collections.Transformer类中,就是在这里面

这里他是一个class文件,但是我们知道反编译class文件出来的代码是不好分析,右上角那里可以帮我们把源代码下载过来。

至于为什么使用Transformer接口,这里我们可以看到下面,这里我们可以理解成一个转换对象的地点,我们传进去的对象都会被转换后在返回,而且它可以接受任何对象。

这里我们选中Transformer,使用快捷键ctrl+alt+b,我们就可以快速查看使用了Transformer接口的类,因为我们知道InvokerTransformer是下一个节点,这里我们直接来到那里

这里我们来到InvokerTransformer类中的transform方法,这里我们可以知道,他是利用了反射,下面我们分析一下

input是我们传入的对象

Class cls = input.getClass(); 通过input对象获取字节码文件

//获取input对象中的iMethodName(iParamTypes)方法
//注意:java中方法是可以重名的,只要参数数量不一样就可以
Method method = cls.getMethod(iMethodName, iParamTypes);

//调用了iMethodName方法,参数的值是iArgs
method.invoke(input, iArgs);

然后找到参数的值的位置,这里参数的值,我们可以new的对象的时候附带进去,发现参数值,没有任何过滤,证明我们可以进行恶意代码了。

这里我们可以看看基础恶意代码执行

//但是我们不能以这种方法来进行恶意代码执行,我们这里将他转成反射的形式
Runtime.getRuntime().exec(“notepad”); //使用exec方法打开记事本

这里是反射形式的,这里可以看到上面和上面InvokerTransformer类中的transform方法的形式是一样的呢,所以我们按这样将数据传入到里面

// 获取当前运行时对象
Runtime r = Runtime.getRuntime();

// 通过对象获得字节码文件
Class c = r.getClass();

// 获取Class对象中名为"exec",参数为String类型的public方法
Method execm = c.getMethod(“exec”, String.class);

// 在r对象上调用execm方法,执行"notepad"命令,打开记事本
execm.invoke(r, “notepad”);

这里根据我们需要的东西,将值传进去,那么这时候transform方法中就会上面一样执行,然后弹出记事本。

new InvokerTransformer(“exec”,new Class[]{String.class},new Object[]{“notepad”}).transform®;

利用第二阶段-TransformedMap

既然有了可以恶意代码执行的地方,我们就还需要可以走上去的地方,这里还是需要具有transfrom方法的类,但是这时候目标就变了,我们需要的是能够触发InvokerTransformer的transfrom的类。

这里我们随便找一个transform方法,右键选择查找用法

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值