CC1 链分析

1,整体思路,从尾往上追

  • 触发 RCE 的代码在 InvokerTransformer.transform() 方法中

2,具体跟踪过程

  • 确认依赖是否正常添加,特别注意右击 CC3.1 下载资源,树立规则以方法结尾

  • 展开菜单 ~> Edit ~> Find ~> Find in files ~> 搜索框 InvokerTransformer ~> 点击 Scope ~> public class InvokerTransformer implements Transformer, Serializable ~> InvokerTransformer.java

    • D:\App\apache-maven-3.6.3\mvn_repo\commons-collections\commons-collections\3.1\commons-collections-3.1-sources.jar!\org\apache\commons\collections\functors\InvokerTransformer.java
  • 右击 transform(),点击查找用法(Find Usages)

    • 在底部 “Find” 窗口的工具栏中,点击齿轮图标
    • Scope 下拉,选择作用域,All Place 可以调出 Maven 包
  • org.apache.commons.collectins.map ~> TransformedMap.Java ~> checkSetValue ~> transform()

  • transform() ~> checkSetValue

  • AbstractInputCheckedMapDecorator.java ~> checkSetValue ~> setValue

  • 踩坑点切记添加 jdk 依赖 ~> 将官网下载的 jdk-af660750b2f4.zip ~> jdk-af660750b2f4/src/share/classes/sun ~> 将 sun 目录复制到 jdk 根目录下 ~> setValue sun.reflect.annotation ~> AnnotationInvocationHandler.java ~> memberValue.setValue ~> readObject