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