0%

java web入门 ysoserial 学习 part Ⅱ

前言

上一周简单学习了一下 ysoserial 中的七个 cc 链 这一周开始学习 ysoserial 中的其他利用链

ysoserial
Beanshell1

Beanshell 可以在 java 执行过程中动态的执行 java 代码 因此可以利用其进行 rce 调试用的版本为 bsh-2.0b5

1
2
3
4
5
6
7
PriorityQueue.readObject();
->
Proxy(Comparator).compare();
->
Xthis.InvocationHandler.invoke();
->
evil_compare()

入口和 cc2 一样利用的是 PriorityQueue 类的 readObject() 方法 同时和 cc1 一样利用动态代理 让 Comparator.compare() 触发 Xthis 类中的 InvocationHandler 的 invoke 方法 最后找到了用 Interpreter 创建好的恶意 compare() 方法 触发 rce

image-20200914155158625 image-20200914155319280

此时 methodName 为 compare 最后找到了 恶意的 compare() 方法并执行

C3P0

C3P0 是一个为 java 程序维护连接池的依赖包

1
2
3
4
5
6
7
PoolBackedDataSourceBase.readObject();
->
ReferenceIndirector.getObject();
->
ReferenceableUtils.referenceToObject();
->
new Evil_calss();

链的入口在于 PoolBackedDataSourceBase 类的 readObject() 方法 其先从字节流中反序列化了一个 referenceSerialized 类 并调用其 getObject() 方法 最后调用了 referenceToObject() 方法 其通过工厂类的名字和地址加载类 最后实例化了准备好的恶意类 触发 rce

image-20200915090254509
后记

后面的利用链分析咕咕了 以后遇到再顺手分析吧 接下来开坑 fastJson 反序列化系列漏洞