赞
踩
前言
之前分析了CC1链,现在分析一下CC6链
CC1链使用了AnnotationInvocationHandler类来利用,但是高版本的JDK已修复这个漏洞,现在必须找通过TransformedMap类或者LazyMap类来触发漏洞
环境
JDK:1.8.0_101
Apache Commons Collections:3.2.1
正文
在CC1中,可以通过LazyMap中的get方法调用transform方法,现在需要再找一个调用get方法的的地方,这里可以看TiedMapEntry类
该类中的构造器可以直接进行调用
这里可利用tiedMapEntry调用getValue()方法就可以进行漏洞触发
TiedMapEntry类中的hashcode方法也调用了getValue()方法
这里和URLDNS链很像,因为HashMap的put方法里面会调用hash方法
所以利用链可以改为
HashMap的readobject就能实现重写了readObject
执行后发现在序列化的时候已经执行了命令
这里可以通过new ConstantTransformer(1)
来替换chainedTransformer
这样反序列化的时候还是无法执行命令,是因为key存在,无法进入if函数
所以在序列化之前删掉key值
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。