Ysoserial

在之前的文章中已经分析了ysoserial中 URLDNS 链,有兴趣的师傅可以阅读一下。但是这条链子也只是 Java 反序列化学习的开胃菜,接下来的 Commons-Collections 利用链才是主菜。
最近用Go编写Java反序列化相关的扫描器,遇到一个难点:如何拿到根据命令生成的payload。
从一开始接触Java序列化漏洞就经常看到以Java集合作为反序列化入口,但是也没有仔细思考过原因。分析的Gadget多了觉得很多东西有必要总结一下,所以有了本篇文章。
最近分析了下Weblogic CVE-2020-14654和CVE-2020-14841的Gadget,里面都用到了PriorityQueue作为入口。在ysoserial中也有不少链用到了PriorityQueue,这里做下分析和总结。
CommonsBeanutils1 是一条比较古老的反序列化利用链,今年出的新利用链Apache Click1与之非常相似,同时填补在上篇文章中留的坑,解决openAM反序列化利用链构造问题。
在这次护网时就已产生了魔改ysoserial的想法, 原因是其本身自携带了许多的反序列化Gadgget,并且frohoff也在内部适配了许多的Util,让后续添加Gadget更加的方便,同时其模式为exploit-payloads,如果对ysoserial内部做改动就不需要将其作为lib加入其他项目中,也比较方便。
总感觉年纪大了,脑子不好使,看过的东西很容易就忘了,最近两天又重新看了下java反序列化漏洞利用链相关技术,并尝试寻找新的利用链,最后找到commons-collections中的类DualHashBidiMap能够触发利用链,不依赖于JDK,然后对比了ysoserial代码,暂未发现使用DualHashBidiMap类的触发的方式,遂记之。
很早就接触了ysoserial这款工具,堪称为“java反序列利用神器”,有很多大佬针对这款工具的payload生成姿势分析的非常透彻,但很少分析这个工具的架构以及其使用时的一些坑点,因此写下本文与大家分享。同时也从中学习到了一些工具编写的设计思想,希望能够运用到自己工具当中。
在开始前,先分享下对于jar文件的三种调试方式。