反序列化漏洞 之 CC1链(审计分析)
反序列化前提1、被序列化和反序列化的类需要实现 Serializable 序列化 接口
2、并重写 readObject 方法,在重写的 readObject 方法中执行 objectInputStream.defaultReadObject 方法(否则无法读取序列化时属性的值)
3、具体原因这里不做解释,底层原理参考 https://www.cnblogs.com/zpchcbd/p/15126154.html 即可
apache commons-collections(阿帕奇 公共集合)组件下曝出的一个反序列化链 简称 CC1 链
依赖环境
JDKvar2 -> Target,实际指向 var6 -> var5 -> var4 -> map(这里我们之前构造函数传入的map)
https://img2023.cnblogs.com/blog/1728854/202303/1728854-20230324165411909-1516299464.png
5.9 var3.get("value") 实际获取的是在 Target 类中名叫 value 方法名的返回类型 ElementType 类给 var7
5.10 第1个判断,var7 = ElementType 绕过一个判断,var5.getValue() 获取到的是 map 中"value"参数 赋值给 var8
5.11 第2个判断(1),var7(ElementTpye)没有实现 var8(String)该接口或实现类,返回 false,因 ! 所以返回 true
https://img2023.cnblogs.com/blog/1728854/202303/1728854-20230324171934116-1940317873.png
5.11 第2个判断(2), var8(String)不是 ExceptionProxy 类或子类所创建的对象,返回 false,因 ! 所以返回 true
https://img2023.cnblogs.com/blog/1728854/202303/1728854-20230324172046705-311378945.png
https://img2023.cnblogs.com/blog/1728854/202303/1728854-20230324171233271-287267175.png
5.12 绕过两个判断执行成功
https://img2023.cnblogs.com/blog/1728854/202303/1728854-20230324172719133-2039907884.png
备注:在 JDK 8u71 开始,就修改了 Annotation Invocation Handler 类的源码,导致该利用链不可用。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]