该漏洞的主要问题就出现在org.apache.commons.collections.Transformer接口上,在Apache-CommonsCollections包中,有一个InvokerTransformer类实现了Transformer接口,并且InvokerTransformer这个类也很恰巧,InvokerTransformer的transform方法提供了一个可以通过 Java反射机制,调用任意 Java 方法的机会: 相信很多漏洞利用者对invoke非常敏感...
只要让iTransformers[i]为InvokerTransformer这个类的对象就可以调用到InvokerTransformer的transform 那我们如何触发呢? 在进行反序列化的时候我们会调用ObjectInputStream类的readObject()方法,如果反序列化类被重写readObject(),那在反序列化的时候Java会优先调用重写的readObject()方法,这样就有了入口点 Payload分析 正文之前...
9 new InvokerTransformer("getMethod",new Class[] {String.class,Class[].class},new Object[] {"getRuntime",new Class[0]}), 10 new InvokerTransformer("invoke",new Class[] {Object.class,Object[].class},new Object[] {null, null}) 11 new InvokerTransformer("exec",new Class[] {String[]....
InvokerTransformer 此类里面的transform类在input不为空的时候会触发反射加载从而导致命令执行 ConstantTransformer 返回值为当前参数的对象 ChainedTransformer ChainedTransformer类的transform方法把传入的对象依次执行tranform方法后返回 这里会返回在之后调用InvokerTransformer.transform(Runtime) ...
这个框架中有一个InvokerTransformer.java接口,实现该接口的类可以通过调用java的反射机制来调用任意函数,于是我们可以通过调用Runtime.getRuntime.exec() 函数来执行系统命令。Apache commons collections包的广泛使用,也导致了java反序列化漏洞的大面积流行。 所以最终结果就是如果Java应用对用户的输入做了反序列化处理,...
new InvokerTransformer("exec", new Class[]{String.class}, new Object[]{"calc.exe"}), }; Transformer transformerChain = new ChainedTransformer(transformers); Map map = new HashMap(); Map lazyMap = LazyMap.decorate(map, transformerChain); ...
invokerTransformer类,通过反射创建新的对象实例。其中transform方法定义为: 这个transform(Object input) 中使用Java反射机制调用了input对象的一个方法,而该方法名是实例化InvokerTransformer类时传入的iMethodName成员变量: 也就是说这段反射代码中的调用的方法名和Class对象均可控。于是,我们可以构造一个恶意的Transformer链...
import java.lang.reflect.Method; public class InvokeTransformerTest { public static void main(String[] args) { Runtime runtime = Runtime.getRuntime(); InvokerTransformer invokerTransformer = new InvokerTransformer("exec", new Class[]{String.class} , new Object[]{"calc"}); invokerTransformer.tran...
Apache Commons Collections中有一个特殊的接口,其中有一个实现该接口的类可以通过调用Java的反射机制来调用任意函数,叫做InvokerTransformer。 JAVA反射机制 在运行状态中: 对于任意一个类,都能够判断一个对象所属的类; 对于任意一个类,都能够知道这个类的所有属性和方法; ...
这个框架中有一个InvokerTransformer.java接口,实现该接口的类可以通过调用java的反射机制来调用任意函数,于是我们可以通过调用Runtime.getRuntime.exec() 函数来执行系统命令。Apache commons collections包的广泛使用,也导致了java反序列化漏洞的大面积流行。 所以最终结果就是如果Java应用对用户的输入做了反序列化处理,...