ysoserial CommonsColletions5分析】的更多相关文章

我们知道,AnnotationInvocationHandler类在JDK8u71版本以后,官方对readobject进行了改写. 所以要挖掘出一条能替代的类BadAttributeValueExpException 在CC5中除了有一个新的类BadAttributeValueExpException外,还有一个新的类TiedMapEntry,用来调用LazyMap的get方法 TiedMapEntry 在TiedMapEntry的getValue方法中调用了get方法 而map成员变量则是由构…
ysoserial CommonsColletions4分析 其实CC4就是 CC3前半部分和CC2后半部分 拼接组成的,没有什么新的知识点. 不过要注意的是,CC4和CC2一样需要在commons-collections-4.0版本使用,3.1-3.2.1版本不能去使用,原因是TransformingComparator类在3.1-3.2.1版本中还没有实现Serializable接口,无法被反序列化. JDK版本对于CC2和CC4来说,1.7和1.8都测试成功,下面我们就来快速构造一下pay…
ysoserial CommonsColletions2分析 前言 此文章是ysoserial中 commons-collections2 的分析文章,所需的知识包括java反射,javassist. 在CC2中是用的 PriorityQueue#reaObject作为反序列化的入口,利用javassist创建了一个攻击类,使用TemplatesImpl类来承载他 而CC1利用链在JDK1.8 8u71版本以后是无法使用的,具体是AnnotationInvocationHandler的reado…
JAVA安全审计 ysoserial CommonsColletions1分析 前言: 在ysoserial工具中,并没有使用TransformedMap的来触发ChainedTransformer链,而是用了LazyMap的get方法 CommonsCollections1 调用链: /* Gadget chain: ObjectInputStream.readObject() AnnotationInvocationHandler.readObject() Map(Proxy).entryS…
在最后一步的实现上,cc2和cc3一样,最终都是通过TemplatesImpl恶意字节码文件动态加载方式实现反序列化. 已知的TemplatesImpl->newTransformer()是最终要执行的. TemplatesImpl类动态加载方式的实现分析见ysoserial CommonsCollections3 分析中的一.二部分. TemplatesImpl->newTransformer()的调用通过InvokerTransformer.transform()反射机制实现,这里可以看y…
CC7也是一条比较通用的链了,不过对于其原理的话,其实还是挺复杂的.文章如有错误,敬请大佬们斧正 CC7利用的是hashtable#readObject作为反序列化入口.AbstractMap的equals来触发的LazyMap的get方法 POC分析 这条链太过于复杂,无法想象大佬们是怎么样的思维挖掘出这条链的,所以只能跟着大佬的poc跟着进行调试了分析了 public class CC7 { public static void main(String[] args) throws Exce…
上篇文章讲到CC3的TransformedMap链,这篇我们就来讲一下LazyMap链. 其实LazyMap链还是使用的TemplatesImpl承载payload,InstantiateTransformer.TrAXFilter.ChainedTransformer这三个来构造调用链. 和另一条链的区别: 主要区别在于调用ChainedTransformer的transform方法是使用LazyMap的get方法触发.反序列化入口还是AnnotationInvocationHandler的r…
CC3的利用链在JDK8u71版本以后是无法使用的,具体还是由于AnnotationInvocationHandler的readobject进行了改写. 而CC3目前有两条主流的利用链,利用TransformedMap或者LazyMap.我们这篇文章先讲TransformedMap链 TemplatesImpl 在CC2中利用javassist创建了一个攻击类,使用TemplatesImpl类中的newTransformer方法触发 这里写一个简单的demo来演示下: public class…
CC6的话是一条比较通用的链,在JAVA7和8版本都可以使用,而触发点也是通过LazyMap的get方法. TiedMapEntry#hashCode 在CC5中,通过的是TiedMapEntry的toString调用到的LazyMap的get方法,而CC6则是通过TiedMapEntry的hashCode方法 此处hashCode会调用getValue方法,getValue就调用到了LazyMap的get方法 接下来我们要找的就是哪里调用了TiedMapEntry#hashCode HashM…
利用链如下: 其中LazyMap.get()->ChainedTransformer.transform()-InvokerTransformer.transform()与CC1链一致. /* Gadget chain: java.io.ObjectInputStream.readObject() java.util.HashSet.readObject() java.util.HashMap.put() java.util.HashMap.hash() org.apache.commons.c…