JavaEE开发篇&原生反序列化&CB链&CC链&Ysoserial链&字节码加载
#补充JS逆向浏览器插件
Hook JS算法脚本
1、安装Tampermonkey(扶墙谷歌商店安装)
2、添加和启用JS插件
3、测试登录看控制台
脚本地址:https://github.com/Captain0X/hacker_tools/blob/main/crack_encrypt.js
#CB链-TemplatesImpl&字节码加载
类加载字节码导致RCE执行(同FastJson)
参考:https://mp.weixin.qq.com/s/XPbbgLcBmHE7dmHswY_S3Q
-> TemplatesImpl#newTransformer()
-> TemplatesImpl#getTransletInstance()
-> TemplatesImpl#defineTransletClasses()
-> TransletClassLoader#defineClass()
#CC链-Transform&TransformedMap
commons-collections
Gadget chain:
ObjectInputStream.readObject()
AnnotationInvocationHandler.readObject())
MapEntry#setValue
TransformedMap#checkSetValue
ChainedTransformer.transform()
ConstantTransformer.transform()
Runtime.class
InvokerTransformer.transform()
getRuntime().exec("calc");
Class.getMethod()
Runtime.getRuntime()
Runtime.exec()
1、寻找sink执行点
作用:执行点触发RCE执行
->ChainedTransformer#transform()
->ConstantTransformer#transform()
->InvokerTransformer#transform()
2、寻找gadget调用链
作用:调用链实现承上启下
->TransformedMap#checkSetValue
->MapEntry#setValue
3、寻找Source入口点
作用:入口点重写方法调用
->AnnotationInvocationHandler#readObject()#setValue
->ObjectInputStream#readObject()
#CC链-Ysoserial&Transform&LazyMap
commons-collections
Gadget chain:
ObjectInputStream.readObject()
AnnotationInvocationHandler.readObject()
Map(Proxy).entrySet()
AnnotationInvocationHandler.invoke()
LazyMap.get()
ChainedTransformer.transform()
ConstantTransformer.transform()
InvokerTransformer.transform()
Method.invoke()
Class.getMethod()
InvokerTransformer.transform()
Method.invoke()
Runtime.getRuntime()
InvokerTransformer.transform()
Method.invoke()
Runtime.exec()